用汇编语言编程,急求!!!!!!!!回答有用的话追加至少50分!!!!!发到734989895@qq.com 谢谢!!

由键盘输入两个正整数Va1和Va12,输出稍大于Va1且是Va12的整数倍的数。
要求:提示输入两个十进制正整数,键盘输入,两整数之间用空格隔开,Enter键结束输入,并换行现实结果。
高手大大快来啊!!!!

第1个回答  2011-06-18
;输入两个数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汗

第2个回答  2011-06-18
汇编。。。入门难,其实蛮简单的。最近考试,没时间,不然的话可以帮你做出来,说说思路吧
思路:
1、多位数的输入。用指令 shl 进行移位相加,以空格判断第一个数输入结束,同样第二个数则以回车判断输入结束,将十进制数转换为16进制存放;
2、Val2是否大于Val1,不是的话Val2=Val2+Val2,进行循环;是的话直接输出Val2就是结果了。
3、换行实际上就是用 int 21 h 中 的 2 号进行单个字符 ,‘0dh’,‘0ah’的输出而已。

希望能帮到你,自己努力吧。追问

哎!看不懂啊 哥们,要是不花多少时间的话就帮忙做一下吧,实在是不会做才上网求助的,兄弟我绝对给你追分!!

第3个回答  2011-06-19
假如数据在b1,(如果不在b1,须将公式中的b1全部替换)那么在任意位置写入以下公式: =MID(B1,FIND(追问

什么意思?????

第4个回答  2011-06-20
已发!!!本回答被提问者采纳
相似回答