Kurs Assembleru - Zobrazov⇧n ⇨ sla v des tkov⑦ soustav❎¢Raster/c.p.u., 2005¢---------------------------------------¢¢V dne③n m d le nepravideln⑦ho kursu programov⇧n v Assembleru se pod v⇧me na problematiku zobrazov⇧n hexadecim⇧ln ho ⇨ sla v des tkov⑦m tvaru. ekn❎me tedy, əe ve sv⑦m programu pouə v⇧te dvoubytov⑦ ⇨ slo (tj. $0000-$FFFF), kter⑦ chcete zobrazit na obrazovce v des tkov⑦ soustav❎ (tj. 00000-65535).¢P②edvedeme si dva odli③n⑦ principy, kter⑨mi lze toto ②e③it.¢¢1.) Zp
sob pomoc d❎len 10¢---------------------------¢¢⑥ slo opakovan❎ d❎l me hodnotou 10. Zbytek po d❎len vədy pouəijeme jako jednu v⑨slednou cifru pro zobrazen , p②i⇨emə v⑨stup je sestavov⇧n pozp⇧tku od posledn cifry po prvn (tj. od jednotek po desetitis ce).¢¢P② klad: M❎jme ⇨ slo $4321¢1. $4321 / 10 = $06B6 zbytek 5¢2. $06B6 / 10 = $00AB zbytek 8¢3. $00AB / 10 = $0011 zbytek 1¢4. $0011 / 10 = $0001 zbytek 7¢5. $0001 / 10 = $0000 zbytek 1¢V⑨sledn⇧ zobrazen⇧ hodnota je tedy 17185.¢¢Jak je z p② kladu vid❎t, posledn (p⇧t⑦) d❎len je jiə zbyte⇨n⑦, nebo④ v⑨sledek d❎len ve ⇨tvrt⑦m kroku jiə m
əeme rovnou pouə t jako cifru desetitis c
.¢¢Tento princip v⇨etn❎ zm n❎n⑦ jednoduch⑦ optimalizace vynech⇧n m p⇧t⑦ho d❎len je demonstrov⇧n v uk⇧zce SHOW10A. Vol⇧ se podprogram "zobraz", jenə vədy zobraz hodnotu obsaəenou na pam❎④ov⑨ch buk⇧ch "zobraz_db" a "zobraz_hb". Toto se prov⇧d v cyklu od $0000 aə po $FFFF, tj. zobrazov⇧ny jsou hodnoty od 00000 po 65535. Na z⇧v❎r se pak vyp ③e celkov⇧ doba b❎hu programu v pades⇧tin⇧ch sekundy.¢¢2.) Zp
sob pomoc ode⇨ t⇧n mocnin 10¢-------------------------------------¢¢Od ⇨ sla ode⇨ t⇧me mocniny deseti a zapo⇨ t⇧v⇧me vədy po⇨et t❎chto ode⇨ten dokud bude v⑨sledek nez⇧porn⑨. V p② pad❎ z⇧porn⑦ho v⑨sledku se vr⇧t me k posledn nez⇧porn⑦ hodnot❎ a posuneme se na v⑨po⇨et dal③ cifry. Za⇨neme hodnotou 10000, pak 1000, 100, 10 a 1. V⑨sledek tedy bude sestavov⇧n z po⇨t
ode⇨ten , a v po②ad od prvn cifry po posledn (tj. od desetitis c
b❎hu je demonstrov⇧n v uk⇧zce SHOW10B. Vol⇧ se podprogram "zobraz", jenə vədy zobraz hodnotu obsaəenou na pam❎④ov⑨ch buk⇧ch "zobraz_db" a "zobraz_hb". Toto se prov⇧d v cyklu od $0000 aə po $FFFF, tj. zobrazov⇧ny jsou hodnoty od 00000 po 65535. Na z⇧v❎r se pak vyp ③e celkov⇧ doba b❎hu programu v pades⇧tin⇧ch sekundy.¢¢Porovn⇧n rychlosti obou zp
sob
:¢---------------------------------¢(hodnota za dvojte⇨kou znamen⇧ dobu - ⇨ m v❎t③ t m hor③ )¢¢SHOW10A:¢⇨ sla 00000-65535: 4476¢65536x ⇨ slo 00000: 4222¢65536x ⇨ slo 59999: 4607¢¢SHOW10B:¢⇨ sla 00000-65535: 1710¢65536x ⇨ slo 00000: 550¢65536x ⇨ slo 59999: 2842¢¢Operace d❎len je n⇧ro⇨n❎j③ na v⑨po⇨etn v⑨kon, takəe prvn zp
sob je pomalej③ . Zobrazen r
zn⑨ch hodnot v③ak trv⇧ vədy zhruba stejnou dobu - rozd l cca do 10%.¢¢Druh⑨ zp
sob je vədy rychlej③ , a to je③t❎ velmi z⇧vis na zobrazovan⑦ hodnot❎. Mezi nejhor③ zobrazovanou hodnotou 59999, kdy mus ode⇨ tac metoda prov⑦st nejv❎t③ po⇨et cykl
, a nejlep③ zobrazovanou hodnotou 00000 s minim⇧ln m celkov⑨m po⇨tem ode⇨ tac ch cykl
, je rozd l pot②ebn⑦ doby v ce neə p❎tin⇧sobn⑨.¢¢Pozn⇧mka: U v⑨konnostn❎ n⇧ro⇨n⑨ch her a program
, kde by neust⇧l⑦ p②ev⇧d❎n hexa ⇨ sel do des tkov⑦ho tvaru kv
li zobrazov⇧n st⇧lo p② li③ mnoho ⇨asu, se v❎t③inou pouə v⇧ BCD reprezentace a decimal modus, ale o tom kdyətak n❎kdy p② ③t❎.