Otevřít hlavní menu

Změny

RCL/RCR/ROL/ROR - instrukce rotací

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

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