Ezzel tulajdonképpen a számok kiíratási lehetőségeit többé kevésbé letárgyaltuk, az
összes többi már ezek kombinálása. Van azonban a számok tárolásának még egy nagyon
gyakori fajtája az úgynevezett BCD számábrázolás. Ez nem más mint a decimális és a
hexadecimális ábrázolás keveréke. Itt a hexa számban a legmagasabb használható érték
a 9. Ilyen módon legfőképpen a ROM BIOS programjai kezelik a számokat. A most
bemutatásra kerülő példa is erre támaszkodik, a pontos időt fogjuk a képernyőre írni. Itt
például a 16 óra 42 perc 1642h számként tárolódik. Használatuk igen egyszerű, hasonlít
a decimális számok kiíratására, mivel itt is hozzá kell adni a számhoz 48-at a kiírás előtt,
de itt is egyszerre csak egy számjegyet teszünk ki.
A ROM program elindítása után az eredményt az egyes regiszterekben kapjuk
mégpedig ch-ban az órát, cl-ben a percet és dh-ban pedig a másodpercet BCD
formátumban.
| Pelda09 | Segment | ;Szegmensdefinicio |
| assume cs:Pelda09,ds:Pelda09 | ;Cs, ds beallitasa | |
| Start: | mov ax,Pelda09 | ;Ds regiszter beallitasa |
| mov ds,ax | ;a kod elejere | |
| mov ax,0b800h | ;A kepernyomemoria szegmens- | |
| mov es,ax | ;cimet es regiszterbe tolti. | |
| mov ax,3 | ;80*25 karakteres mod be- | |
| int 10h | ;allitasa, kepernyotorles. | |
| .1_Pelda09: | mov ax,200h | ;Az ido lekerdezese |
| int 1ah | ||
| call Kiiro | ;es kiirasa. | |
| mov ax,100h | ;Figyeli, hogy van-e | |
| int 16h | ;lenyomott billentyu. | |
| jz .1_Pelda09 | ;Ha nincs, ugrik az elejere. | |
| xor ax,ax | ;Ha van, akkor kiolvassa azt | |
| int 16h | ||
| mov ax,4c00h | ;es visszater a DOS-hoz. | |
| int 21h | ||
| Kiiro | Proc | ;A rutin kezdete. |
| mov di,1670 | ;A kepernyo kozepe taja. | |
| mov ah,15 | ;Szinbeallitas | |
| mov bx,cx | ;Az ora,perc erteket attolti | |
| ;bx-be. | ||
| call Kiiro2 | ;kiirja az ora erteket. | |
| add di,2 | ;Helyet hagy a kettospontnak. | |
| call Kiiro2 | ;Kiirja a percet. | |
| add di,2 | ;A kettospont helye. | |
| mov bh,dh | ;A masodperc erteket bh-ba | |
| call Kiiro2 | ;tolti es kiiratja. | |
| mov al,":" | ;Al regiszterbe a ":" jel | |
| mov es:[di-6],ax | ;kodjat teszi es kiirja | |
| mov es:[di-12],ax | ;azt a ket megadott helyre. | |
| ret | ;Visszateres a rutinbol. | |
| Kiiro | Endp | ;A kiiro rutin vege. |
| Kiiro2 | Proc | ;A kiiro2 rutin kezdete. |
| mov cx,2 | ;Egyszerre 2 szamjegyet | |
| .1_Kiiro2: | push cx | ;irunk ki. |
| mov cx,4 | ;Ami egyenkent 4 bitbol all. | |
| xor al,al | ;Al nullazasa. | |
| .2_Kiiro2: | shl bx,1 | ;Bx felso 4 bitjet atforgatja |
| rcl al,1 | ;al regiszterbe. | |
| loop .2_Kiiro2 | ||
| add al,48 | ;Atalakitja karakterkodda | |
| mov es:[di],ax | ;es kiirja a kepernyore. | |
| add di,2 | ;A kovetkezo kephely. | |
| pop cx | ;A kovetkezo szamjegy. | |
| loop .1_Kiiro2 | ||
| ret | ;Visszateres a rutinbol. | |
| Kiiro2 | Endp | ;Az eljaras vege. |
| Pelda09 | Ends | ;A szegmens vege. |
| End Start | ;A program vege. |