汇编语言-计算Fibonacci数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

data segment
OutputBuffer db 10 dup(0ffh)
fibn dw 25
rsnum1L dw ?
rsnum1H dw ?
rsnum2L dw ?
rsnum2H dw ?
rtnumL dw ?
rtnumH dw ?
msg db 'Fib(n)=','$'
data ends

code segment
assume cs:code,ds:data;,ss:stack
main proc far
start:
mov ax,data
mov ds,ax
mov ax,fibn
call Fib
call SendMsg
call OutputDec
mov ah,02h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
mov ah,4ch
int 21h
main endp

Fib proc ;in ax,out rtnum
push ax
cmp ax,2
ja next1
mov rtnumL,1
mov rtnumH,0
jmp fib_end
next1:
dec ax
;rsnum1=fib(ax-1)
call Fib
mov dx,rtnumL
push dx
mov dx,rtnumH
push dx
dec ax
;rsnum2=fib(ax-2)
call Fib
mov dx,rtnumL
mov rsnum2L,dx
mov dx,rtnumH
mov rsnum2H,dx
;
pop dx
mov rsnum1H,dx
pop dx
mov rsnum1L,dx
;rtnum=rsnum1+rsnum2
mov dx,rsnum1L
add dx,rsnum2L
mov rtnumL,dx
mov dx,rsnum1H
adc dx,rsnum2H
mov rtnumH,dx
fib_end:
pop ax
ret

Fib endp
;
OutputDec PROC near
lea di,offset OutputBuffer
add di,9
MOV BX,10
C0:
MOV DX,0
MOV AX,rtnumH
CMP AX,0
JE C1
DIV BX
MOV rtnumH,AX
MOV AX,rtnumL
DIV BX
MOV rtnumL,AX
OR DL,30H
MOV [DI],DL
DEC DI
JMP C0
C1:
MOV AX,rtnumL
C2:
CMP AX,0
JZ C3
MOV DX,0
DIV BX
OR DL,30H
MOV [di],DL
DEC DI
JMP C2
C3:
inc di
mov ah,02h
mov dl,[di]
int 21h
cmp di,9
jnz C3
RET
OutputDec ENDP
;
SendMsg proc near
mov ah,09h
lea dx,msg
int 21h
ret
SendMsg endp
;
code ends
end start

相关文档
最新文档