8086汇编(5、进位加法)
废话不多说,直接开始写代码。普通指令,以及编程思想我就不介绍了。
寄存器大小位16
位能存的最大值为0FFFFH=65535
,那么如果相加的数值超过这个数产生了进位,那么寄存器不够存了,此时我们就需要用到进位加法指令 adc(add carry)
进位加法在两数相加时会带上进位,就是我们平时的算术计算时的算法一样
FFFFH+1=10000H ax=0000
进位标志 CF=1
寄存器不够存我们可以把数据存哪里?
在加一个寄存器来存也可以
此时我们可以将低16
位存ax
高16
位存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、进位加法)相关推荐
- 8086 汇编指令手册查询(转)
8086 汇编指令手册查询,编语言是一种面向机器的语言.它能够利用计算机所在硬件性并能直接控制硬件,在微型计算机系统的开发应用和过程控制和特别受到重视. 一.数据传输指令 -------------- ...
- 8086汇编寄存器及指令汇总
1 寄存器的分类 通用寄存器: ax,bx,cx,dx,(ah,al,bh,bl,ch,cl,dh,dl): sp,bp,si,di 指令寄存器: ip 标志寄存器: FR 段寄存器: cs,ds ...
- 80×86汇编常用指令
80×86汇编常用指令 一.数据传送指令 1. 通用数据传送指令 简写 英文全称 执行操作 MOV move 传送 MOVSX move with sign-extend 带符号扩展传送 MOVZX ...
- c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
前面花了两篇文章来介绍词法分析和语法分析,接下来才是比较有意思的部分--一个小型类C编译器的设计和实现(其实是编译原理的课程设计啦!~)我用的是python2.7.13+PyQt来做的...事实上,正 ...
- 8086汇编实验(十题可用)
一.前言 1.这学期学8086汇编,所做的四次实验十个题目(前8手写,后2摘录后修改,时间久远未找到原文链接,愿理解),亲测可用,码住,希望能对将来的读者有所帮助. 2.有的需要在debug中根据段地 ...
- 8086汇编学习小记-王爽汇编语言实验12
8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...
- 8086汇编与c++编译器就内存方面的感想
8086汇编中可以手动分配栈内存,没有堆内存的概念,而c++编译器中栈是系统分配的,堆是手动分配的.
- 【汇编语言】8086汇编,快速搞定各种寻址方式:立即数寻址 / 寄存器寻址 / 存储器寻址
0 前言 众所周知,对于8086汇编语言,有几大寻址方式,不过我觉得这个好墨迹,会用就可以了,为什么命名这么多,这次只说本质,不说命名,至于命名,还是得知道,毕竟是大部分人公认的,不能反抗这点哦,但是 ...
- 8086汇编学习小记-1
8086汇编学习小记-1 View Code assume cs : codesg, ds : datasg, ss : stacksgdatasg SEGMENT... datasg ENDSsta ...
最新文章
- caffe---ubuntu1604下anaconda2.5的尝试----失败,建议使用系统的python系统,避免各种各样的陷阱...
- Nginx 实现AJAX跨域请求
- Java实现第二次登陆强制下线_Android登陆页面记住密码以及强制下线功能的实现...
- js获取textarea中的回车换行
- 编译驱动的Makefile解析
- [python实现设计模式]-3.简单工厂模式-触宝开放平台
- 2017.4.14上午
- 【三维路径规划】基于matlab GUI蚁群算法无人机三维路径规划【含Matlab源码 254期】
- mysql安装_win版
- Mask R-CNN算法详解
- 支持向量机原理(理解SVM的三层境界)
- Android 隐藏程序的图标
- vue中使用ajax全局配置,jQuery和vue 设置ajax全局请求
- Linux简单的文件管理器设计,桌面应用|如何从 Linux 的文件管理器中加密文件
- 深度学习论文阅读图像分类篇(三):VGGNet《Very Deep Convolutional Networks for Large-Scale Image Recognition》
- 阿里内网疯狂传阅的“M8级”分布式架构笔记,GitHub刚上线就霸榜
- 微信小程序ios端唤醒不了拨打电话或者部分电话拨打不了解决方案
- PX4:【sensor_combined】
- oracle 客户端 sqlplus 命令行 问号 乱码
- 计算机打不开sai文件夹,解决 Excel打开桌面文件 显示“无法找到C:\Documents.xls。请检查文件名的...”错误...