SAL/SAR/SHL/SHR - skupina instrukci posunu: Porovnání verzí

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání
(Žádný rozdíl)

Verze z 11. 1. 2013, 18:12

Instrukce
SAL/SAR/SHL/SHR - skupina instrukci posunu (shift instructions)
Časování
2-5 (80286), 3-7 (80386)
Popis
Instrukce SAL nebo SHL posouvá bity operandu specifikovaného v instrukci doleva. To způsobuje že MSB je presunut do CF a LSB je nulován. Instrukce SAR nebo SHR posouvá bity svého operandu doprava. Pak je LSB presunut do CF. Instrukce SAR provádí delení s uvažováním znaménka: MSB se nemění. Instrukce SHR provádí delení bez ohledu na znaménko: MSB je nulován. Posuv je opakován tolikrát kolik činí hodnota druhého operandu instrukci posuvu. Tímto operandem může být jak přímy operand tak i registr CL. Mikroprocesory 80286/80386 nepovolují posuny delší než 31. Je-li přesto požadován posuv delší než 31 bitů je uvažováno jen dolních pět bitů operandu specifikujíciho délku posunu. Příznak OF je nastaven do 1 jen při posunu o 1 bit. Pro posun doleva je nulován v případe že bit MSB výsledku je stéjný jako výsledný CF. Jinak je OF nastaven na 1. U instrukce SAR je při posuvu o 1 bit OF nastaven do 0. Instrukce SHR nastavuje příznak OF na hodnotu stejnou s hodnotou MSB původního operandu (t.j. před provedením posuvu).


Syntaxe
SAL destination, count
SAL destination, 1
SAL destination, CL


SHL destination, count
SHL destination, 1
SHL destination, CL


Ovlivňuje příznaky
OF (jen při posuvu o 1 bit), CF, AF, OF, PF a SF.


Nedefinované příznaky
AF


Výjimky v privilegovaném módu
Jestliže registry CS, DS nebo ES obsahuji neplatné efektívni adresy operandu je generována všeobecná výjimka porušení ochrany paměti. Jestliže SS obsahuje neplatnou adresu je generována výjimka "chyba zásobníku". Jestliže je místo určení v segmentu nepřístupnem zápisu je generována všeobecná výjimka porušení ochrany paměti.


Výjimky v reálnem módu
Jestliže je slovní operand na offsetu 0xFFFFH je generováno přerušení INT 13.
Poznámka pro 80386
Šírka slova je 32 bitů.


Příklad
SHL MEMORY_BTE, 1
SHL AX, CL
SHL TABLE[BX][DI], CL
SAR BL, 1
SAR MEMORY_BTE, REP_VAL
SAR DH, CL
SAR CX, 1
SAR MEMORY_BTE, 1
SAR AX, CL