assume cs:code
code segment
start:
mov ah,0
mov al,3
push ax
call recursion
pop ax
mov ax,4c00h
int 21h
;栈传递N值
;子程序的局限:N!<= 0xFFFFH
recursion:
push bp
push ax
mov bp,sp
;程序从call调用执行到此,进行了三次压栈,所以ss:[bp+6]是n
mov ax,ss:[bp+6]
cmp ax,0
;如果n的值不等于0,则计算(n - 1)!
jne recursion_next
;如果n的值等于0,则返回1(0!= 1)
mov ax,1
jmp recursion_end
recursion_next:
dec ax
push ax
;递归调用
call recursion
pop ax
;n的阶乘等于n乘以n-1的阶乘(n!= n*(n-1)!)
mul byte ptr ss:[bp+6]
recursion_end:
;计算结果用栈返回
mov ss:[bp+6],ax
pop ax
pop bp
ret
code ends
end start
- [游客] 1 09/06 14:08
- [kang008] 厉害 07/09 16:43
- [游客] 自从看后,才认识到基础的重要,要为中国软件产业作出贡献。就有必要在计算机发展史的路上走一遍。学学大师 04/11 16:37
- [游客] 我现在24岁了,干的是机械,以前就对计算机感兴趣,地直想学,也地直在学却怎么也不能深入,现在看了一老 03/01 01:52
- [yujin8920] 好文章!!! 09/16 00:51
- [musicvs] 幸好看到了这篇文章...基础很重要!我学吉他的时候也是要耐住寂寞、顶住诱惑去练基本功的~ 收藏先^ 08/28 15:33
- [ivwshjj] 收藏了 06/13 13:27
- [游客] 我是个外行,我今年已经33岁了,我是数学系的,曾是一名高中教师,我想做IT,朋友和我说不要做太多无用 05/23 09:37
- [lkx] 金玉之言! 04/18 13:56
- [w0922] 加油自己···· 03/29 22:01
- [游客] 我真心想学汇编语言、但不知道何从下手、、望指教一些书、最好能发到我邮箱lazygin@126.com 11/13 11:03
[ 游客 发表于 2007-12-30 17:54 ]
有意思,收藏一下!