第十一篇 BCD码调整

摘要:
X86汇编和MCS-51指令集中都有BCD码调整指令。本博客将讨论BCD码调整。然而,人们对十进制数字很熟悉。为了方便人们,8421BCD代码用于表示十进制数字。当然,BCD码也用0和1二进制表示。一旦这六位数字出现在十进制运算中,这就是一个错误,需要进行调整。

无论是X86汇编还是MCS-51的指令集中都会有BCD码调整指令。本博文将浅谈下BCD码调整的

相关情况。

一、BCD码是十进制数在计算机中的表现形式。

我们一直都说计算机只能表示0、1二进制,这毫无疑问是正确的。但人对十进制数较为熟悉,为了

迎合人的方便,8421BCD码用来表示十进制数。当然了,BCD码也是用0、1二进制来表示的。所以,

需要注意理解的是,这里的计算机表示十进制数更多的是一种逻辑上的概念,但也正是这种逻辑概念

使得我们可以在指令中运用BCD码来表示十进制数,比如在ADD、SUB等指令中。从而为我们带来方

便。

二、(A)=56H,(R5)=67H。ADD A,R5, DA A。(MCS-51指令集)

DA是51中的十进制调整指令。

首先我们得解决一个问题。56H、67H是16进制数还是10进制数?

有过汇编编程经验的人都应该可以很好的理解这个问题。56H、67H到底是多少进制数不是你决定的,

也不是我决定的。它是程序员根据实际应用情景赋予的。换句话说,程序员说它是16进制它就是16进

制;说它是10进制它就是10进制。只要程序员能够理解并合理的处理即可。就像本例中的56H、67H

就是十进制数,因为DA A的存在。

三、为什么要调整?

计算机并不能理解什么是8421BCD表示的十进制,还是普通的16进制。它都默认是二进制运算。比如

上例的56H+67H=0BDH,作为16进制加法这显然是没错的。错就错在这根本不是16进制加法,是十进

制加法。换句话说程序将其意义改变成十进制了,计算机还是按16进制来运算,导致了结果出错。不过,

计算机可以通过简单的调整得到正确的结果。

更直观的解释可以是这样的:

8421BCD用来表示0-9,还有1010、1011、1100、1101、1110、1111这6个数字不用。十进制运算中

一旦出现了这6个数字即是出错了,需要调整。

四、辅助进位标志AF与AL低四位的区别,进位标志CF与AL高四位的区别?(X86)

AF=1是不是AL低四位就一定大于9,AF=0是不是AL低四位就一定小于9呢?CF与AL高四位也有同样的

问题。

首先来看下DAA调整指令的算法:

if(AL低四位>9 || AF=1) then
	AL=AL+6;
	AF=1;
endif
if(AL高四位>9 || CF=1) then
	AL=AL+60H;
	CF=1;
endif

所以,上面的问题就可以解答了,AF=1与AL低四位与9的大小关系没有必然联系。同理,CF=1与AL高四

位与9的关系也一样。

举个例子:

1100+0100=10000,AL低四位为0,但AF=1,需要做加6调整。

免责声明:文章转载自《第十一篇 BCD码调整》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle连接字符串大全LVM 数据迁移下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

物理机(window)安装linux系统

1,需要的资源    1⃣️,centos7的镜像文件 centos7.iso    2⃣️,pe制作软件  https://cn.ultraiso.net/xiazai.html  软碟通 自己去下载就好了 2,开始制作u盘pe  打开安装后的软碟通,然后用这个软件打开centos7.iso  3,写入映像 启动 ---》 写入硬盘映像   最后写入...

计算机是怎样启动的?

从打开电源到開始操作。计算机的启动是一个很复杂的过程。 我一直搞不清楚,这个过程究竟是怎么回事。仅仅看见屏幕高速滚动各种提示...... 这几天,我查了一些资料。试图搞懂它。以下就是我整理的笔记。 零、boot的含义 先问一个问题。"启动"用英语怎么说? 回答是boot。但是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boo...

局域网WEB方式实现TTS实时语音合成

公司业务部门提出需求:在业务大厅的电脑里播放通告,最好能念出来,我KAO,脑子短路了,。先把文字的先做完,上网找点资料,GOOGLE没有,BAIDU也没有,这事就先撂下了。没几天,在D盘店里淘到两张电脑播音的片,就带回来看看。装了几个,测试了一下,软件还是可以的,基本上出了声音,效果就不说了。突然发现程序里多了一个“Microsoft Speech SDK...

在Windows下删除Linux系统的方法[转]

我的电脑安装了双系统,Windows和Linux,不过由于Linux在最近一段时间内不会使用,所以我打算删除Linux。删除Linux最需要注意的地方,就是MBR(Master Boot Record)。在删除Linux分区前,我们需要将启动Windows的引导信息写入MBR,否则,MBR中的Linux引导信息,当然就不能启动Windows系统了。一:将...

iOS开发关于真机—App发布证书和调试证书配置

发布证书、真机调试证书、测试证书、推送证书详细过程 更重要的是让你彻底明白为什么要这样配置证书 一:发布证书 遵旨:哪个开发者的哪台电脑要发布哪个app (这句话可以多读几遍) 通过上边的遵旨可以得出要发布app需要哪些文件,为什么配置过程中要上传或者生成那些文件,结论如下 申请开发者账号,即花费了99刀给apple的账号,这是你可以登录develo...

21本计算机数学相关的免费电子书【转】

  计算机数学对于许多人来说可能是一个难以搞定的科目。在这里我们为大家提供了 21 本免费电子书来帮助大家更好的理解计算机数学。   1. 概率编程和黑客的贝叶斯方法   这本书是对贝叶斯推理的一个引导,着重于计算机理解方面,以数学观点为辅。这本书假定你事先即不了解贝叶斯推理也不了解概率编程的知识。   2. 图灵机时代的数学   Thomas Hales...