码迷,mamicode.com
首页 > 其他好文 > 详细

两个数相乘的实验

时间:2014-11-21 18:55:26      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:汇编   两个数相乘   

一、实习目的与要求

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

二、实习内容

 实现十进制数的乘法,被乘数和乘数均以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

四、截图

bubuko.com,布布扣




两个数相乘的实验

标签:汇编   两个数相乘   

原文地址:http://blog.csdn.net/u013507368/article/details/41350903

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!