logo

Понедельник 05 Декабрь 2016 (GMT+0300)

Система команд x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

RCR

Циклический сдвиг вправо через перенос

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

*

 

 

 

 

 

 

 

*

 

Код

Команда

Описание

Процессор

Пример

D0 /2

RCL r/m8,1

Сдвинуть по кругу влево на 1 бит 9 бит (CF, r/m8)

8086

rcl ah,1

D2 /2

RCL r/m8,CL

Сдвинуть по кругу влево на CL бит 9 бит (CF, r/m8)

8086

rcl dh,cl

C0 /2 ib

RCL r/m8,imm8

Сдвинуть по кругу влево на imm8 бит 9 бит (CF, r/m8)

Intel286

rcl al,4

D1 /2

RCL r/m16,1

Сдвинуть по кругу влево на 1 бит 17 бит (CF, r/m16)

8086

rcl bx,1

D3 /2

RCL r/m16,CL

Сдвинуть по кругу влево на CL бит 17 бит (CF, r/m16)

8086

rcl di,cl

C1 /2 ib

RCL r/m16,imm8

Сдвинуть по кругу влево на imm8 бит 17 бит (CF, r/m16)

Intel286

rcl di,9

D1 /2

RCL r/m32,1

Сдвинуть по кругу влево на 1 бит 33 бита (CF, r/m32)

Intel386

rcl esi,1

D3 /2

RCL r/m32,CL

Сдвинуть по кругу влево на CL бит 33 бита (CF, r/m32)

Intel386

rcl ecx,12

C1 /2 ib

RCL r/m32,imm8

Сдвинуть по кругу влево на imm8 бит 33 бита (CF, r/m32)

Intel386

rcl edx,8

D0 /3

RCR r/m8,1

Сдвинуть по кругу вправо на 1 бит 9 бит (CF, r/m8)

8086

rcr bh,1

D2 /3

RCR r/m8,CL

Сдвинуть по кругу вправо на CL бит 9 бит (CF, r/m8)

8086

rcr bh,cl

C0 /3 ib

RCR r/m8,imm8

Сдвинуть по кругу вправо на imm8 бит 9 бит (CF, r/m8)

Intel286

rcr cl,4

D1 /3

RCR r/m16,1

Сдвинуть по кругу вправо на 1 бит 17 бит (CF, r/m16)

8086

rcr cx,1

D3 /3

RCR r/m16,CL

Сдвинуть по кругу вправо на CL бит 17 бит (CF, r/m16)

8086

rcr si,cl

C1 /3 ib

RCR r/m16,imm8

Сдвинуть по кругу вправо на imm8 бит 17 бит (CF, r/m16)

Intel286

rcr di,6

D1 /3

RCR r/m32,1

Сдвинуть по кругу вправо на 1 бит 33 бита (CF, r/m32)

Intel386

rcr edi,1

D3 /3

RCR r/m32,CL

Сдвинуть по кругу вправо на CL бит 33 бита (CF, r/m32)

Intel386

rcr ebx,12

C1 /3 ib

RCR r/m32,imm8

Сдвинуть по кругу вправо на imm8 бит 33 бита (CF, r/m32)

Intel386

rcr ebp,8

D0 /0

ROL r/m8,1

Сдвинуть по кругу влево на 1 бит 8 бит (r/m8)

8086

rol cl,1

D2 /0

ROL r/m8,CL

Сдвинуть по кругу влево на CL бит 8 бит (r/m8)

8086

rol dh,cl

C0 /0 ib

ROL r/m8,imm8

Сдвинуть по кругу влево на imm8 бит 8 бит (r/m8)

Intel286

rol ch,3

D1 /0

ROL r/m16,1

Сдвинуть по кругу влево на 1 бит 16 бит (r/m16)

8086

rol bp,1

D3 /0

ROL r/m16,CL

Сдвинуть по кругу влево на CL бит 16 бит (r/m16)

8086

rol ax,cl

C1 /0 ib

ROL r/m16,imm8

Сдвинуть по кругу влево на imm8 бит 16 бит (r/m16)

Intel286

rol cx,7

D1 /0

ROL r/m32,1

Сдвинуть по кругу влево на 1 бит 32 бита (r/m32)

Intel386

rol ebx,1

D3 /0

ROL r/m32,CL

Сдвинуть по кругу влево на CL бит 32 бита (r/m32)

Intel386

rol edx,11

C1 /0 ib

ROL r/m32,imm8

Сдвинуть по кругу влево на imm8 бит 32 бита (r/m32)

Intel386

rol eax,9

D0 /1

ROR r/m8,1

Сдвинуть по кругу вправо на 1 бит 8 бит (r/m8)

8086

ror bl,1

D2 /1

ROR r/m8,CL

Сдвинуть по кругу вправо на CL бит 8 бит (r/m8)

8086

ror byte ptr [bx],cl

C0 /1 ib

ROR r/m8,imm8

Сдвинуть по кругу вправо на imm8 бит 8 бит (r/m8)

Intel286

ror al,4

D1 /1

ROR r/m16,1

Сдвинуть по кругу вправо на 1 бит 16 бит (r/m16)

8086

ror di,1

D3 /1

ROR r/m16,CL

Сдвинуть по кругу вправо на CL бит 16 бит (r/m16)

8086

ror dx,cl

C1 /1 ib

ROR r/m16,imm8

Сдвинуть по кругу вправо на imm8 бит 16 бит (r/m16)

Intel286

ror bx,3

D1 /1

ROR r/m32,1

Сдвинуть по кругу вправо на 1 бит 32 бита (r/m32)

Intel386

ror ecx,1

D3 /1

ROR r/m32,CL

Сдвинуть по кругу вправо на CL бит 32 бита (r/m32)

Intel386

ror eax,20

C1 /1 ib

ROR r/m32,imm8

Сдвинуть по кругу вправо на imm8 бит 32 бита (r/m32)

Intel386

ror ebp,6

 

Операция:

(* ROL - Циклический сдвиг влево *)

temp = COUNT;

WHILE (temp ¹ 0)

DO

  tmpcf = (Старший бит r/m);

  r/m = r/m * 2 + (tmpcf);

  temp = temp - 1;

OD;

IF COUNT = 1

THEN

  IF (Старший бит r/m) ¹ CF

     THEN OF = 1;

     ELSE OF = 0;

  FI;

ELSE (OF неопределен);

FI;

(* ROR – Сдвигать вправо *)

temp = COUNT;

WHILE (temp ¹ 0)

DO

  tmpcf = (Младший бит r/m);

  r/m = r/m / 2 + (tmpcf*2width(r/m));

  temp = temp - 1;

OD;

IF COUNT = 1

THEN

  IF (Старший бит r/m) ¹ (Бит, следующий за старшим битом r/m)

     THEN OF = 1;

     ELSE OF = 0;

  FI;

ELSE (OF неопределен);

FI;

Описание:

Команды циклического сдвига вращают биты регистра или операнда в памяти. Команды циклического сдвига влево сдвигают все биты вверх (к старшему), за исключением старшего бита, который возвращается вниз. Команды циклического сдвига вправо делают обратное: биты сдвигаются вниз (к младшему), а младший бит переносится в вершину. Для команд RCL и RCR флаг CF является частью вращаемого множества. Команда RCL сдвигает флаг CF в младший бит, а старший бит сдвигает во флаг CF. Команда RCR сдвигает флаг CF в старший бит, а младший бит сдвигает во флаг CF. Для команд ROL и ROR исходное значение флага CF не является частью результата, но флаг CF получает копию бита, который был сдвинут из одного конца в другой.  Рисунки 6.6., 6.9. поясняют сказанное. 

 

 Рис. 6.6. Команда ROL

 

 Рис. 6.7. Команда RCL

 

 Рис. 6.8. Команда ROR

 

 Рис. 6.9. Команда RCR

Команда вращения повторяется столько раз, сколько указано вторым операндом, который может быть либо непосредственным числом, либо содержимым регистра CL. Чтобы уменьшить максимальное время выполнения команды процессор не позволяет счетчику вращений быть больше 31. Если счетчик вращений больше 31, используются только младшие 5 бит. Процессор 8086/8088 не маскирует счетчик вращений. (Процессоры Intel286, … во всех режимах, в том числе и в режиме V86 маскируют счетчик вращений.)

Флаг OF определен только для форм команд однократного вращения (вторым операндом является 1). Он неопределен во всех остальных случаях. Для циклических сдвигов влево бит CF после сдвига складывается по модулю два (XOR) со старшим битом результата, полученное значение заносится во флаг OF. Для циклических сдвигов вправо старшие два бита результата складываются по модулю два (XOR), полученное значение заносится во флаг OF.

Особые ситуации защищенного режима:

#GP(0), если операнд-назначение находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.

Особые ситуации режима V86:

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.


Входит в группу команд: Базовая система команд CPU



Все права защищены © 1997-2011 Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Яндекс.Метрика               Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники