题目说明:给出一个公式,例如 “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实现两位数加法运算的更多相关文章

  1. emu8086实现两位数乘法运算

    题目说明:从键盘上输入任意两个不大于2位数的正实数,计算其乘积,结果在屏幕上显示 一.准备材料 DOS功能调用表:https://blog.csdn.net/mybelief321/article/d ...

  2. HDU 1002 (高精度加法运算)

    A + B ProblemII Time Limit: 2000/1000 MS(Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  3. 数据结构:DHUOJ 单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果)

    单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 时间限制: 1S类别: DS:线性表->线性表应用 题目描述: 输入范例: -5345646757684654765867 ...

  4. 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】

    原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创]   第一题 #include<stdio.h> int main() { unsigned int a=6; i ...

  5. RNN入门(4)利用LSTM实现整数加法运算

      本文将介绍LSTM模型在实现整数加法方面的应用.   我们以0-255之间的整数加法为例,生成的结果在0到510之间.为了能利用深度学习模型模拟整数的加法运算,我们需要将输入的两个加数和输出的结果 ...

  6. MATLAB的两种移位运算

    MATLAB的两种移位运算: 1)circshift矩阵移位 circshift:循环移位数组 语法:B = circshift(A,shiftize) 说明: B  = circshift(A,sh ...

  7. MATLAB:图形加法运算(imadd函数)

    close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imread('rice.png'); %读入图像rice,赋值给I J=im ...

  8. C语言不使用加号实现加法运算的几种方法

    今天看到<编码:隐匿在计算机软硬件背后的语言>的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...

  9. 线性结构2 一元多项式的乘法与加法运算 【STL】

    02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和 ...

随机推荐

  1. Docker之LNMP分布式容器部署

    Docker之LNMP分布式容器部署 目录 Docker之LNMP分布式容器部署 一.项目模拟 1. 项目环境 2. 服务器环境 3. 任务需求 二.Linux系统基础镜像 三.Nginx 1. 建立 ...

  2. LinkedHashSet、Map、Map接口HashMap、Hashtable,TreeSet、TreeMap、如何选择使用集合实现类,Collections工具类

    一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是 ...

  3. 「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库

    「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库 Part 0 前言 写作背景 笔者在配置学校GitLab的ssh key时遇到一些问题,原因应为曾经配置过GitHub的s ...

  4. 利用 docker 部署 elasticsearch 集群(单节点多实例)

    文章目录 1.环境介绍 2.拉取 `elasticserach` 镜像 3.创建 `elasticsearch` 数据目录 4.创建 `elasticsearch` 配置文件 5.配置JVM线程数量限 ...

  5. tip1:学习使用mybatis中使用mysql数据库的基本操作

    1.查看mysql服务是否启动: 2.root用户链接数据库:mysql -u root -p,随后输入正确的密码即可. 3.root用户创建数据库: 4.查看已建数据库:show databases ...

  6. 练习推导一个最简单的BP神经网络训练过程【个人作业/数学推导】

    写在前面   各式资料中关于BP神经网络的讲解已经足够全面详尽,故不在此过多赘述.本文重点在于由一个"最简单"的神经网络练习推导其训练过程,和大家一起在练习中一起更好理解神经网络训 ...

  7. SpringBoot 自定义参数类型转换convert

    创建一个配置类.使用 @bean注入到容器中 @Bean public WebMvcConfigurer webMvcConfigurer(){ /** * 实现自定义的addConverter */ ...

  8. [旧][Android] Retrofit 源码分析之 ServiceMethod 对象

    备注 原发表于2016.05.03,资料已过时,仅作备份,谨慎参考 前言 大家好,我又来学习 Retrofit 了,可能这是最后一篇关于 Retrofit 框架的文章了.我发现源码分析这回事,当时看明 ...

  9. CLR 详解

    公共语言运行时就是按照CLI标准制作的执行托管代码的环境.CLR 能运行非托管代码. 公共语言运行的功能:代码JIT/AOT编译.  内存管理 .垃圾回收.异常处理.反射服务.安全服务.程序集加载.本 ...

  10. 【biee】BIEE启动关闭服务

    转至:http://blog.sina.com.cn/s/blog_7e04e0d00101k5r8.html 版本:BIEE11g (11.1.1.6.0-11.1.1.6.7) OS:RHEL 5 ...