Ľudmila Jánošíková | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programovanie v jazyku symbolických adries | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pre 32-bitové procesory Intel | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Inštrukcie pre posuv a rotáciu
Inštrukcie pre posuv a rotáciu majú dva operandy:
shl register/pamäť, konštanta/CL (shift logical left) sal register/pamäť, konštanta/CL (shift arithmetic left)
Inštrukcie shl a sal posúvajú všetky bity ľavého operandu doľava o počet miest zadaných pravým operandom. Do najnižšieho bitu sa zapisuje 0, najvyšší bit operandu sa posúva do príznakového bitu CF (pozri obr. 8). Ak je počet posuvov 1 a pred posuvom boli hodnoty dvoch najvyšších bitov operandu rovnaké, nastaví sa príznak OF na 0, inak sa nastaví na 1. Ak je počet posuvov väčší ako 1, nie je hodnota OF definovaná. Ostatné príznaky sa nastavia podľa výsledku operácie. Hodnota AF je nedefinovaná.
Obr. 8. Inštrukcie shl a sal Inštrukcie shl a sal sa používajú na rýchle násobenie čísiel bez znamienka dvoma, prípadne 4-, 8- a 16-mi, napr.: shl dx,4; dx := 16*dx shr register/pamäť, konštanta/CL (shift logical right)
Inštrukcia shr posúva všetky bity ľavého operandu doprava o počet miest zadaných pravým operandom. Do najvyššieho bitu sa zapisuje 0, najnižší bit operandu sa posúva do príznakového bitu CF (pozri obr. 9). Ak je počet posuvov 1 a po posuve sú hodnoty dvoch najvyšších bitov operandu rovnaké, nastaví sa príznak OF na 0, inak sa nastaví na 1. Ak je počet posuvov väčší ako 1, nie je hodnota OF definovaná. Ostatné príznaky sa nastavia podľa výsledku operácie. Hodnota AF je nedefinovaná.
Obr. 9. Inštrukcia shr Inštrukcia shr sa používa na rýchle celočíselné
delenie čísiel bez znamienka dvoma, prípadne 4-, 8- a 16-mi.
sar register/pamäť, konštanta/CL
(shift arithmetic right)
Inštrukcia sar posúva všetky bity ľavého operandu doprava o počet miest zadaných pravým operandom. Hodnota najvyššieho bitu sa nemení, najnižší bit operandu sa posúva do príznakového bitu CF (pozri obr. 10). Ak je počet posuvov 1, príznak OF sa vynuluje. Ak je počet posuvov väčší ako 1, nie je hodnota OF definovaná. Ostatné príznaky sa nastavia podľa výsledku operácie. Hodnota AF je nedefinovaná.
Obr. 10. Inštrukcia sar Inštrukcia sar sa používa na celočíselné delenie čísiel so znamienkom dvoma, prípadne 4-, 8- a 16-mi, napr.: mov bl,-4 ; bl := -4 = 11111100b rol register/pamäť, konštanta/CL (rotate left)
Inštrukcia rol rotuje všetky bity ľavého operandu doľava o počet miest zadaných pravým operandom. Hodnota najvyššieho bitu operandu sa presúva do najnižšieho bitu a zároveň sa kopíruje do príznakového bitu CF (pozri obr. 11). Ak sa vykonala rotácia o 1 bit a pred rotáciou boli hodnoty dvoch najvyšších bitov operandu rovnaké, nastaví sa príznak OF na 0, inak sa nastaví na 1. Ak je počet rotácií väčší ako 1, nie je hodnota OF definovaná.
Obr. 11. Inštrukcia rol ror register/pamäť, konštanta/CL (rotate right)
Inštrukcia ror rotuje všetky bity ľavého operandu doprava o počet miest zadaných pravým operandom. Hodnota najnižšieho bitu operandu sa presúva do najvyššieho bitu a zároveň sa kopíruje do príznakového bitu CF (pozri obr. 12). Ak sa vykonala rotácia o 1 bit a po rotácii sú hodnoty dvoch najvyšších bitov operandu rovnaké, nastaví sa príznak OF na 0, inak sa nastaví na 1. Ak je počet rotácií väčší ako 1, nie je hodnota OF definovaná.
Obr. 12. Inštrukcia ror rcl register/pamäť, konštanta/CL (rotate left through carry)
Inštrukcia rcl rotuje všetky bity ľavého operandu doľava o počet miest zadaných pravým operandom. Hodnota príznakového bitu CF sa presúva do najnižšieho bitu operandu a najvyšší bit operandu sa presúva do CF (pozri obr. 13). Ak sa vykonala rotácia o 1 bit a pred rotáciou boli hodnoty dvoch najvyšších bitov operandu rovnaké, nastaví sa príznak OF na 0, inak sa nastaví na 1. Ak je počet rotácií väčší ako 1, nie je hodnota OF definovaná.
Obr. 13. Inštrukcia rcl Táto inštrukcia sa uplatňuje pri posuvoch operandov dlhších než veľkosť univerzálneho registra v danom režime procesora. Pretože vo virtuálnom režime môžeme naraz posunúť nanajvýš operand dĺžky 32 bitov, musíme posuv dlhších operandov robiť po častiach. Napr. premennú VelkeCislo typu qword vynásobíme dvoma takto: shl dword ptr VelkeCislo,1
Inštrukcia rcr rotuje všetky bity ľavého operandu doprava o počet miest zadaných pravým operandom. Hodnota príznakového bitu CF sa presúva do najvyššieho bitu operandu a najnižší bit operandu sa presúva do CF (pozri obr. 14). Ak sa vykonala rotácia o 1 bit a po rotácii sú hodnoty dvoch najvyšších bitov operandu rovnaké, nastaví sa príznak OF na 0, inak sa nastaví na 1. Ak je počet rotácií väčší ako 1, nie je hodnota OF definovaná.
Obr. 14. Inštrukcia rcr |
Načo je vám jazyk symbolických adries?
Architektúra moderných procesorov Služby operačného systému MS-DOS Služby operačného systému Windows 95/98/NT/XP |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Vydala Žilinská univerzita v Žiline, 2000. ISBN 80-7100-723-4. Otázky a pripomienky môžete poslať autorke. Naposledy upravené 28.9.2015. |