新聞中心
匯編實現(xiàn)斐波那契數(shù)列前30項(基于給出的程序修改)
算到第 25 項,就超出 16 位二進制數(shù)了。
成都創(chuàng)新互聯(lián)公司聯(lián)系電話:18982081108,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十載,包括銅雕雕塑等多個行業(yè)擁有豐富的網(wǎng)站推廣經(jīng)驗,選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)錦上添花。
需要用到 32 位數(shù)的運算方法。
樓主提供的這些程序,基本都不能用了。
必須重新編寫程序。
程序已經(jīng)編好,輸出如下:
……
28: 0514229
29: 0832040
30: 1346269
哪位高手能不能幫我用匯編語言編寫一個程序,就是表示出斐波那契數(shù)列的前20個數(shù)?
;剛剛寫好,呵呵,本人測試通過了,希望對您有幫助,為了方便你看,我加了些注釋,有問題可以問我...
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
BUFF DB 10
DB ?
DB 10 DUP(?)
RESULT DW ?
RESULT_SHOW DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
LEA DX,BUFF
MOV AH,0AH
INT 21H
MOV DI,0
L0: ;統(tǒng)計一共有多少個數(shù)字組成
CMP BYTE PTR DS:[DI+2],0DH
JZ GO
INC DI
JMP L0
GO: ;計算第n個斐波那契數(shù),把數(shù)字字符串轉(zhuǎn)換為十進制數(shù)
MOV BL,10
MOV AX,1
MOV SI,DI ;為后面判斷輸入的是不是只輸入一個數(shù)有用
MOV CX,DI
L2: PUSH AX
SUB BYTE PTR DS:[DI+1],30H
MUL BYTE PTR DS:[DI+1]
ADD RESULT,AX
POP AX
MUL BL
DEC DI
LOOP L2
;分兩種情況:1.輸入的是1;2.輸入的不是1
CMP SI,1
JNZ L7
CMP BYTE PTR RESULT,1
JNZ L7
MOV AX,RESULT
JZ L4
L7: MOV AX,1
MOV BX,0
MOV CX,RESULT
DEC CX
L3: ;第n個斐波那契數(shù)存放到AX中
PUSH AX
ADD AX,BX
POP BX
LOOP L3
L4:
;顯示這個斐波那契數(shù)
MOV DX,0
LEA SI,RESULT_SHOW
MOV DI,0 ;利用DI來累計一共有多少個數(shù)字
L5:
MOV CX,10
CALL DIVDW
ADD CL,30H
MOV DS:[SI],CL
CMP AX,0
JZ L6
INC SI
INC DI
JMP L5
L6:
MOV DL,DS:[SI]
MOV AH,2
INT 21H
CMP DI,0
JZ OK
DEC SI
DEC DI
JMP L6
OK:
MOV AX,4C00H
INT 21H
;參數(shù): (AX)=DWORD型低16位數(shù)據(jù)
; (DX)=DWORD型高16位數(shù)據(jù)
; (CX)=除數(shù)
;返回: (DX)=結(jié)果的高16位,(AX)=結(jié)果的低16位
; (CX)=余數(shù)
;32位除16位,可以防止溢出!
DIVDW: ;子程序定義開始,功能是分離各個數(shù)字出來
PUSH AX
MOV AX,DX
MOV DX,0
DIV CX
MOV BX,AX
POP AX
DIV CX
MOV CX,DX
MOV DX,BX
RET ;子程序定義結(jié)束
CODE ENDS
END START
Go語言 斐波那契數(shù)列的解法
這么寫效率很低,沒有剪枝,存在大量的重復(fù)計算。
反正你測試用例是有限的,那我騙過你的測試用例就行了啊;)
文章標(biāo)題:go語言算斐波那契數(shù)列,斐波那契數(shù)列定義
新聞來源:http://www.ef60e0e.cn/article/dsciooe.html