斐波拉契數列

2021-10-02 01:29:31 字數 2078 閱讀 2560

編寫彙編程序列印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...