ВУЗ:
Составители:
Рубрика:
Дело в том, что МП 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
Страницы
- « первая
- ‹ предыдущая
- …
- 35
- 36
- 37
- 38
- 39
- …
- следующая ›
- последняя »