废话不多说,直接开始写代码。普通指令,以及编程思想我就不介绍了。
寄存器大小位16位能存的最大值为0FFFFH=65535,那么如果相加的数值超过这个数产生了进位,那么寄存器不够存了,此时我们就需要用到进位加法指令 adc(add carry)进位加法在两数相加时会带上进位,就是我们平时的算术计算时的算法一样
FFFFH+1=10000H ax=0000 进位标志 CF=1
寄存器不够存我们可以把数据存哪里?
在加一个寄存器来存也可以
此时我们可以将低16位存ax16位存dx中那么如果两个寄存器还不够存了怎么办?寄存器数量有限。没关系我们可以直接存在内存中嘛
那么我们可以来计算下
5555 4444 3333 2222H + FFFF FFFF FFFF FFFFH=?
这个数是64+64位并且产生了进位 你如果拿计算机按你会发现计算结果比第一个数还小1
为什么呢?计算器有bug。。。哈哈

好的没关系让我们用汇编实现下看看它等于多少?

代码如下

DATAS SEGMENT;进位加法dw 2222H,3333H,4444h,5555h,4 dup(0FFFFH);将结果存在这里dw 8 dup(0)
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATAS     MOV DS,AX           MOV ES,AX           CALL ADD_CARRYMOV AH,4CHINT 21H
;===============================================
ADD_CARRY:MOV SI,0MOV BX,8MOV DI,16;循环4次MOV CX,4;清零CF标志位SUB AX,AX              CF=0ADD_NUM:    MOV AX,DS:[SI]       ;被加数MOV DX,DS:[BX]     ;加数ADC AX,DX              ;AX:2222H+FFFFH+CF=2221H    进位标志CF=1MOV ES:[DI],AX      ;存储位置 把2221H 放到ES[DI]位置INC SI                      ;此处不用add命令是因为add 影响标志位INC SIINC BXINC BXINC DIINC DILOOP ADD_NUM       ADC CX,0                  ;最后一轮循环之后cx为0 在加一次CFMOV ES:[DI],CX        RET
CODES ENDSEND START

我们运行如上代码输入u 查看代码,操作系统给我们分配了内存,call指令的符号引用也被替换为了直接引用,java的同学们是不是很熟悉,什么叫符号引用,什么叫直接引用这会儿秒懂。

我们u 000e指令指向的地址看看它是什么,是不是很熟悉就是我们自己写的代码,好接下来我们直接断点到call指令下一行

断点g 000a 回车执行

我们来查看结果使用d ds:0,红框部分为我们安排的数据,第二行为我们的计算结果为 15555444433332221H这个才是正确的结果。

8086汇编(5、进位加法)相关推荐

  1. 8086 汇编指令手册查询(转)

    8086 汇编指令手册查询,编语言是一种面向机器的语言.它能够利用计算机所在硬件性并能直接控制硬件,在微型计算机系统的开发应用和过程控制和特别受到重视. 一.数据传输指令 -------------- ...

  2. 8086汇编寄存器及指令汇总

    1   寄存器的分类 通用寄存器: ax,bx,cx,dx,(ah,al,bh,bl,ch,cl,dh,dl): sp,bp,si,di 指令寄存器: ip 标志寄存器: FR 段寄存器: cs,ds ...

  3. 80×86汇编常用指令

    80×86汇编常用指令 一.数据传送指令 1. 通用数据传送指令 简写 英文全称 执行操作 MOV move 传送 MOVSX move with sign-extend 带符号扩展传送 MOVZX ...

  4. c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...

    前面花了两篇文章来介绍词法分析和语法分析,接下来才是比较有意思的部分--一个小型类C编译器的设计和实现(其实是编译原理的课程设计啦!~)我用的是python2.7.13+PyQt来做的...事实上,正 ...

  5. 8086汇编实验(十题可用)

    一.前言 1.这学期学8086汇编,所做的四次实验十个题目(前8手写,后2摘录后修改,时间久远未找到原文链接,愿理解),亲测可用,码住,希望能对将来的读者有所帮助. 2.有的需要在debug中根据段地 ...

  6. 8086汇编学习小记-王爽汇编语言实验12

    8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...

  7. 8086汇编与c++编译器就内存方面的感想

    8086汇编中可以手动分配栈内存,没有堆内存的概念,而c++编译器中栈是系统分配的,堆是手动分配的.

  8. 【汇编语言】8086汇编,快速搞定各种寻址方式:立即数寻址 / 寄存器寻址 / 存储器寻址

    0 前言 众所周知,对于8086汇编语言,有几大寻址方式,不过我觉得这个好墨迹,会用就可以了,为什么命名这么多,这次只说本质,不说命名,至于命名,还是得知道,毕竟是大部分人公认的,不能反抗这点哦,但是 ...

  9. 8086汇编学习小记-1

    8086汇编学习小记-1 View Code assume cs : codesg, ds : datasg, ss : stacksgdatasg SEGMENT... datasg ENDSsta ...

最新文章

  1. caffe---ubuntu1604下anaconda2.5的尝试----失败,建议使用系统的python系统,避免各种各样的陷阱...
  2. Nginx 实现AJAX跨域请求
  3. Java实现第二次登陆强制下线_Android登陆页面记住密码以及强制下线功能的实现...
  4. js获取textarea中的回车换行
  5. 编译驱动的Makefile解析
  6. [python实现设计模式]-3.简单工厂模式-触宝开放平台
  7. 2017.4.14上午
  8. 【三维路径规划】基于matlab GUI蚁群算法无人机三维路径规划【含Matlab源码 254期】
  9. mysql安装_win版
  10. Mask R-CNN算法详解
  11. 支持向量机原理(理解SVM的三层境界)
  12. Android 隐藏程序的图标
  13. vue中使用ajax全局配置,jQuery和vue 设置ajax全局请求
  14. Linux简单的文件管理器设计,桌面应用|如何从 Linux 的文件管理器中加密文件
  15. 深度学习论文阅读图像分类篇(三):VGGNet《Very Deep Convolutional Networks for Large-Scale Image Recognition》
  16. 阿里内网疯狂传阅的“M8级”分布式架构笔记,GitHub刚上线就霸榜
  17. 微信小程序ios端唤醒不了拨打电话或者部分电话拨打不了解决方案
  18. PX4:【sensor_combined】
  19. oracle 客户端 sqlplus 命令行 问号 乱码
  20. 计算机打不开sai文件夹,解决 Excel打开桌面文件 显示“无法找到C:\Documents.xls。请检查文件名的...”错误...

热门文章

  1. 袁永福软件行业从业经历
  2. ETC脱落后如何重新线上激活
  3. 解决Ubuntu强制获取root权限后只剩下客人会话而无法正常登录
  4. arcgis栅格计算器:将栅格图层指定值设置为Nodata及栅格图层求交
  5. 最近很火火火火的 GitHub 项目
  6. 直播间小游戏,带货直播源码如何实现?
  7. oa系统服务器什么意思,OA系统是什么意思
  8. 家庭备忘记事便签软件哪个实用?
  9. 辅警是事业编制吗?辅警会纳入事业编制吗?
  10. 1.19(Cake Baking)