汇编-两个数相乘的实验

一、实习目的与要求

    掌握乘法指令和循环指令的用法。

二、实习内容

 实现十进制数的乘法,被乘数和乘数均以ASC码形式放在内存中,乘积在屏幕上显示出来

三、代码

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

四、截图



  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值