Kod BCD

Dwa zegary pokazujące ten sam czas, po prawej wskazanie w BCD8421, na nim od lewej: godziny (dziesiątki i jedności), minuty (d. i j.) i sekundy (d. i j.); dziesiątki godzin kodowane są tylko dwoma najmłodszymi bitami (wskazanie nigdy nie jest większe od 2), a minut i sekund – trzema najmłodszymi (wskazanie nigdy nie jest większe od 5).

Kod BCD (ang. binary-coded decimal, czyli zapis dziesiętny kodowany dwójkowo[1] lub kod dwójkowo-dziesiętny[2]) – sposób zapisu liczby polegający na zakodowaniu kolejnych cyfr dziesiętnych tej liczby w systemie dwójkowym, przy użyciu tylko czterech młodszych bitów (zob. półbajt)[2]. Stosowany jest on głównie w elektronice i informatyce. Taki zapis pozwala na łatwą konwersję liczby do i z systemu dziesiętnego, jednak jego niedogodnością jest istniejąca nadmiarowość (wykorzystuje tylko 10 czterobitowych kombinacji z 16 możliwych).

Kod BCD jest obecnie stosowany głównie w urządzeniach elektronicznych z wyświetlaczem cyfrowym (np. w kalkulatorach, miernikach cyfrowych) i w zastosowaniach finansowych informatyki (ujednoznacznia zapis części ułamkowych kwot i ułatwia dziesiętne zaokrąglanie).

We współczesnych komputerach używane są dwa sposoby zapisu liczb w kodzie BCD na ośmiobitowych bajtach (zob. oktet):

  1. użycie tylko czterech najmłodszych bitów do zapisu pojedynczej cyfry[1]; 4 starsze są wtedy ustawiane na jakąś konkretną wartość (np. 1111 jak w EBCDIC, 0011 jak w ASCII, czy 0000),
  2. zapis dwóch cyfr w każdym bajcie (bardziej znacząca w starszym półbajcie, a mniej znacząca w młodszym); jest to tak zwane spakowane BCD[1] (ang. packed BCD).

Wiele mikroprocesorów (w tym wszystkie wywodzące się od Intel 8080[3]) posiada rozkazy i tak zwane flagi umożliwiające dodawanie i odejmowanie liczb BCD w wersji spakowanej[2].

Warianty kodu

Z zależności od zastosowania, poszczególne cyfry mogą być kodowane w inny niż dwójkowo sposób, stąd rozróżnia się wiele wariantów BCD (dla uściślenia wersja podstawowa zwana jest też BCD 8421 lub NBCD):

  |       BCD    Excess-3   BCD      BCD    IBM 1401
  | Wagi: 8421              2421    84-2-1    8421
-------------------------------------------------
0 |       0000     0011     0000     0000     1010
1 |       0001     0100     0001     0111     0001
2 |       0010     0101     0010     0110     0010
3 |       0011     0110     0011     0101     0011
4 |       0100     0111     0100     0100     0100
5 |       0101     1000     1011     1011     0101
6 |       0110     1001     1100     1010     0110
7 |       0111     1010     1101     1001     0111
8 |       1000     1011     1110     1000     1000
9 |       1001     1100     1111     1111     1001

Przykładowo, liczba 127 w podstawowym wariancie BCD wygląda następująco:

0001 0010 0111

Przypisy

Bibliografia

  • Gary Syck, Turbo Assembler®. Biblia użytkownika, Warszawa: LT&P, 1994, ISBN 83-901237-2-X.
  • Andrzej Markowski, Andrzej Rydzewski, Henryk Kruszyński, Leksykon techniki mikrokomputerowej, Warszawa: Wydawnictwo Czasopism i Książek Technicznych Sigma-NOT, 1989 (Mikrokomputery), ISBN 83-85001-28-X.

Media użyte na tej stronie

Digital-BCD-clock.jpg
digital clocks: with seven-segment-display-numbers (left) and with binary-coded decimal (BCD) lamps (right)
BCD shows here, from left to right (hours to seconds), and from top to bottom:
0×2+1×1=1; 0×8+0×4+1×2+0×1=2; 0×4+0×2+1×1=1; 0×8+1×4+0×2+1×1=5; 1×4+0×2+0×1=4; 0×8+1×4+0×2+1×1=5, i.e. 12:15:45