Kurs Assembleru - Celo⇨ seln⑦ d❎len ¢Raster/C.P.U., 2004¢---------------------------------------¢¢P②i programov⇧n v Assembleru se d② ve ⇨i pozd❎ji setk⇧te s pot②ebou prov⇧d❎t operaci d❎len . Na sloəitost ②e③en tohoto probl⑦mu m⇧ z⇧sadn vliv, zda d❎litel je vədy stejn⇧ (konstantn ) hodnota ⇨i zda m
əe nab⑨vat r
zn⑨ch hodnot, d⇧le pak z⇧leə na konkr⑦tn hodnot❎ d❎litele.¢¢1.) D❎len konstantn hodnotou kdy d❎litel je mocnina dvou¢¢Zde je situace nejjednodu③③ , nebo④ pro takov⑦ d❎len m
əeme pouə t p② mo instrukce posunu:¢¢ LDA d❎lenec¢ LSR @ ;/2¢ LSR @ ;/2/2 => /4¢ LSR @ ;/2/2/2 => /8¢ LSR @ ;/2/2/2/2 => /16¢;atd.¢¢Pokud by bylo posun
p② li③ mnoho, lze v kritick⑨ch p② padech v⑨po⇨et urychlit pouəit m rotace na opa⇨nou stranu. P②itom je nutno si uv❎domit, əe instrukce pro rotaci se prov⇧d p②es Carry bit.¢¢Nap② klad m❎jme d❎len hodnotou 64, pro kterou by bylo t②eba prov⑦st 6 posun
vpravo. M⇧me v③ak i tuto moənost:¢¢ LDA d❎lenec ;76543210 C=_¢ ROL @ ;6543210_ C=7bit¢ ROL @ ;543210_7 C=6bit¢ ROL @ ;43210_76 C=5bit¢ AND #$03 ;------76¢¢Vzhledem k tomu, əe instrukce AND #$03 pot②ebuje 2 cykly stejn❎ jako posun, ⑤spora je v tomto p② pad❎ celkem 4 cykly, coə se m
əe zd⇧t zanedbateln⑦. Ov③em prov⇧d te-li d❎len velk⑦ho mnoəstv ⇨ sel (stovek ⇨i tis c
), je kaəd⑨ uspo②en⑨ takt dobr⑨.¢¢2.) D❎litel nen konstantn nebo nen mocnina dvou¢¢Zde doporu⇨uji pouə t rutinu uvedenou v samostatn⑦m souboru DIVIDE.ASM. Dle velikosti d❎lence a d❎litele (BYTE - tj. 8bitov⑨ rozsah, nebo WORD - tj. 16bitov⑨ rozsah) jsou tam dv❎ rutiny nazvan⑦ deleni_wbbb nebo deleni_wwww. Zp
sob jejich pouəit je n⇧zorn❎ demonstrov⇧n t⑦ə v samostatn⑦m p② kladu PRIKLDIV.ASM. Syntaxe je QuickAsm.¢¢3.) Tipy a triky¢¢V p② pad❎ pot②eby rychl⑦ho d❎len konstantn hodnotou lze tak⑦ vyuə t triku s tabulkou p②edpo⇨ tan⑨ch v⑨sledk
. ekn❎me, əe d❎lenec je 8bitov⑦ ⇨ slo a chceme jej d❎lit t②eba hodnotou 27. Pak si p②edp②iprav me tabulku dlouhou 256 byt
, ve kter⑦ vədy pouəijeme d❎lenec jako index a p② mo z sk⇧me v⑨sledek.¢¢Tabulka p②edpo⇨ tan⑨ch v⑨sledk
:¢¢DELENI27¢ dta 0,0,...,0 ;27kr⇧t hodnota 0¢ dta 1,1,...,1 ;27kr⇧t hodnota 1¢ ...¢ dta 9,9,...,9 ;27kr⇧t hodnota 9¢ dta 10,10,...,10 ;13kr⇧t hodnota 10¢¢Pak sta⇨ vədy prov⑦st:¢¢ LDY d❎lenec¢ LDA DELENI27,Y¢¢Pozn⇧mka: Samoz②ejm❎ nen probl⑦m tabulku v⑨sledk
upravit libovoln⑨m zp
sobem - nap② klad tak, abychom vədy obdrəeli v⑨sledek zaokrouhlen⑨ na cel⇧ ⇨ sla.