您的位置:首页 > 其它

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

2010-05-06 08:36 495 查看
输入一个数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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐