emu8086实现两位数乘法运算
题目说明:从键盘上输入任意两个不大于2位数的正实数,计算其乘积,结果在屏幕上显示
一、准备材料
DOS功能调用表:https://blog.csdn.net/mybelief321/article/details/13168071
emu8086软件:https://emu8086-microprocessor-emulator.en.softonic.com/
ASCII码参考表:http://ascii.911cha.com/
二、asm代码
其中的注释详细解释了每一步代码的含义
由于算法本身的原因,输入的数字必须是两位数,例如:23,05,01,03,99……
data segment
num1 db "Enter Number 1: $"
num2 db "Enter Number 2: $"
resultstring db "Num1 * Num2 = Result: $"
result db 0,0,0,0,"$"
ends code segment
start:
mov ax, data
mov ds, ax
;将data数据放入data段 lea dx, num1
;将num1的有效地址放入dx
mov ah, 09h
;调用DOS的09H号功能,显示字符串,用来显示“Enter Number 1: ”
int 21h
;调用DOS mov ah, 01h
;调用DOS的01H号功能:键盘输入并回显。AL存入输入的字符
int 21h
;调用DOS
sub al, 30h
;减去30的原因:键盘键入“1”时,获得1的ASCII码为31,因此减去31,得到真实的数字1, 0~9同理
mov bl, al
;将输入的十位上的数字放入bl mov al, 0ah
mul bl
;十位上的数字×10 放入ax
mov bl, al
;由于个位数× 0ah 得到的数字总是小于等于两位的,所以AH必定为00H mov ah, 1h
int 21h
sub al,30h
;获得个位上的数字
add bl, al
;个位上的数字 + 十位上的数字×10 = Number 1
;此时bl 存入输入的第一个数字的真实大小 mov ah,2
mov dl,0ah
;调用DOS的02H号功能:显示输出。此时显示的是DL的内容:ASCII(10)为LF 换行
int 21h
;调用DOS
mov dl,0dh
;此时DL为ASCII(15)为CR 回车
int 21h
;调用DOS ;以下为重复输入数字的过程,不再赘述
lea dx, num2
mov ah, 9
int 21h mov ah, 1h
int 21h
sub al, 30h
mov dl, al mov al, 0ah
mul dl
mov dl, al mov ah, 1h
int 21h
sub al,30h
add dl, al
;此时dl内存入了Number 2 的真实大小 mov al, bl
mul dl
;此时ax内存入了两数乘积结果(Hex) mov bx, 0ah
mov cx, 4
mov si, 3
;si为什么等于3:从第3、2、1、0位开始处理result字段,将每一位结果分别存入个、十、百、千位上
; si: 0, 0, 0, 0, "$"
; 千 百 十 个
;位置 0, 1, 2, 3 getresult:
mov dx, 0000h
;将dx清空,用以以下步骤:
div bx
;ax中的乘积 ÷ 0ah , 商得数会在ax刷新 余数保存在dl
;因此dl中现在保存了第si位的数字
add dl, 030h
;转换为ASCII码,显示出字符类型的数字
mov byte ptr result+si, dl
sub si, 1
;si-=1,下一循环处理低一位的数字
loop getresult ;接下来输出提示语:Num1 × Num2 = ……
mov ah,2
mov dl,0ah ;输出换行
int 21h
mov dl,0dh ;输出回车
int 21h
lea dx, resultstring
mov ah, 9
int 21h
lea dx, result display:
mov ah, 9
int 21h mov ah, 4ch
mov al, 00h
;DOS 4CH号功能:带返回值结束程序,返回值为AL
int 21h
ends end start
三、技巧分享
1、程序捕获到的键盘输入,是按键所代表的ASCII 码,并非其字符本身,例如数字“1”的ASCII 码为31
2、
3、
4、
5、
emu8086实现两位数乘法运算的更多相关文章
- emu8086实现两位数加法运算
题目说明:给出一个公式,例如 "35 + 28 = ",输出计算结果 一.准备材料 DOS功能调用表:https://blog.csdn.net/mybelief321/artic ...
- SQL获取当前时间月份为两位数
--获取当前时间月份为两位数 )),) --获取当前时间上月月份为两位数 , )),)
- 需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 并设置sz和rz在Windows和Linux之间发送和接收文件不用搭FTP
需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 并设置sz和rz在Windows和Linux之间发送和接收文件不用搭FTP 需求:过滤下面这个网页里共723行 校对中里 行数为两位数 ...
- eclipse find 两位数
查找两位数
- Confusing Date Format UVALive 7711 给定mm-mm-mm格式的时间。年份(1900-1999)只给了后两位数,问有多少种合法的排列使时间正确。
/** 题目:Confusing Date Format UVALive 7711 链接:https://vjudge.net/contest/174844#problem/A 题意:给定mm-mm- ...
- 练习五十七:for循环 809??=800*?+9*?+1其中?代表的两位数,8*?的结果为两位数,9*?的结果为3位数。求?代表的两位数,及809??后的结果
题目:809??=800*?+9*?+1其中?代表的两位数,8*?的结果为两位数,9*?的结果为3位数.求?代表的两位数,及809??后的结果 注意:一定要看清楚题目哦,809??代表的是结果,?代表 ...
- 页面加载后累加,自加1&&判断数字是否为两位数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【JAVA习题二十九】809*??=8*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
package erase; public class 八九与问好两位数的乘积和 { public static void main(String[] args) { int m,n;//m十位,n个 ...
- Java实现获取一个随机的两位数
import java.util.Random; //获取一个随机的 两位数public class getrandomdouble { public static void main(String[ ...
随机推荐
- Spring Cloud 源码分析之OpenFeign
OpenFeign是一个远程客户端请求代理,它的基本作用是让开发者能够以面向接口的方式来实现远程调用,从而屏蔽底层通信的复杂性,它的具体原理如下图所示. 在今天的内容中,我们需要详细分析OpenFei ...
- linux实用技巧:在虚拟机vmware16软件上安装CentOs8.2虚拟机,重置可用源和安装输入法
前言 开发服务器应用,需要使用到CentOs8.2,安装到虚拟机上方便快捷. 提前准备 Vmware 16虚拟机软件 下载VM16版本及以上的vmware虚拟机版本,否则没有CentOs8选 ...
- Solution -「洛谷 P4389」付公主的背包
\(\mathcal{Description}\) Link. 容量为 \(n\),\(m\) 种物品的无限背包,求凑出每种容量的方案数,对 \(998244353\) 取模. \(n,m ...
- LinuxCPU性能工具总结
一.根据性能指标找工具 二.根据工具查性能指标
- Spring Boot自动配置SpringMVC(二)
Spring Boot自动配置SpringMVC(一) - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)讲述了关于DispatcherServlet注册到诸如tomcat容器中的自动配置过 ...
- 『无为则无心』Python面向对象 — 54、重写和super()函数
目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...
- CentOS单机安装k8s并部署.NET 6程序 压测 记录
前面部分依照CentOS单机安装k8s并部署.NET 6程序来进行,内存.cpu.centos版本一致,之前222元买的三年8M 2c4g腾讯云轻量服务器,这个教程算是写的很详细的了,基本可以一致执行 ...
- [数据结构]一元n次多项式的抽象数据类型
一.问题描述 一元n次多项式是代数学中经常出现的代数式,对于一元n次多项式的操作有很重要的实际意义.由于一个一元n次多项式最多有n+1项,且互不相关,所以可以用一个线性表来保存一个多项式,从前至后次数 ...
- [题解]第十一届北航程序设计竞赛预赛——L.偶回文串
题目描述 长度为偶数的回文串被称为偶回文串.如果一个字符串重新排序之后能够成为一个偶回文串,则称为可回文的. 给一个字符串,求可回文的子串个数.字符串只含小写字母,单个字符串长度不超过10^5,所有数 ...
- 【C# .Net GC】开篇
前言 自从.NET Core 3.0开始对根据自己具体的应用场景去配置GC ,让GC 发挥最好的作用..NET 5 改动更大,而且.NET 5整体性能比.net core 3.1高20%,并且在GC这 ...