emu8086实现两位数加法运算
题目说明:给出一个公式,例如 “35 + 28 = ”,输出计算结果
一、准备材料
DOS功能调用表:https://blog.csdn.net/mybelief321/article/details/13168071
emu8086软件:https://emu8086-microprocessor-emulator.en.softonic.com/
ASCII码参考表:http://ascii.911cha.com/
二、asm代码
其中的注释详细解释了每一步代码的含义
在输入公式时,数字必须为两位,例如:01 + 01 =
加号、等于号两侧都需要加空格(双元运算符书写惯例)
data segment
question db "97 + 56 = $"
result db 0,0,0,"$"
data ends code segment
start:
mov ax, data
mov ds, ax
;将data放入ax
lea dx, question
mov ah, 09h
int 21h
;调用DOS 09H功能:显示以$结尾的字符串 xor ax,ax
;ax归0 mov al, question + 1
;第一个数的个位存入al
mov bl, question
;第一个数的十位存入bl mov cl, question + 6
;第二个数的个位存入cl
mov dl, question + 5
;第二个数的十位存入dl sub al, 30H
sub cl, 30H
sub bl, 30H
sub dl, 30H
;ASCII转码 clc
;清空进位标志CF add al, cl
;两数个位相加
aaa
;使用非压缩BCD码相加指令,结果存储在AX mov byte ptr result+2,al
;将最终结果的个位存入result的个位
mov al, bl
adc al, dl
;检查CF进位标志,进行带进位加法
aaa
mov byte ptr result+1,al
;将最终结果的十位存入result的十位 lea dx, result
jc hundred
;如果CF位为1,则说明十位加法后产生了百位,则转至处理三位数的hundred流程 add byte ptr result+1,30h
add byte ptr result+2,30h
;转ASCII用于打印
inc dx
jmp display
;显示最终结果 hundred:
mov byte ptr result, 31h
;若产生百位,则必定为1
add byte ptr result+1, 30h
add byte ptr result+2, 30h
;个位和十位转为ASCII display:
mov ah, 9
int 21h mov ax, 4c00h
;结束,返回值为AL:0
int 21h
ends end start
emu8086实现两位数加法运算的更多相关文章
- emu8086实现两位数乘法运算
题目说明:从键盘上输入任意两个不大于2位数的正实数,计算其乘积,结果在屏幕上显示 一.准备材料 DOS功能调用表:https://blog.csdn.net/mybelief321/article/d ...
- HDU 1002 (高精度加法运算)
A + B ProblemII Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 数据结构:DHUOJ 单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果)
单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 时间限制: 1S类别: DS:线性表->线性表应用 题目描述: 输入范例: -5345646757684654765867 ...
- 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】
原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创] 第一题 #include<stdio.h> int main() { unsigned int a=6; i ...
- RNN入门(4)利用LSTM实现整数加法运算
本文将介绍LSTM模型在实现整数加法方面的应用. 我们以0-255之间的整数加法为例,生成的结果在0到510之间.为了能利用深度学习模型模拟整数的加法运算,我们需要将输入的两个加数和输出的结果 ...
- MATLAB的两种移位运算
MATLAB的两种移位运算: 1)circshift矩阵移位 circshift:循环移位数组 语法:B = circshift(A,shiftize) 说明: B = circshift(A,sh ...
- MATLAB:图形加法运算(imadd函数)
close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imread('rice.png'); %读入图像rice,赋值给I J=im ...
- C语言不使用加号实现加法运算的几种方法
今天看到<编码:隐匿在计算机软硬件背后的语言>的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...
- 线性结构2 一元多项式的乘法与加法运算 【STL】
02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和 ...
随机推荐
- 内部类&异常
/* 内部类 内部类类别: 成员内部类: 在一个类的成员位置定义另外一个类,那么另外 一个 类就称作为成员内部类. 成员内部类的访问方式: 方式1: 在外部类内提供一个方法创建内部类的对象进行访问. ...
- 区区牛马蹉跎 ,不要向生活低下头 Linux的账号和管理
账户和管理权限 1.管理用户账号和组账号 2.管理目录和文件的属性 1.Linux基于用户身份对资源访问进行控制:用户账号(超级用户.普通用户.程序用户) 组账号(基本组.附加组).UID (用户标识 ...
- shell——mkfifo管道
转自:http://blog.sina.com.cn/s/blog_605f5b4f0101azuc.html 创建命名管道的方法为:mkfifo pipe_name. 这样就能创建一个命名的管道pi ...
- Java产生指定范围内的随机日期
要想产生指定范围内的随机日期,首先我们要指定一个范围,那么我们可以通过SImpleDateFormat格式化日期,然后再通过parse()方法设置日期,返回一个Date类型的日期对象,再转化为时间戳( ...
- Solution -「CF 802C」Heidi and Library (hard)
\(\mathcal{Descriptoin}\) Link. 你有一个容量为 \(k\) 的空书架,现在共有 \(n\) 个请求,每个请求给定一本书 \(a_i\).如果你的书架里没有这本书 ...
- 使用SetTrustedCredmanAccessPrivilege获取已保存的凭据
windows系统中有一个名为SeTrustedCredmanAccessPrivilege的权限,使拥有该特权的进程可作为受信任的调用者访问凭据管理器. 凭据管理器可以从控制面板 -> ...
- JVM基础学习(二):内存分配策略与垃圾收集技术
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来 垃圾收集概述 Java内存模型中的堆和方法区是垃圾收集技术所需要关注的终点,因为其他的区域会跟 ...
- 为什么使用Mybatis对JDBC进行包装探究
一.原生JDBC在实际生产中使用存在的影响性能的问题 首先分析使用JDBC的代码: Connection connection = null; PreparedStatement preparedSt ...
- Linux文件处理三剑客(grep、sed、awk)
下面所说的是Linux中最重要的三个命令在业界被称为"三剑客",它们是grep.sed.awk. 我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能 ...
- vue前端渲染和thymeleaf模板渲染冲突问题
vue前端渲染和thymeleaf模板渲染冲突问题 话不多说直接上现象: 解决办法: 在此做个记录吧,说不定以后会碰到 <<QIUQIU&LL>>