bcd码以及bcd调整指令,bcd码

 计算机内毫无例外地都使用二进制数进行运算,但通常采用8进制和十六进制的形式读写。对于计算机技术专业人员,要理解这些数的含义是没问题,但对非专业人员却不那么容易的。由于日常生活中,人们最熟悉的数制是十进制,因此专门规定了一种二进制的十进制码,称为BCD码,它是一种以二进制表示的十进制数码。

 二进制编码的十进制数,简称BCD码(Binarycoded Decimal)。这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符。4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0,1,2,3,4,5,6,7,8,9 这十个数符。最常用的BCD码称为8421BCD码,8.4.2.1 分别是4位二进数的位取值。 右图为十进制数和8421BCD编码的对应关系表:

 

 BCD码和BCD调整指令

 BCD码

 BCD码是一种用4位二进制数字来表示一位十进制数;1、压缩BCD码格式(PackedBCDForm;例如:十进制数4256的非压缩BCD码表示为4个;BCD码使用频率不高,所以任何CPU都不会设置专;但是,运用2进制的运算指令得到的结果就会失去BC;但是按照2进制规律,00110101B+0011

 微机原理与接口技术──BCD码和BCD调整指令

 1、压缩BCD码格式(Packed BCD Format)。1个字节的高低4位各表示1位十进制数。 例如:十进制数4256的压缩BCD码表示为2个字节:0100 0010B、 0101 0110 B 2、非压缩BCD码格式(Unpacked BCD Format)。1个字节的高4位空闲不用,仅用低4位表示1位十进制数。

 例如:十进制数4256的非压缩BCD码表示为4个字节: xxxx0100B、xxxx0010B、 xxxx0101B、 xxxx0110 B 三、BCD码的运算和调整

 BCD码使用频率不高,所以任何CPU都不会设置专门的BCD运算指令。遇到BCD码的运算,只能利用普通2进制运算指令来进行。

 但是,运用2进制的运算指令得到的结果就会失去BCD码的特征。 例1:BCD码 35 + 35 ,我们希望得到BCD码70(0111 0000B)。

 但是按照2进制规律,0011 0101B + 0011 0101B实际等于0110 1010B。也就是说低4位按照2进制能够表达10而不会进位。此时,若对结果加6(0110 1010 + 0000 0110),就可以得到正确BCD结果0111 0000B。

 例2:BCD码 38 + 38,我们希望得到BCD码76(0111 0110B)。

 但是按照2进制规律,0011 1000B +0011 1000B实际等于0111 0000B(BCD码70)。也就是说低4位按照2进制规律产生了进位,而这个进位带走了16,而不是10,所以结果按照BCD理解少了6。此时,若对结果加6(0111 0000 + 0000 0110),就可以得到正确BCD结果0111 0110B。

 可见,利用普通的适用于2进制数的加法指令对BCD进行加法运算,要想得到符合BCD码的结果,需要自动判断两种情况并进行补偿处理:当发生了进位需要对结果补偿6,当超过9该进位而未进也需要补偿6。

 51单片机的“DA A”指令就是这个功能,而PSW寄存器中的半进位标志AC就是给DAA指令判别是否发生了进位用的。

 AC(Assistant Carry)──辅助进/借位标志,可用命令置位和清零(DA A指令自动判别此位,用户不使用此位)。

相关推荐

最新

相关文章