汇编求N的阶乘

data segment
     note db "please input a number(0~8):$"
     crlf db 13,10,'$'
     result db "!= $"
     n db ?
data ends
code segment
     assume cs:code,ds:data
start:
     mov ax,data
     mov ds,ax
     lea dx,note
     mov ah,09
     int 21h
     call input
     call factor
     call dipcrlf
     call output
     mov ah,4ch
     int 21h
;输入0—8中任意一个数
input proc near
     mov ah,01h
     int 21h
     mov n,al
     sub al,30h
     mov ah,0
     ret
input endp
;求n的阶乘
factor proc near
       push ax
       dec ax
       jnz next
       pop ax
       jmp exit
next:
       call factor
       pop cx
       mul cx ;注意不能用cl,因为当n比较大时(n-1)!可能大于一个字节。
exit:  ret
factor endp
output proc near
       push ax
       push dx
       mov dl,n
       mov ah,02
       int 21h
       lea dx,result
       mov ah,09
       int 21h
       pop dx
       pop ax
       mov cx,10000
       mov dx,0
       div cx
       ;商在ax,余数在dx
       xchg ax,dx
       ;交换后商在dx
       call dipletter
       ;xchg ax,dx
       mov dx,0
       mov cx,1000
       div cx
       xchg ax,dx
       call dipletter      
       ;xchg ax,dx
       mov dx,0
       mov cx,100
       div cx
       xchg ax,dx
       call dipletter
       ;xchg ax,dx
       mov dx,0
       mov cx,10
       div cx
       xchg ax,dx
       call dipletter
       xchg ax,dx
       call dipletter
       call dipcrlf
       ret
output endp
;输出字符
dipletter proc near
          push ax
          push dx
          add dl,30h
          mov ah,02
          int 21h
          pop dx
          pop ax
          ret
dipletter endp
;输出回车换行
dipcrlf proc  near
        push dx
        push ax
        lea dx,crlf
        mov ah,09
        int 21h
        pop ax
        pop dx
        ret
dipcrlf endp
code ends
     end  start

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值