📄 b1.asm
字号:
;***************************************************************************
;B2:求菲波那契函数FIB(N)----(N from 1 to 24) (huangyujie)
;****************************************************************************
INSTACK MACRO
push bx
push ax
push cx
push si
push bp
ENDM
;-----------------------------------------------------------------------------------------
OUTSTACK MACRO
pop bp
pop si
pop cx
pop ax
pop bx
ENDM
;-----------------------------------------------------------------------------------------
DEC_DIV MACRO VAR
mov ax,VAR
div cx
mov VAR,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ENDM
;-----------------------------------------------------------------------------------------
BINIDEC MACRO VAR
push bx
push cx
push si
push di
mov cx,10000d ;why
DEC_DIV VAR
mov dx,0
mov cx,1000d
DEC_DIV VAR
mov dx,0
mov cx,100d
DEC_DIV VAR
mov dx,0
mov cx,10d
DEC_DIV VAR
mov dx,0
mov cx,1d
DEC_DIV VAR
pop di
pop si
pop cx
pop bx
ENDM
;************************************************************************
datarea segment
mess1 db 13,10,'Enter N: $'
mess2 db 13,10,'FIB=$'
mess3 db 'Input error! $'
datarea ends
;-----------------------------------------------------------------------------------------
stackrea segment
dw 128 dup (?)
tos label word
stackrea ends
;***********************************************************************
prognam segment
;-----------------------------------------------------------------------------------------
main proc far
assume cs:prognam,ds:datarea,ss:stackrea
start:
mov ax,stackrea
mov ss,ax
mov sp,offset tos
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
lea dx,mess1
mov ah,09
int 21h
call decibin
call crlf
lea dx,mess2
mov ah,09
int 21h
mov dx,0
call FIBN
mov bx,ax
BINIDEC bx
call crlf
ret
main endp
;-----------------------------------------------------------------------------------------
decibin proc near
mov bx,0
newchar:
mov ah,1
int 21h
mov dl,al
sub al,30h
jl exit1
cmp al,9d
jg exit1
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit1: ret
decibin endp
;-----------------------------------------------------------------------------------------
FIBN proc near
INSTACK
mov bp,sp
cmp bx,1
ja next
mov [bp+6],1
jmp exit
next:
dec bx
call FIBN
mov [bp+2],ax
mov bx,[bp+8]
sub bx,2
call FIBN
mov [bp+4],ax
mov si,[bp+2]
add si,[bp+4]
jnc continue
add dx,1
continue:
mov [bp+6],si
jmp exit
exit:
OUTSTACK
ret
FIBN endp
;-----------------------------------------------------------------------------------------
crlf proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
;-----------------------------------------------------------------------------------------
prognam ends
;***********************************************************************
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -