简单汇编语言编写两个个位数相乘并输出显示

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