編寫彙編程序列印1-1000的斐波拉契數列
原始碼
assume cs:code,ss:stack,ds:data
data segment
fibo dw 0,1,64 dup(0)
str db 'the fibo list is:',0ah,0dh,'$'
data ends
stack segment
db 128 dup(0)
stack ends
code segment
start:
;-------傳入資料-------
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
;------si是前乙個加數,di是第二個加數,cx用來記總共有多少個數
mov ax,0
mov bx,0
mov si,0
mov di,2
mov cx,2
judge: cmp ax,1000
jb sum ;比1000小,則繼續求和
jmp note
sum: mov ax,fibo[si]
mov bx,fibo[di]
add ax,bx
mov fibo[di+2],ax
add si,2
add di,2
inc cx ;cx記錄了有多少個數
jmp judge
note:
lea dx,str
mov ah,9
int 21h
;總共有cx個數,迴圈cx次
mov si,cx
mov di,0
choose:
dec si
cmp si,0
jg print
jmp exit
print:
mov ax,fibo[di]
mov bx,10
mov dx,0
mov cx,0
s1: div bx
push dx
inc cx
cwdcmp ax,0
jne s1
s2: pop dx
add dl,30h
mov ah,02h
int 21h
loop s2
add di,2
mov dl,9
mov ah,02h
int 21h
jmp choose
exit:
mov ax,4c00h
int 21h
code ends
end start
這個實驗思路比較簡單,我是用si和di來分別指向前乙個數和後乙個數,答案存在ax中,通過比較ax與1000的關係來判斷要不要繼續執行下去
實驗幾次報錯,主要是因為型別不匹配,定義的字型資料與16位暫存器之前直接使用,就會報錯,所以我後來將定義的改為了字型資料。
判斷與累加
judge: cmp ax,1000
jb sum ;比1000小,則繼續求和
jmp note
sum: mov ax,fibo[si]
mov bx,fibo[di]
add ax,bx
mov fibo[di+2],ax
add si,2
add di,2
inc cx ;cx記錄了有多少個數
jmp judge
輸出數列
;總共有cx個數,迴圈cx次
mov si,cx
mov di,0
choose:
dec si
cmp si,0
jg print
jmp exit
在輸出的時候,並沒有使用loop迴圈,通過dec cx,比較大小關係進行列印。 斐波拉契數列
斐波拉契數列 1 1 2 3 5 8 13 21 34.其中每乙個數字都是前兩個數字的和。遞迴計算 long fibonacci int n 非遞迴計算 long fibonacci int n return result 這個函式的遞迴實現使用了雙重遞迴 double recursion 函式對本...
斐波拉契數列
斐波拉契數列 這個數列從第三項開始,每一項都等於前兩項之和。已知斐波拉契數列的前兩項都是1,我們定義求斐波拉契數列的第n項 n 50 的函式為fbnq,請補充完成對fbnq函式的定義。輸入格式 共一行,為乙個正整數。輸出格式 共一行,為乙個正整數。輸入樣例 7輸出樣例 13 斐波拉契數列 def f...
斐波拉契數列問題
問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,包含乙個整數,表示fn除以10007的餘數。說明 在本題中,答案是要求fn除以10...