Otevřít hlavní menu

Změny

SAL/SAR/SHL/SHR - skupina instrukci posunu

Přidáno 2 385 bajtů, 11. 1. 2013, 19:12
bez shrnutí editace
;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

[[Category:Assembler]]
[[Category:Instrukce mikroprocesoru 80386]]