Добавил:
vanya.tagaschev@ya.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
6
Добавлен:
21.03.2021
Размер:
30.35 Кб
Скачать

МИНИСТЕРСТВО ВЫСШЕГО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное бюджетное образовательное учреждение высшего образования

УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет информационных систем и технологий

Кафедра «Измерительно-вычислительные комплексы»

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

По дисциплине «Организация ЭВМ и систем»

Тема: «Операции сдвига данных. Обработка данных в форматах ASCII и BCD. Команды передачи управления»

Выполнила:

ст. гр. ИСТбд-22 Довледмурадова Акджагул

Проверил:

к.т.н., доцент ИВК Тамьяров А.В.

Ульяновск, 2021 г.

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

Тема: «Операции сдвига данных. Обработка данных в форматах ASCII и BCD. Команды передачи управления»

Цель работы: Освоение принципов работы с битовой информацией и форматом представления данных. Приобретение навыков организации подпрограмм и безусловных переходов.

Ход работы:

1. Сдвиги и циклические сдвиги

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

Инструкция SHL (сдвиг влево, синоним - SAL) перемещает каждый бит операнда-приемника на один разряд влево, по направлению к самому значащему биту. На Рис. 1 показано, как значение 10010110b (96h или 150 в десятичном представлении), записанное в AL, сдвигается влево с помощью инструкции SHL AL,1. В результате получается значение 00101100b (2Ch или 44 в десятичном виде), которое записывается обратно в регистр AL. Флаг переноса устанавливается в значение 1.

AL

Происходит смещение всех битов влево по следующей схеме.

10010110

В этой операции участвует флаг переноса.

Рис. 1 Пример выполнения сдвига влево.

Самый значащий (старший) бит вовсе сдвигается из операнда и попадает во флаг переноса, а в наименее значащий бит заносится 0.

Для чего используется сдвиг влево? Чаще всего это делается для выполнения с помощью операции SHL умножения на степень числа 2, так как каждая инструкция SBL умножает операнд на 2. Например, с помощью следующих инструкций DX умножается на 16:

shl dx,1 ; DX * 2

shl dx,1 ; DX * 4

shl dx,1 ; DX * 8

shl dx,1 ; DX * 16

Умножение с помощью сдвига выполняется гораздо быстрее, чем с помощью операции MUL.

Как можно было заметить, в предыдущем примере в инструкции SHL используется второй операнд - значение 1. Этот операнд указывает, что содержимое DX нужно сдвинуть на 1 бит. К сожалению, процессор не поддерживает использования в качестве константы

сдвига других, отличных от 1 постоянных значений - 2, 3 и т.д. Однако, в качестве счетчика сдвигов допускается использование регистра CL. Например, инструкции:

mov cl, 4

shl dx,cl

умножают содержимое регистра DX на 16 (как и в предыдущем примере),

Если есть сдвиг влево, то логично было бы предположить, что существует также сдвиг вправо, и это так. Фактически, имеется даже две операции сдвига вправо. Инструкция SHR (сдвиг вправо) очень похожа на инструкцию SHL. Она выполняет сдвиг разрядов операнда вправо на 1 или CL бит, затем сдвигает наименее значащий бит во флаг переноса и помещает 0 в самый значащий бит. Инструкция SHR дает быстрый способ выполнения беззнакового деления на степень числа 2.

Инструкция SAR (арифметический сдвиг вправо) аналогична инструкции SHR, только при ее выполнении наиболее значащий бит операнда сдвигается вправо в следующий бит, а затем копируется обратно. На Рис. 2 показано, как значение 10010110b (96h или -106 в десятичном представлении со знаком), записанное в регистре AL, сдвигается вправо с помощью инструкции SAR AL,1. В результате получается значение 11001011b (CBh или - 53 в десятичном представлении со знаком), которое записывается обратно в регистр AL. Флаг переноса устанавливается в значение 0.

AL

10010110

В этой операции участвует флаг переноса.

Рис. 2 Пример выполнения инструкции SAR (арифметический сдвиг вправо)

Таким образом, при выполнении данной инструкции сохраняется знак операнда, поэтому инструкцию SAR полезно использовать для выполнения деления со знаком на степень числа 2. Например, в результате выполнения инструкций:

mov bx,- 4

sar bx,l

в регистре ВХ после выполнения команд получится значение - 2.

В наборе инструкций процессора имеется также четыре инструкции циклического сдвига: ROR, ROL, RCR и RCL. Инструкция ROR аналогична инструкции SHR, но при ее выполнении наименее значащий бит сдвигается в наиболее значащий бит, а также во флаг переноса. На Рис. 3 показано, как значение 10010110b (96h или 150 в десятичном представлении), записанное в регистре AL, циклически сдвигается вправо с помощью инструкции ROR AL,1. В результате получается значение 01001011b (4Bh или 75 в десятичном представлении), которое записывается обратно в регистр AL. Флаг переноса устанавливается в значение 0.

AL

10010110

└--------------------------------┘

В этой операции участвует флаг переноса.

Рис. З Пример выполнения операции ROR (циклический сдвиг)

Операция ROL имеет действие, обратное действию операции ROR. Операнд также сдвигается циклически, но сдвиг выполняется влево.

При этом наиболее значащий бит сдвигается в наименее значащий.

Инструкции ROR и ROL полезно использовать для переупорядочивания бит в байте или в слове. Например, в результате выполнения инструкций:

mov si,49Flh

mov cl,4

ror si,cl

в регистр SI будет записано значение 149Fh: биты 3-0 переместятся в биты 15-12, биты 7-4 - в биты 3-0 и т.д.

Инструкции RCR и RCL работают несколько по-другому. Инструкция RCR аналогично инструкции сдвига вправо, при этом наиболее значащий бит сдвигается из флага переноса. На Рис. 4 показано, как значение 10010110b (96h или 150 в десятичном представлении), записанное в регистре AL, циклически сдвигается вправо через флаг переноса, начальное значение, которого равно 1, с помощью инструкции RCR AL,1, в результате получается значение 11001011b (CBh или 203 в десятичном представлении), которое записывается обратно в регистр AL. Флаг переноса устанавливается в значение 0.

AL

10010110

└--------------------------------┘

Флаг переноса

1

Рис. 4 Пример выполнения инструкции RCR (циклический сдвиг вправо и перенос).

Инструкция RCL аналогично, соответственно, левому сдвигу. При выполнении этой инструкции наименее значащий бит сдвигается из флага переноса. Инструкции RCR и RCL полезно использовать для сдвига операнда, состоящего из нескольких слов. Например, следующие инструкции выполняют умножение значения в DX:AX, размером в двойное слово, на 4:

shl ах,1 ; бит 15 регистра АХ сдвигается во флаг переноса

rcl dx,l ; флаг переноса сдвигается в бит 0 регистра DX

shl ax,l ; бит 15 регистра АХ сдвигается во флаг переноса

rcl dx,l ; флаг переноса сдвигается в бит 0 регистра DX.

Инструкции циклического сдвига, аналогично инструкциям сдвига, могут сдвигать операнд на 1 бит или на число бит, заданных регистром CL.

Соседние файлы в папке Тамьяров А. В.