Bře 272005
Dnes si ukážeme, jak je možné tiskat čísla bez prvních, nepodstatných nul na začátku.
Naučíme se, jak je možné tyto nuly nahradit libovolným znakem, ba dokonce i přímo tak, aby nevytiskla ani mezera a číslo bylo zarovnané nalevo.
Takže, princip je jednoduchý, místo znaku ‚0‘ vytisknout znak jiný, nejlépe ‚ ‚ (mezeru). Na to využijeme registr c a do něj vložíme kód nahrazovaného znaku. Tesně před tiskem zkontrolujeme, zda se nebude náhodou tisknout znak ‚0‘ a jestli ano, tak se nahradí znakem z registru c. Ale co když bude nula uprostřed čísla? Musíme tedy změnit obsah registru c na ‚0‘ v tom případě, že se bude tisknout jiná číslice než nula. Taky se musí změnit, má-li se tisknout poslední nula v řádu jedniček.
ld hl,3605 ;cislo
call CISLO ;a vytiskni jej dekadicky
ld a,13 ;odradkuj
call ZNAK
ld hl,3605 ;jeste jednou
ld c,0 ;neplatne nuly netiskni
call CISLO2 ;volej rutinu trochu niz
ld a,13 ;odradkuj
call ZNAK
ld hl,$0560 ;to same cislo
call HEXCISLO ;tiskni jako hexa
ld a,13 ;opet odradkuj
call ZNAK
ld hl,$0560 ;jeste jednou
ld c,0 ;a zase netiskni nuly
call HEXCISLO2 ;vytiskni
ret
CISLO ld c,' ' ;uvodni znak
CISLO2 ld de,-10000 ;rad desetitisicu
call CIFRA
ld de,-1000 ;rad tisicu
call CIFRA
ld de,-100 ;rad stovek
call CIFRA
ld de,-10 ;rad desitek
call CIFRA
ld c,'0' ;posledni rad, nastav nulu.
ld de,-1 ;rad jednicek
CIFRA ld a,'0'-1 ;do A znak 0 zmenseny o 1
CIFRA1 add hl,de ;pricti zaporny rad
inc a ;zvys pocitadlo
jr c,CIFRA1 ;jeste jsme jej neprekrocili
cp '0' ;neni to nahodou nula?
jr nz,CIFRA2 ;neni,skoc
ld a,c ;nahrad nulu znakem pro nulu
CIFRA3 sbc hl,de ;oprav cislo
or a ;neni to primo nula, nema se vubec tisknout
call nz,ZNAK ;a vytiskni pocitadlo
ret
CIFRA2 ld c,'0' ;bude se tisknou cislo
jr CIFRA3 ;takze dalsi cislice budou platne
HEXCISLO ld c,' '
HEXCISLO2 ld de,-$1000 ;rad 16^3
call HEXCIFRA
ld de,-$100 ;rad 16^2
call HEXCIFRA
ld de,-$10 ;rad 16^1
call HEXCIFRA
ld c,'0' ;posledni rad, nastav nulu.
ld de,-1 ;rad 1
HEXCIFRA ld a,'0'-1 ;pocatecni inializace pocitadla
HEXCIFRA1 add hl,de ;odecitej rady (pricitej zaporne)
inc a ;zvys pocitadlo
jr c,HEXCIFRA1 ;neprekrocilo
cp '0' ;neni to nahodou nula?
jr nz,HEXCIFRA3 ;neni,skoc
ld a,c ;nahrad nulu znakem pro nulu
HEXCIFRA4 sbc hl,de ;oprav cislo
cp '9'+1 ;je pocitadlo vyse nez 9?
jr c,HEXCIFRA2 ;ne, skoc
add a,'A'-':' ;oprav na znak A-F
HEXCIFRA2 or a ;pokud je to primo nula, nema se tisknout
call nz,ZNAK ;a vytiskni
ret
HEXCIFRA3 ld c,'0' ;bude se tisknou cislo
jr HEXCIFRA4 ;takze dalsi cislice budou platne
Stažení: dil9.zip
Je nám líto, ale formulář pro přidávání komentářů je momentálně uzavřen.