SAL/SAR/SHL/SHR - skupina instrukci posunu
- 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
- 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