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.