Určitě se všichni těšíte na další díl našeho seriálu, tak tu je. Naučíme se vytisknout číslo dekadické a hexa.
Použijeme na to již hotové rutinky od Busyho, jen lehce upravíme, aby bylo vidět, že jsem je jen neobšlehnul. Náš úkol je jasný: máme v registru hodnotu a potřebujeme ji dostat na obrazovku.
Princip rutinek je následující: od čísla budeme odečítat celý řád tolikrát, dokud nebude číslo záporné. Pak tento řád jednou přičteme, aby se dalo s číslem dále pracovat, a tolikrát, kolikrát jsme odečetli je naše hodnota daného řádu. Toto „kolečko“ provedeme s každým řádem.
Protože na odečítání potřebujeme instrukci sbc a ta musí mít neprve vynulovaný flag carry, použijeme fintu v tom, že budeme přičítat čísla záporná instrukcí add a budeme mít na salámu nějaké flagy a ještě ušetříme jednu instukci.
ld hl,43655 ;cislo
call CISLO ;a vytiskni jej dekadicky
ld a,'=' ;znak =
call ZNAK ;vytiskni
ld hl,43655 ;to same cislo
call HEXCISLO ;tiskni jako hexa
ret
CISLO 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 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
sbc hl,de ;pokud ano, oprav cislo
call ZNAK ;a vytiskni pocitadlo
ret
HEXCISLO 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 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
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 call ZNAK ;a vytiskni
ret
Pro hexadecimální číslo je postup stejný, akorát po skončení odečítání ještě musíme opravit hodnty počítadla 10-15 na znaky A-F pomocí instrukce cp.
Domácí úkol bude tentokrát triviální, zkuste přinutit obě rutiny, aby čísla netiskla rovnou na obrazovku, ale ukládala do jakéhosi tiskového bufferu.
Stažení: dil8.zip
Jeden komentář na “8.díl: čísla – část prvá”
Je nám líto, ale formulář pro přidávání komentářů je momentálně uzavřen.
Pri hexadecimalnych cislach sa moze vyuzit vlastnost, ze kazda cislica zabera presne 4 bity (4 bity sa odborne nazyvaju nibel). Napriklad cislo 1EE7h bude v binarnom vyjadreni vyzerat ako:
0001 1110 1110 0111
Skuste vyuzit tuto vlastnost, rutinka na vypis takychto cisiel je velmi jednoducha. V podstate nou mozete vypisat lubovolne dlhe hexadecimalne cislo.
Podobne rutiny sa daju napisat na kazdu ciselnu sustavu so zakladom 2^x.