【转载】小伙伴们求同去《汇编 DA A十进制调整指令》, 一起来围观吧 https://blog.csdn.net/m0_58836581/article/details/121525715?utm_source=app&app_version=4.20.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

二进制加法指令不能完全适用BCD码十进制的加法运算,故应对压缩的BCD码的加法结果需要进行有条件的修正。

出错原因及调整方法
BCD码(4位二进制编码)共有十六个编码,但只用了其中的10个,剩余六个就没有用到。而这六个没有用到的编码为无效编码。故1位BCD码加法运算出错的情况有两种:

1)相加结果大于9无进位,及已经进入无效编码区;

2)相加结果有进位,及已经跳过无效编码区;

无论哪一种出错情况,都是因为六个无效编码造成的。

调整方法是把运算结果加6调整,即所谓的十进制调整修正。

修正方法
1)累加器低四位大于9或辅助进位位Ac=1,则进行低四位加6修正。

2)累加器高四位大于9或进位位Cy=1,则进行高四位加6修正。

3)累加器高四位为9,低四位大于9,则高四位和低四位分别加6修正。

整个过程由DA A可自动实现

举例
(A)=56H,(R5)=67H,把他们看作两个压缩的BCD数进行BCD数加法。

执行指令:

ADD A,R5
DA A
0101 0110 (56H)

+) 0110 0111 (67H)

= 1011 1101 高四位和第四位都大于9 故要都加6来对结果修正、

+) 0110 0110

= 1 0010 0011

结果(A)=23H,Cy=1。

56+65=123 结果是正确的

汇编 DA A 十进制调整指令相关推荐

  1. 汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式)

    1:ADC : 扩展加法指令ADC .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main P ...

  2. 【汇编学习笔记】DAA指令

    32 位模式下,ADD 或 ADC 指令在 AL 中生成二进制和数,DAA(加法后的十进制调整)指令将和数转换为压缩十进制格式.比如,下述指令执行压缩十进制数 35 加 48.二进制和数(7Dh)被调 ...

  3. 程序填空题——压缩BCD码调整指令

    程序填空题--压缩BCD码调整指令 题目 在以BCD为首地址的字节单元中存放了3个压缩BCD码x.y.z本程序用以计算x+y-z,并将结果存放在SS字节单元中.试在程序的空格处填入适当的指令. BCD ...

  4. ARM汇编:MRS和MSR指令

    ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下 ...

  5. 【汇编】求十进制数的补码并转二进制和十六进制输出

    [汇编]求十进制数的补码并转二进制和十六进制输出 (多组输入输出,使用宏库文件) 代码如下,有详细注释 Include macro_lib.MAC data segmentstring db 10,? ...

  6. 汇编指令msr_ARM汇编:MRS和MSR指令

    1.MSR和MRS指令介绍 MRS 指令:  对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有 ...

  7. 汇编quad_ARM汇编(2)(指令)

    一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ...

  8. 汇编中Enter和Leave指令

    Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见 ...

  9. 汇编中的字符串操作指令

    每一种语言都有一些字符串操作函数,反汇编后的代码也不例外.网上讲的都比较零碎,我将它们收集起来,并配上自己的理解,形成本文. 一.字节操作指令:lodsb和stosb 1. lodsd需要寄存器esi ...

最新文章

  1. 主题:CS0016: 未能写入输出文件“c:#92;WINDOWS#92;Microsoft.NET#92;***.dll”错误处理...
  2. java.lang.StackOverflowError 解决方法
  3. Python全栈 MongoDB 数据库(数据的修改)
  4. idea 不能及时编译_您是否能及时编译?
  5. linux用ping命令测试网速,linux下面使用命令测试网速
  6. Bookdown平台分享了哪些书籍,如何使用Bookdown分享书籍
  7. 网络工程师Day2---实验2-1:HDLC和PPP配置
  8. 22条最常用Python代码,快收藏
  9. 贵州小学计算机编程比赛,2019年贵阳市中小学电脑制作活动成功举办
  10. javaFX2.0场景(Scene)分析及使用,多场景切换实现
  11. python计算闰年
  12. ITunes备份的背景知识
  13. 创建 Pynq Overlay
  14. 96张完整PPT清晰解读全球智能制造趋势!
  15. eclipse一次性开启多个工程
  16. Python 使用xlrd 读取 Excel 报错:xlrd.compdoc.CompDocError: Workbook corruption: seen[3] == 4
  17. 婚姻是一场女人的战争(zt)
  18. 毕业月薪3万起!算法工程师九成硕博学历,腾讯成AI人才收割机
  19. css sprites精灵图、css图片整合、css贴图定位案例教程
  20. 基于FPGA的设计思想之串并转换与流水线

热门文章

  1. OpenCASCADE绘制测试线束:图形命令之Axonometric观察器
  2. OpenCASCADE:形状愈合之修复
  3. wxWidgets:使用文本模板
  4. boost::remove_edge_if用法的测试程序
  5. boost::fusion::insert_range用法的测试程序
  6. boost::fibers::fiber用法的测试程序
  7. VTK:可视化之Glyph3DMapper
  8. VTK:Utilities之FileOutputWindow
  9. VTK:Snippets之RestoreSceneFromFieldData
  10. VTK:Parallel之ExodusIIWriter