输入一个数n,然后打印出2的n次方

 输入一个数n,打印出2的n次方
 ; 有效输入 n=0~24
 ; 用MASM6.11编译器编译通过
 ; 编译方法: masm /l %1.asm
 ; link /tiny %1.obj
 ;
 code segment
 ASSUME cs:code,ds:code
 .386P
 ORG 100h
 START:
 push cs
 pop ds
again:
 mov dx,offset string ;显示提示
 mov ah,9
 int 21h
 xor bp,bp ;BP清0
 mov cx,2
input:
 mov ah,0
 int 16h ;接收一个字符
 cmp ah,1 ;Esc退出程序
 jz exit
 cmp al,0dh ;回车结束输入
 jz ok
 cmp al,'0' ;比0小重输
 jb input
 cmp al,'9' ;比9大重输
 ja input
 mov ah,0eh ;显示有效输入
 int 10h
 and al,0fh ;化为HEX
 cbw
 xchg bp,ax
 mov bx,10
 mul bx
 add bp,ax
 loop input ;接收下一字符
ok: call hex2asc
 mov si,offset result
 test bp,bp
 jnz k2
 mov word ptr [si],1 ;2^0=1
 mov word ptr [si+2],0
 jmp crt
k2: cmp bp,1
 jnz k3
 mov word ptr [si],2 ;2^1=2
 mov word ptr [si+2],0
 jmp crt
k3: cmp bp,24
 ja again
 dec bp
 mov cx,bp
 finit
 fld num ; 2 入栈
 @mul:
 fimul num ;2^n
 loop @mul
 fstp result ;从栈上取出结果到result
crt:
 mov dx,offset message
 mov ah,9
 int 21h ;显示结果式
 mov si,offset result
 call show ;显示 10 进制结果
 jmp again
exit:
 mov ah,4ch
 int 21h
 
 show: ;将双字Hex化为 N 进制并显示
 mov bx,N
 xor cx,cx
 Q0:
 xor dx,dx
 mov ax,[si+2]
 div bx
 mov [si+2],ax
 mov ax,[si]
 div bx
 mov [si],ax
 or dx,0e30h
 inc cx
 push dx
 cmp ax,0
 jnz Q0
 Q1:pop ax
 int 10h
 loop Q1
 ret
hex2asc: ;将Hex(0~99)化为十进制
 mov ax,bp
 aam
 or ax,3030h
 xchg ah,al
 mov Y,ax
 ret

 string db 0dh,0ah,9,'Input n=(0~24):$'
 message db 13,10,9,'2^'
 Y dw ?
 db '= $'
 num dd 2 ;底数
 result dd ? ;幂
 N dw 10
 CODE ENDS
 END START

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值