【提問】BCD碼如何轉(zhuǎn)換為十進(jìn)制數(shù)?
前兩天有一個朋友在調(diào)試通訊程序的時候遇到BCD還原十進(jìn)制數(shù)的問題,我們給予了技術(shù)支持。現(xiàn)將這個知識點(diǎn)整理了一下,分享給大家。
BCD碼簡介
4位二進(jìn)制數(shù)來表示1位十進(jìn)制數(shù)中的0~9這10個數(shù)碼,簡稱BCD碼,Binary-Coded Decimal?,簡稱BCD,我們習(xí)慣上稱其為8421碼。稱BCD碼或二-十進(jìn)制代碼,亦稱二進(jìn)碼十進(jìn)數(shù)。是一種二進(jìn)制的數(shù)字編碼形式,用二進(jìn)制編碼的十進(jìn)制(定義:其中各十進(jìn)制數(shù)位都分別由二進(jìn)制數(shù)字來表示的二進(jìn)制編碼記法。)“代碼'。
BCD碼這種編碼形式利用了四個位元來儲存一個十進(jìn)制的數(shù)碼,使二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換得以快捷的進(jìn)行,分為有權(quán)BCD碼和無權(quán)BCD碼。
有權(quán)BCD碼,如:8421(最常用)、2421、5421…
無權(quán)BCD碼,如:余3碼、格雷碼…
舉例:
二進(jìn)制無符號數(shù)11101010,轉(zhuǎn)換為三位非壓縮BCD數(shù),按百位、十位和個位的順序表示。
解:(1)11101010轉(zhuǎn)換為十進(jìn)制:234
(2)按百位、十位和個位的順序表示:00000010 00000011 00000100
附注:
壓縮BCD碼與非壓縮BCD碼的區(qū)別—— 壓縮BCD碼的每一位用4位二進(jìn)制表示,一個字節(jié)(一個字節(jié)是八個位)表示兩位十進(jìn)制數(shù)。例如10010110B表示十進(jìn)制數(shù)96D;非壓縮BCD碼用1個字節(jié)表示一位十進(jìn)制數(shù),高四位總是0000,低4位的0000~1001表示0~9.例如00001000B表示十進(jìn)制數(shù)8。
假設(shè)內(nèi)存中30H的值為0x09,求加上1后的BCD碼,下面是程序和解釋:
MOV A,30H 把30H的值先送人累加器A,這時累加器的值為0x09
ADD A,#01H 累加器的值加上1,這時累加器的值為0x0a
DA A 累加器BCD碼調(diào)整,這時累加器A的值為0x10
MOV 30H,A 把累加器A的值送回30H,實現(xiàn)BCD調(diào)整
RET