1.要求每输入一个数就换行回车 2.要求回显 3.通过key键入 4.要求这个运算结束可继续输入运算 5.数通过键盘键入
data segment
left db '45','$';定义十进制相乘左操作数
right db '23','$';定义十进制相乘右操作数
Bleft dw 0;
Bright dw 0;
result db 0;
c10 dw 10;十进制进位数
msgOne db 'The left num is:','$'
msgTwo db 0ah,0dh,'The right num is:','$'
msgThree db 0ah,0dh,'The result is:','$'
data ends
mystack segment stack
db 100 dup(?)
mystack ends
code segment
assume DS:data,CS:code
start:
mov ax,data;
mov DS,ax;
lea dx,msgOne;输出做操作数信息
mov ah,09h;
int 21h;
lea dx,left;
mov ah,09h;
int 21h;
lea dx,msgTwo;输出右操作数信息
mov ah,09h;
int 21h;
lea dx,right;
mov ah,09h;
int 21h;
lea si,left;
call changeToBinary;
mov Bleft,ax;
lea si,right;
call changeToBinary;
mov Bright,ax;
mul Bleft;
mov cx,0;
changeToDec:
mov dx,0;
cmp ax,0; 判断ax是否为0,为0则跳出循环
jz outChangeToDex;
div c10;
push dx;
inc cx;
jmp changeToDec;
outChangeToDex:
lea dx,msgThree;
mov ah,09h;
int 21h;
printResult:
pop dx;
add dl,30h;
mov ah,02h;
int 21h;
loop printResult;
mov ah,4ch; 程序退出
int 21h;
changeToBinary proc; 将字符串ASCII数字字符转换为数字
;si寄存器传递参数,ax寄存器返回结果
push bx; 保护现场
mov ax,0;
mov bh,0; bx寄存器高位置零
One:
mov bl,[si];
cmp bl,'$';
jz oneOut;
mul c10;
and bl,0fh;
add al,bl;
inc (si);
jmp one
oneOut:
pop bx;
ret
code ends
end start
参考一下,如有帮助,望采纳,谢谢
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632