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.