logo

Главная Система команд x86 Базовая система команд CPU RCL

Система команд x86

Программирование - Архитектура и система команд микропроцессоров 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

RCL

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

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

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

 

Описание:

Команды циклического сдвига вращают биты регистра или операнда в памяти.

Команды циклического сдвига влево сдвигают все биты вверх (к старшему), за исключением старшего бита, который возвращается вниз. Команды циклического сдвига вправо делают обратное: биты сдвигаются вниз (к младшему), а младший бит переносится в вершину. Для команд 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 не маскирует счетчик вращений. (Процессоры Intel186 и старше во всех режимах, в том числе и в режиме V86 маскируют счетчик вращений.)

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

Операция:

(* 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;

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

#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




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

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

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