RCL/RCR/ROL/ROR - instrukce rotací

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání
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


Ovlivňuje příznaky
OF (jen pro rotaci o 1 bit), CF


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