計(jì)算機(jī)內(nèi)毫無(wú)例外地都使用二進(jìn)制數(shù)進(jìn)行運(yùn)算,但通常采用8進(jìn)制和十六進(jìn)制的形式讀寫(xiě)。對(duì)于計(jì)算機(jī)技術(shù)專(zhuān)業(yè)人員,要理解這些數(shù)的含義是沒(méi)問(wèn)題,但對(duì)非專(zhuān)業(yè)人員卻不那么容易的。由于日常生活中,人們最熟悉的數(shù)制是十進(jìn)制,因此專(zhuān)門(mén)規(guī)定了一種二進(jìn)制的十進(jìn)制碼,稱(chēng)為BCD碼,它是一種以二進(jìn)制表示的十進(jìn)制數(shù)碼。
二進(jìn)制編碼的十進(jìn)制數(shù),簡(jiǎn)稱(chēng)BCD碼(Binarycoded Decimal)。這種方法是用4位二進(jìn)制碼的組合代表十進(jìn)制數(shù)的0,1,2,3,4,5,6 ,7,8,9 十個(gè)數(shù)符。4位二進(jìn)制數(shù)碼有16種組合,原則上可任選其中的10種作為代碼,分別代表十進(jìn)制中的0,1,2,3,4,5,6,7,8,9 這十個(gè)數(shù)符。最常用的BCD碼稱(chēng)為8421BCD碼,8.4.2.1 分別是4位二進(jìn)數(shù)的位取值。 右圖為十進(jìn)制數(shù)和8421BCD編碼的對(duì)應(yīng)關(guān)系表:
BCD碼和BCD調(diào)整指令
BCD碼
BCD碼是一種用4位二進(jìn)制數(shù)字來(lái)表示一位十進(jìn)制數(shù);1、壓縮BCD碼格式(PackedBCDForm;例如:十進(jìn)制數(shù)4256的非壓縮BCD碼表示為4個(gè);BCD碼使用頻率不高,所以任何CPU都不會(huì)設(shè)置專(zhuān);但是,運(yùn)用2進(jìn)制的運(yùn)算指令得到的結(jié)果就會(huì)失去BC;但是按照2進(jìn)制規(guī)律,00110101B+0011
微機(jī)原理與接口技術(shù)──BCD碼和BCD調(diào)整指令
1、壓縮BCD碼格式(Packed BCD Format)。1個(gè)字節(jié)的高低4位各表示1位十進(jìn)制數(shù)。 例如:十進(jìn)制數(shù)4256的壓縮BCD碼表示為2個(gè)字節(jié):0100 0010B、 0101 0110 B 2、非壓縮BCD碼格式(Unpacked BCD Format)。1個(gè)字節(jié)的高4位空閑不用,僅用低4位表示1位十進(jìn)制數(shù)。
例如:十進(jìn)制數(shù)4256的非壓縮BCD碼表示為4個(gè)字節(jié): xxxx0100B、xxxx0010B、 xxxx0101B、 xxxx0110 B 三、BCD碼的運(yùn)算和調(diào)整
BCD碼使用頻率不高,所以任何CPU都不會(huì)設(shè)置專(zhuān)門(mén)的BCD運(yùn)算指令。遇到BCD碼的運(yùn)算,只能利用普通2進(jìn)制運(yùn)算指令來(lái)進(jìn)行。
但是,運(yùn)用2進(jìn)制的運(yùn)算指令得到的結(jié)果就會(huì)失去BCD碼的特征。 例1:BCD碼 35 + 35 ,我們希望得到BCD碼70(0111 0000B)。
但是按照2進(jìn)制規(guī)律,0011 0101B + 0011 0101B實(shí)際等于0110 1010B。也就是說(shuō)低4位按照2進(jìn)制能夠表達(dá)10而不會(huì)進(jìn)位。此時(shí),若對(duì)結(jié)果加6(0110 1010 + 0000 0110),就可以得到正確BCD結(jié)果0111 0000B。
例2:BCD碼 38 + 38,我們希望得到BCD碼76(0111 0110B)。
但是按照2進(jìn)制規(guī)律,0011 1000B +0011 1000B實(shí)際等于0111 0000B(BCD碼70)。也就是說(shuō)低4位按照2進(jìn)制規(guī)律產(chǎn)生了進(jìn)位,而這個(gè)進(jìn)位帶走了16,而不是10,所以結(jié)果按照BCD理解少了6。此時(shí),若對(duì)結(jié)果加6(0111 0000 + 0000 0110),就可以得到正確BCD結(jié)果0111 0110B。
可見(jiàn),利用普通的適用于2進(jìn)制數(shù)的加法指令對(duì)BCD進(jìn)行加法運(yùn)算,要想得到符合BCD碼的結(jié)果,需要自動(dòng)判斷兩種情況并進(jìn)行補(bǔ)償處理:當(dāng)發(fā)生了進(jìn)位需要對(duì)結(jié)果補(bǔ)償6,當(dāng)超過(guò)9該進(jìn)位而未進(jìn)也需要補(bǔ)償6。
51單片機(jī)的“DA A”指令就是這個(gè)功能,而PSW寄存器中的半進(jìn)位標(biāo)志AC就是給DAA指令判別是否發(fā)生了進(jìn)位用的。
AC(Assistant Carry)──輔助進(jìn)/借位標(biāo)志,可用命令置位和清零(DA A指令自動(dòng)判別此位,用戶(hù)不使用此位)。
評(píng)論
查看更多