;输入两个数Va1和Va12,然后打印稍大于此两个数的整数倍得数
;提示输入两个十进制正整数,键盘输入,两整数之间用空格隔开,Enter键结束输入,并换行现实结果。
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
追问程序不对啊!哥们。这个是2的n次方的程序吧
追答没办法!你上教程网自己学吧
追问⊙﹏⊙b汗