Команды циклического сдвига

Команды циклического сдвига похожи на команды сдвига, но в отличие от последних сохраняют сдвинутые за пределы операнда биты, помещая их обратно в операнд. Как и при исполнении команд сдвига, сдвинутый за преде­лы операнда бит запоминается во флаге переноса CF.

При исполнении команды ROL (rotate left - сдвинуть влево циклически) и ROR (rotate right - сдвинуть вправо циклически) вышедший за пределы операнда бит входит в него с противоположного конца. При исполнении команд RCL (rotate left through carry - сдвинуть влево циклически вместе с флагом переноса) и RCR (rotate right through carry - сдвинуть вправо циклически вместе с флагом перено­са) в противоположный конец операнда помещается значение флага переноса CF. Все команды циклического сдвига воздействуют только на флаги CF и OF.

Чтобы познакомиться с работой команд циклического сдвига, вернемся к исходным данным предыдущего примера:

AL = 10110100 CF = 1

Команды циклического сдвига воздействуют на регистр AL и флаг CF следующим образом:

После ROL AL,1:

AL = 01101001 CF = 1

После ROR AL,1:

AL = 01011010 CF = 0

После RCL AL,1:

AL = 01101001 CF = 1

После RCR AL,1:

AL = 11011010 CF = 0

Индивидуальное задание.

Каждому студенту выдается 4-хзначный вариант. Согласно этому варианту вычислить следующее выражение и определить, четное полученное число или нечетное и отрицательное оно или положительное:

 

F = Y оп1 КОН1 оп2 Х оп3 КОН2

КОН1, КОН2 – числовые константы, согласно табл. 1

оп1, оп2, оп3 – операции сложения, вычитания, умножения и деления согласно табл. 2

X, Y – переменные, тип которых определяется согласно табл. 3

Операции умножения и деления выполнять с помощью операций сдвига. Проверка на четность либо нечетность и знак (если числа со знаком) числа осуществлять с помощью логических побитовых команд.

Числовые константы из табл. 1 берутся согласно первой цифре варианта, операции сложения и вычитания из табл. 2 – согласно второй цифре варианта, а размер и тип переменных – из табл. 3 согласно третьей цифре варианта.

Если размер результат будет более 16 бит – результат преобразовывать в 16-битный.

 

Таблица 1.

 

Первая цифра варианта

0 1 2 3 4 5 6 7 8 9
  КОН1   10   96   20   12   130   24   64   32   6   40
  КОН2     32   16   8   4   128   64   36   22   14   72

 

Таблица 2.

 

Вторая цифра варианта

0 1 2 3 4 5 6 7 8 9
  оп1     /   /   *     *   /   *   —   +   /   *
  оп2     –   +   –     +   %   %   *   *   +   +
  оп3     *   *   /     /   *   /   /   /   –   –

 

Таблица 3.

 

Третья цифра варианта

0 1 2 3 4 5 6 7 8 9
  X   char un char int un int int un char int char char un int
  Y   int un int char un char int un int int int char un char

Примечания: – char – 8 битн. со знаком

– un. char – 8 битн. без знака

– int – 16 битн. со знаком

– un. int – 16 битн. без знака

 

Пример. У студента индивидуальный вариант 990. Строим индивидуальное выражение для вычисления: F = Y * 40 + X — 72

Согласно варианту переменные X и Y должны быть описаны следующим образом

char x;

int y;

Программа выглядит следующим образом:

;y*40=y*32+y*8;

; адрес у = 300, адрес x= 400

; Первоначально исходные данные заносятся на стартовые адреса памяти

mov ax,[y]

mov bx,ax

mov cl,3

shl ax,cl ;y*8

mov cl,5

shl bx,cl ; y*32

add bx,ax

mov al,[x]

cbw ;преобразуем 8-битное x в 16 битное

add bx,ax ;y*40+x

sub bx,72 ;y*40+x-72

mov f,bx

; проверяем на четность

mov iChet,bx

and iChet,0001h

; проверяем на знак

mov iSign,bx

and iSign,8000h

 

 

; результаты сохраняем с адесов Y=500, X=600 четность, 506 и 606 – знаковость

 

Содержание отчета :

1. Название работы

2. Цель работы

3. Приборы и оборудование

4. Краткие теоретические сведения

5. Индивидуальное задание

6. Распечатанный текст программы

7. Выводы.

 

Вопросы к защите лабораторной работы.

1. Логические команды: формат и правила применения

2. Команды сдвига: формат и правила применения.

3. Команды циклического сдвига: формат и правила применения.

 

Лабораторная работа №6