⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b1.asm

📁 用汇编语言,并且递归求菲波那契函数FIB(N)---(N from 1 to 24) (huangyujie)
💻 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 + -