哪位高手能不能帮我用汇编语言编写一个程序,就是表示出斐波那契数列的前20个数?

结果能用二进制显示出来就行了,急要。。。高手们啊拜托了。。。斐波那契数列定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)n>=2... 结果能用二进制显示出来就行了,急要。。。高手们啊拜托了。。。
斐波那契数列定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2) n>=2
展开
 我来答
俊俏又柔美灬繁星N
2010-12-08 · TA获得超过466个赞
知道小有建树答主
回答量:583
采纳率:100%
帮助的人:416万
展开全部
;刚刚写好,呵呵,本人测试通过了,希望对您有帮助,为了方便你看,我加了些注释,有问题可以问我...

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: ;统计一共有多少个数字组成
CMP BYTE PTR DS:[DI+2],0DH
JZ GO
INC DI
JMP L0

GO: ;计算第n个斐波那契数,把数字字符串转换为十进制数
MOV BL,10
MOV AX,1
MOV SI,DI ;为后面判断输入的是不是只输入一个数有用
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个斐波那契数存放到AX中
PUSH AX
ADD AX,BX
POP BX
LOOP L3

L4:
;显示这个斐波那契数
MOV DX,0
LEA SI,RESULT_SHOW
MOV DI,0 ;利用DI来累计一共有多少个数字
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

;参数: (AX)=DWORD型低16位数据
; (DX)=DWORD型高16位数据
; (CX)=除数
;返回: (DX)=结果的高16位,(AX)=结果的低16位
; (CX)=余数
;32位除16位,可以防止溢出!

DIVDW: ;子程序定义开始,功能是分离各个数字出来
PUSH AX
MOV AX,DX
MOV DX,0
DIV CX
MOV BX,AX
POP AX
DIV CX
MOV CX,DX
MOV DX,BX
RET ;子程序定义结束

CODE ENDS

END START
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式