汇编网首页登录博客注册
playboy的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  既然选择了远方,便只顾风雨兼程
  • 『姓名』:playboy             
  • 『性别』:男    『发送消息
  • 个人说明:对不起,我是卧底
  • 详细信息『加为好友』
学习动态
好友圈
文章收藏
友情链接

[2007-12-30 14:46] 计算N!

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)  |  浏览次数(2445)  |  类型(计算机) |  收藏此文  | 

[  游客   发表于  2007-12-30 17:54  ]

有意思,收藏一下!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码