Архитектура микропроцессорной системы. Состав машинных команд и основы программирования микропроцессорной системы на ассемблере. Булатов В.Н. - 37 стр.

UptoLike

Составители: 

Дело в том, что МП 8086 может выполнить сдвиг на один разряд
или сразу на несколько. Это определяет разряд D9 в КОП. Рассмотрим
случаи для различных значений V.
а) V=0; сдвиг на 1 разряд (i=1). Обязательная форма ассемблера
(примеры):
1) ROL BX,1; (содержимое BX сдвинуть циклически влево на
1 разряд);
2)SHL BYTE [1CD0],1 (содержимое ячейки ОЗУ с адресом
1CD0 сдвинуть арифметически влево на 1 разряд);
б) V=1; сдвиг на число разрядов, где число по умолчанию берется
из регистра CL (i=CL). Обязательная форма ассемблера (примеры):
1) RСL AX,CL; (Содержимое AX сдвинуть циклически влево
на число разрядов, где число сдвигов n=<CL>;
2) SHL WORD [1CD0],CL (содержимое слова, хранящегося в
ячейках памяти M1CD1, M1CD0 , сдвинуть арифметически влево на
число разрядов, где число сдвигов n=<CL>.
Сформулируем краткие характеристики к схемам (таблица 4)
выполнения команд сдвига, учитывая, что указанные схемы практически
полностью отражают действия команд.
Команды 3-й и 4-й строчки отличаются от 1-й и 2-й тем, что в
команде циклического сдвига появляется дополнительный разряд : CF.
Это свойство позволяет, в случае необходимости, спрятать один бит
слова в CF, произвести нужные операции над оставшейся частью слова
и вернуть обратным сдвигом спрятанный бит в CF на место.
В частности, это можно использовать при преобразовании
отрицательного числа из прямого кода в дополнительный и наоборот.
Нижние четыре строчки таблицы касаются арифметических
сдвигов. Причем, тип команды: 110
2
формальный, а результаты ее
выполнения бессмысленны. А вот нижняя команда используется
достаточно часто.
Из схемы следует, что тип 111
2
отличается от типа 101
2
тем, что
вместо нулей при арифметическом сдвиге вправо освобождающиеся
разряды заполняются содержимым старшего бита. А учитывая, что в
старшем бите у чисел со знаком находится знак (вспомним, что «+» = 0,
«-» = 1), то этот тип сдвига, сохраняя знак, сдвигает само число вправо.
При этом, если число положительное, то освобождающиеся разряды
заполняются нулями (после знака). А если отрицательное число, то
единицами. При преобразовании числа в прямой код эти единицы
превращаются в нули.
Пример 3 Пусть в регистре XD находятся данные OFFE.
Сдвинуть арифметически это число влево на 3 разряда.
Ответ: Составляем программу в ассемблере:
MOV CL, 03; Задаем в CL число сдвигов
SHL DX, CL; и сдвигаем <DX> влево.
37
      Дело в том, что МП 8086 может выполнить сдвиг на один разряд
или сразу на несколько. Это определяет разряд D9 в КОП. Рассмотрим
случаи для различных значений V.
      а) V=0; сдвиг на 1 разряд (i=1). Обязательная форма ассемблера
(примеры):
            1) ROL BX,1; (содержимое BX сдвинуть циклически влево на
      1 разряд);
            2)SHL BYTE [1CD0],1 (содержимое ячейки ОЗУ с адресом
      1CD0 сдвинуть арифметически влево на 1 разряд);
      б) V=1; сдвиг на число разрядов, где число по умолчанию берется
из регистра CL (i=CL). Обязательная форма ассемблера (примеры):
            1) RСL AX,CL; (Содержимое AX сдвинуть циклически влево
      на число разрядов, где число сдвигов n=;
            2) SHL WORD [1CD0],CL (содержимое слова, хранящегося в
      ячейках памяти M1CD1, M1CD0 , сдвинуть арифметически влево на
      число разрядов, где число сдвигов n=.
      Сформулируем краткие характеристики к схемам (таблица 4)
выполнения команд сдвига, учитывая, что указанные схемы практически
полностью отражают действия команд.
      Команды 3-й и 4-й строчки отличаются от 1-й и 2-й тем, что в
команде циклического сдвига появляется дополнительный разряд : CF.
Это свойство позволяет, в случае необходимости, спрятать один бит
слова в CF, произвести нужные операции над оставшейся частью слова
и вернуть обратным сдвигом спрятанный бит в CF на место.
      В частности, это можно использовать при преобразовании
отрицательного числа из прямого кода в дополнительный и наоборот.
      Нижние четыре строчки таблицы касаются арифметических
сдвигов. Причем, тип команды: 1102 — формальный, а результаты ее
выполнения — бессмысленны. А вот нижняя команда используется
достаточно часто.
      Из схемы следует, что тип 1112 отличается от типа 1012 тем, что
вместо нулей при арифметическом сдвиге вправо освобождающиеся
разряды заполняются содержимым старшего бита. А учитывая, что в
старшем бите у чисел со знаком находится знак (вспомним, что «+» = 0,
«-» = 1), то этот тип сдвига, сохраняя знак, сдвигает само число вправо.
При этом, если число положительное, то освобождающиеся разряды
заполняются нулями (после знака). А если отрицательное число, то —
единицами. При преобразовании числа в прямой код эти единицы
превращаются в нули.
      Пример 3 — Пусть в регистре XD находятся данные OFFE.
Сдвинуть арифметически это число влево на 3 разряда.
      Ответ: Составляем программу в ассемблере:
      MOV CL, 03; Задаем в CL число сдвигов
       SHL DX, CL; и сдвигаем  влево.
                                                                      37