RCL/RCR/ROL/ROR - instrukce rotací
Verze z 11. 1. 2013, 17:35, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
- Instrukce
- RCL/RCR/ROL/ROR - instrukce rotací
- Časování
- 2-5 (80286), 3-10 (80386)
- Popis
- Každá z uvedených instrukcí rotaci posouva specifické bity registrového nebo paměťového operandu. Instrukce ROL posunuje (rotuje) všechny bity operandu doleva o 1 bit, pričemž bit MSB (nejvyššší) se přesouva na místo LSB (nejnižší). Instrukce ROR provádí posuv (rotaci) přesne opačne - všechny bity se posunou o 1 místo doprava a na místo MSB se přesune bit LSB. Instrukce RCL a RCR užívají hodnotu příznaku CF jako část přesouvané veličiny. Instrukce RCL přesouva CF do LSB a MSB do CF. Instrukce RCR provádí přesne opačný přesun: CF do MSB a LSB do CF. Druhý operand instrukci rotací specifikuje počet pozic o které se má zdrojový operand posunout. Příznak přetečení OF je nastaven jen v případe že u instrukci rotací je druhý operand roveň 1. U RCR je test na přetečení prováden před rotací pro RCL, ROL a ROR po rotaci. Příznak OF je nastavován v těchto situacích: pokud CF = MSB, nastav OF=0; pokud CF <> MSB nastav OF=1.
- Poznámka
- Obvod 80286/80386 neumožňuje provádět rotace o více než 31 bitů. Je použito jen nižších 5 bitů citace počtu rotaci i v případe že je snaha o provedení rotace o více než 31 bitů.
- Syntaxe
- RCL destination
- RCL destination, CL
- RCL destination, count
- RCR destination
- RCR destination, CL
- RCR destination, count
- ROL destination
- ROL destination, CL
- ROL destination, count
- ROR destination
- ROR destination, CL
- ROR destination, count
- Nedefinované příznaky
- OF pro vícebitové rotace
- Výjimky v privilegovaném módu
- Jestliže registry CS, DS nebo ES obsahují neplatné efektívní 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řístupněm 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 0FFFFH je generováno přerušení INT 13.
- Poznámka pro 80386
- Šírka slova je 32 bitů.
- Příklad
RCL AH, 1 RCL MEMORY_BTE, REP_VAL RCL DH, CL
RCR BL, 1 RCR TABLE[BX][DI], CL
ROL CX, 1 ROL AX, CL
ROR BL, 1 ROR MEMORY_BTE, REP_VAL ROR TABLE[DX][DI], CL