Binárisan kódolt decimális számábrázolás
A számítástechnikában és az elektronikus rendszerekben a binárisan kódolt decimális – Binary-Coded Decimal (BCD) a decimális számok egy kódolási formája, amelyben minden számjegyet egy-egy bitsorozat ábrázol. Ezzel a módszerrel a számok konverziója és megjelenítése lényegesen egyszerűbbé válik. Ugyanakkor valamivel több elektronikus áramkörre van szükség a aritmetikai számításokhoz, és tárolóterületet veszítünk a bináris ábrázoláshoz képest. Ennek ellenére ez a kódolási eljárás fontos és használatos még ma is. A BCD-nél egy számjegynek általában 4 bit felel meg, amelyek általában a 0–9 karaktereket is jelentik. Más kombinációkat is használnak az előjelek és egyebek jelzésére. Alapok![]() Egy decimális szám BCD kódolása egy gyakran alkalmazott kódolási eljárás, ami minden számjegy kódolásához egy négy bites bináris formát használ. Például a 127 kódolva: 0001 0010 0111 Mivel a legtöbb számítógép az adatokat 8 bites byte-okban tárolja, két megoldás használatos arra, hogy a 4 bites BCD számjegyeket byte-okon tárolják:
A tiszta bináris ábrázolással szemben, nagy számok esetében a megjelenítés egyszerűen csak nibble-nként történhet, azonos logika felhasználásával. A tiszta binárisból decimálisba való konverzió bonyolult, és a szorzási vagy osztási műveletek használatát igényli, és pontosság is kérdéses. Több PC BIOS-a a dátum- és idő értéket BCD formában tárolja és kezeli, valószínűleg történeti okokból, (hogy elkerüljék a ASCII konverziót.) A BCD az elektronikábanA BCD nagyon elterjedt az elektronikában, ahol numerikus értékeket kell megjeleníteni, és erre a rendszerben digitális logika vagy mikroprocesszor nem áll rendelkezésre. A BCD használatával a megjelenítendő számjegyek kezelése sokkal egyszerűbb, minden számjegyhez egy saját, és számjegyenként azonos logika tartozik, a szokásos 7 szegmens kijelzők is egy ilyen rendszerhez illeszthetők egyszerűen. Ha a numerikus értéket tisztán binárisan tárolná és kezelné a rendszer, akkor a megjelenítéshez egy komplex áramköri logika kellene, gondoskodni kellene a felesleges nullák elnyomásáról stb. Fentiek miatt a BCD kódolás célszerűsége, a viszonylag egyszerű aritmetika széles körű elterjedtséget biztosít az elektronikában a tiszta bináris ábrázolással szemben. Hasonló érvek hozhatók fel akkor is, ha úgynevezett "beágyazott" mikrokontrollert vagy mikroprocesszort is tartalmaz az áramkör. Kevesebb kód szükséges a BCD kezeléséhez, a konverziókhoz a kijelzés egyszerűbb. Fentiek miatt néhány mikrokontroller és mikroprocesszor rendelkezik már direkt BCD utasításokkal, amivel tovább egyszerűsíthető a BCD kódolású adatok kezelése. Tömörített vagy pakolt – packed – BCDSzéles körben elterjedt variáció a két-számjegy-per-byte kódolás, amely "pakolt BCD" vagy "tömörített BCD" néven közismert. Itt a szám a számjegyeket és végén az előjelet jelenti: általában 1100 a pozitív és 1101 a negatív. Pakolt BCD formában a 127-et a 00010010 01111100 byte-ok jelentik, és a mínusz 127-et pedig a 00010010 01111101. Ugyan a tömörített BCD nem optimális a tárolás szempontjából (nagyjából a rendelkezésre álló terület 1/6-a veszteség a tömörített BCD esetében) az EBCDIC és ASCII konverzió, valamint a Unicode különböző változataiba való konverzió egyszerű, nem igényel külön aritmetikai lépéseket. Léteznek nagyobb tömörítettségű BCD változatok, itt a tárterület kihasználtsága optimális, szintén nem igényelnek járulékos aritmetikai műveleteket a legtöbb konverzióhoz. Nagy sűrűségű kódolásHa egy decimális számjegyhez 4 bit szükséges, akkor három decimális jegyhez 12 bit kell. Mivel 210>103, akkor 3 decimális jegy együttes konverziója csak 10 bitet igényel. A Chen–Ho kódolás és a szorosan pakolt decimális (densely packed decimal, DPD) ilyen típusú kódolás. Nagy előnye, hogy két számjegy esetében optimális módon 7 bitet, míg 1 számjegy esetén 4 bitet használ, mint a szabályos BCD. Az IBM és a BCDAz IBM használta a binárisan kódolt decimális és a BCD kifejezést egy hat bites úgynevezett alfanumerikus kódra, amely a számokat, a nagybetűket és speciális karaktereket kezelt. Az IBM korai gépeiben a BCD néhány variánsát használta (erre „BCDIC alphamerics” néven is hivatkoztak), mint az IBM 1620, IBM 1400 series és az IBM 700/7000 sorozatának nem-decimális architektúrájú tagjai. Az IBM System/360, sorozat megjelenésekor tért át az IBM BCD a 8 bites EBCDIC-re. Ennél a BCD formánál a biteket az B, A, 8, 4, 2 és 1 címkékkel látták el. Számok kódolása esetében B és A nulla értékű. Az A betű kódja (B,A,1). Az 1620 BCD alfanumerikus esetében számpárokat használtak, a páratlan jegyeket a "zóna – zone" esetében, és páros jegyeket a "számjegy-digit" esetében. A ki/bevitel esetén a hardver konvertálta a belső jegyeket a külső, szabályos hat-bites BCD kódra, és vissza. A decimális architektúrájú IBM 7070, IBM 7072, és IBM 7074 alfanumerikus kódolásnál a számpárokat használták (a kettő-az-ötből kódot használtak, és nem BCD-t) a 10-jegyes szavakhoz, a "zona" a bal jegyeket, a "számjegy" pedig a jobb jegyeket jelentette. A ki/beviteli konverziókat szintén hardver végezte. BCD összeadásA BCD számokkal végzett összeadás első lépése a BCD kódban ábrázolt számok bináris összeadása, majd az eredménytől függően korrekcióra lehet szükség, hogy a helyes eredményt megkapjuk: A korrekció során minden olyan csoportra, ahol az összeadás után az eredmény nagyobb, mint 9, hozzá kell még adni az eredményhez 6-ot. Le kell vonni ugyanis 10-et és a következő csoportot eggyel növelni kell (16 hozzáadása), így összességében 6-tal kell növelni a számot. Például:
Binárisan az eredmény nem lehet nagyobb, mint 9 (nibble-nként), ezért korrekcióként a csoporthoz hozzá kell adni még 6-ot:
ami eredményül már két nibble-t ad, [0001]-et és [0101] ami pontosan az "1" és "5" megfelelője. Így a BCD összeadás a helyes eredményt adja. Teljes bájtnyi BCD számok összeadásakor azonban nem elegendő információ a 9-cel való összehasonlítás:
Mivel az eredmény érvényes BCD kód: [1000 0001]=81, azt hihetnénk, hogy jó eredményt kaptunk. A probléma az, hogy történt egy átvitel (összeadási maradék) a hátsó csoportból az első felé, ami azonban bináris összeadásnál 16-os értéket képvisel, BCD-ként való értelmezésben pedig csak 10-et. A helyes eredményhez újból 6-tal kell növelni az eredményt (81+6=87). Hogy volt-e ilyen átvitel, azt a processzorok (például az Intel 8085) a „half carry” jelzőbit beállításával jelzi. A korrekciót elvégző assembly parancs a DAA (decimal adjust after addition). Lásd még Douglas Jones' Tutorial. HáttérA következő táblázatban a legismertebb BCD kódolási formákat ábrázoljuk, a teljesség igénye nélkül. A BCD 8421-re gyakran hivatkoznak, mint egyszerű binárisan kódolt decimális – Simple Binary-Coded Decimal (SBCD). Használják még a NBCD rövidítést is, ami a Natural Binary-Coded Decimal – természetes binárisan kódolt decimális rövidítése. A táblázat fejlécében a '8 4 2 1' mutatja a bitek súlyait; meg kell jegyezni, hogy az 5. oszlopban két súly negatív. A következő táblázat a decimális 0 és 9 közé eső számokat ábrázolja a különböző BCD rendszerekben:
Jogi vonatkozása1972-ben az USA Legfelső Bírósága felülbírálta egy alsóbb fokú bíróság döntését, amelyik megengedte BCD kódolású számok egy számítógépre történő bináris konverziójának szabadalmaztatását. (lásd: Gottschalk v Benson). Ez egy nagyon fontos eset volt egy szoftver vagy algoritmus szabadalmaztathatóságának meghatározásánál. A tiszta binárissal való összehasonlításElőnyei
Hátrányai
Kapcsolódó szócikkekEgyéb, külső hivatkozásokTovábbi információk
|
Portal di Ensiklopedia Dunia