cavte,
podarilo sa mi ako tak urobit moje zadaie
ale pri vypise vysledku nastal problem ked je cislo vecsie ako 9... vypisuje rozne znaky podla ascii...
viete mi niekto poradit ako by sa to dalo vyriesit...? (cislo mam v registri "d" alebo neskor koli vypisu out v reg. "a")
a takisto mam ten vsledok previest do 16tkovej sustavy a to nemam sajnu jak na to...
prosiim pomozte niekto....
1. problem:
ked vypisujes to cislo len tak, ze beries hodnotu registra, ktora ti pocita vysledok, a pripocitas k tomu hodnotu ascii znaku '0', tak samozrejme, bude ti pisat blbosti
pretoze, '0' + 9 = '9' ('9' je znak 9, 9 he cislo 9)
ale '0' + 10 = ':'
ak mas napr cisla len od 0 do 255 tak napr:
cislo musis delit 100tkou, celu cast vypises (ako robis hodnota+'0'),
zostatok (teda modulo) vydelis 10 , celu cast vypises (hodnota+'0') a vypises aj zostatok (hodnota+'0')
2.problem
hexadecimalnu cislicu mozes reprezentovat na 4 bitoch.
teda ak rozdelis byte na 2 casti:
0000|0000
mas tu rovno svoje 2 hexa cislice , ktore reprezentuju hodnotu v registri (cislo od 0-255)
staci ti :
rotovat ten register dolava alebo doprava 4krat (horne 4 bity sa dostanu ,,vpravo'') aplikovat na vysledok operaciu AND (teda v 8080 mnemonike, instrukcia ANI) s hodnotou 00001111 binarne (hovori sa tomu aj maskovanie)
zostane ti tak len cislo od 0000 0000 do 0000 1111 binarne (00-0F hexa)
a testujes, ak cislo je mensie ako 10, pripocitas hodnote znak '0'
inak pripocitas hodnote znak 'A' - 10 (-10 pretoze hodnota v registri je 10 alebo viac, a ku 'A'treba pripocitat 0 alebo viac... (max 5))
v druhom kroku uz to povodne cislo netreba rotovat, len aplikujes masku (AND 00001111) a pokracujes ako v predoslom kroku
Have Fun