Пиши Дома Нужные Работы

Обратная связь

Использование логических и арифметических команд сдвига.

1. Команды логического сдвига CHR и CHL используются для выполнения быстрого умножение и деление целых чисел на степени двойки (2 k).

Сдвиг двоичного числа на k разрядов влево – это приписывание справа k двоичных нулей, т. е. умножение на 2 k. Например, чтобы умножить число 5 на 8 достаточно "сдвинуть" число 5 на три разряда влево (8 = 2 3):

5 = 0000 0101b ----> 0010 1000b = 40 = 5*2 3

Это же верно и для отрицательных чисел, представленных в дополнительном коде. Например, при сдвиге числа -4 на 1 разряд влево получаем:

доп (-4) = 11111100b –> 11111000b = 100h-8 = доп (-8)

В общем случае умножение на 2 k реализуется так:

MOV CL, k

SHL dst, CL

При этом надо учитывать, что все это верно, только если результат сдвига умещается в ячейку. Например, путем сдвига можно реализовать умножение на 2 всех беззнаковых чисел, меньших 128, и всех знаковых чисел от - 64 до + 63.

Сдвиг на k разрядов вправо – это отбрасывание последних k разрядов, что соответствует получению неполного частного (операции div) от деления на 2 k. Например, чтобы разделить число 18 на 8 достаточно "сдвинуть" число 18 на три разряда вправо (8 = 2 3):

18 = 0001 0010b –> 0000 0010b = 2 = 18 div 2 3

Однако так можно реализовать операцию деления нацело только для беззнаковых чисел, для отрицательных чисел это не проходит. Поэтому имеем:

MOV CL, k

SHR dst, CL

2. Команда SAR может быть использована для быстрого получения неполного частного при делении знаковых чисел на степени 2. Однако эта операция отличается от той, что реализуется командой IDIV: команда IDIV округляет частное в сторону 0, а SAR округляет в сторону минус бесконечности. Например, при делении -1 на 2 (т. е. при частном -0.5) команда IDIV выдаст ответ 0, а команда SAR - ответ -1:



MOV AL, -1; AL=1111 1111b

SAR AL, 1; AL=1111 1111b (-1)

3. Команды циклического сдвига обычно используются для перестановки частей содержимого ячейки или регистра. Например, поменять местами правую и левую половины регистра AL можно циклическим сдвигом этого байта на 4 разряда влево (или вправо):

MOV AL,17h; AL=00010111b

MOV CL, 4

ROL AL, CL; AL = 01110001b = 71h

4. Команды циклического сдвига через перенос RCL и RCR обычно используются при переносе битов из одного регистра (или переменной) в другой. Например, сдвинуть на 3 разряда влево значения регистров AL и DH, приписав справа к AL три левых бита регистра DH, можно так:

MOV СХ, 3

L: SHL DH, 1

RCL AL, 1

LOOP L

Задания для индивидуальной работы.

1.Программно реализуете примеры, показанные в теоретической части. С помощью отладчика Debuger проанализируйте, как работает логические команды языка Ассемблера.

2.Напишите фрагменты программы, реализующие следующие действия.

a). Установите разряды 10 и 13 аккумулятора.

b). Инвертируете разряд 2 и 15 аккумулятора.

c). Очистите разряд 3 аккумулятора.

d). Инвертируете разряд 2 аккумулятора.

e). Установите разряды 2 и 10 регистра BX.

f). Очистите разряды 1 и 5 в ячейке памяти ADDR_8

g). Циклически сдвинуть содержимое аккумулятора на 3 позиции вправо/влево без флага переноса.

h). Логически сдвинуть содержимое аккумулятора вправо/влево на 5 позиции.

i). Логически сдвинуть содержимое регистра DX вправо/влево на 4 позиции.

j). Сдвинуть содержимое ячейки памяти ADDR вправо/влево на одну позицию, сохранив знаковый разряд.

3.Напишите фрагменты программы, реализующие следующие действия.

a). Напишите команду сдвига, с помощью которой можно умножить содержимое регистра AX на 16.

b). Напишите команду сдвига, с помощью которой можно разделить содержимое регистра BX на 4.

c). Напишите последовательность команд с использованием команды сдвига, с помощью которых можно умножить содержимое регистра AL на 12.

d). Напишите последовательность команд, производящих сдвиг регистра AX и BX, в результате которого младший бит регистра AX переместится в старший бит BX.

4.Напишите фрагменты программы, реализующие следующие действия:

a). Дан массив из 10 байт. Посчитать количество байт, в которых сброшены 6 и 4 биты.

b). Рассматривая массив из 8 байт, как массив из 64 бит, посчитать количество единиц.

c). Дан массив из 10 байт. Посчитать количество байт с числом единиц в байте равным три.

d). Дан массив из 8 байт. Рассматривая его, как массив из 64 бит посчитать длину самой длинной последовательности единиц.

Контрольные вопросы и задания.

1.Регистр BL содержит 1110 0011b и переменная boono содержит 0111 1001. Определите содержимое регистра BL после выполнения следующих команд:

XOR BL, boono

AND BL, boono

OR BL, boono

XOR BL, 1111 1111b

AND BL, 0000 0000b

2.Регистр DX содержит 1011 1001 1011 1001b, а регистр CL - 03. Определите содержимое регистра DX после выполнения следующих несвязанных команд:

SHR DX, 1

SHR DX, CL

SHL DX, CL

SHL DL, 1

ROR DX, CL

ROR DL, CL

SAL DH, 1

3.Как можно использовать команду сдвига для проверки, установлен ли определенный, например, третий, бит в регистре DL?

4.Какая команда передвигает каждый бит операнда влево и копирует старший бит во флаг переноса и в позицию младшего бита?

5.Какая команда передвигает каждый бит вправо и копирует младший бит во флаг переноса, а флаг переноса копирует в позицию старшего бита?

6.Какая команда сдвигает каждый бит вправо и дублирует бит знака?

7.Какая команда передвигает каждый бит влево и копирует флаг переноса в позицию младшего бита и копирует старший бит во флаг переноса?

8.Что случится с содержимым флага переноса после выполнения команды SHR?

9.Пусть в AL содержит значение EFh, а в CL – 2, флаг переноса сброшен. Какое значение будет а регистре AL после выполнения каждой из следующих команд?

SHL AL, 1

SHL AL, CL

SHR AL, 1

SAR AL, 1

ROL AL, 1

ROL AL, CL

ROR AL, 1

RCL AL, 1

RCR AL, 1

RCR AL, CL

10.Как с помощью одной команды циклического сдвига поменять местами старшую и младшую половинки регистра DL?

11.Как с помощью одной команды переместить старший бит регистра DL в младший бит регистра DH?

12.В чем отличие команд test и and?

13.Как сбросить 5-й бит переменной байта ВВ?

14.Как установить 5-й бит переменной байта ВВ?

15.Как инвертировать 5-й бит переменной байта ВВ?

16.Как проверить установлен ли 5-й бит переменной байта ВВ?

17.Как проверить четным или нечетным является количество уста­нов­лен­ных бит в байте?

18.Какие флаги условий модифицируются после выполнения команд and, or, xor ?

19.В чем основное отличие команд логических и арифметических сдвигов?

20.Укажите максимальное число двоичных разрядов, на которые можно сдвинуть операнд с помощью одной команды сдвига?


Рекомендуемая литература

Основная литература.

1. Абель П. Язык Ассемблера для IBM PC и программирования: пер. с англ. / П. Абель. - М: Высш. шк., 1992. - 447 с.

2. Ирвин К. Язык ассемблера для процессоров Intel: пер. с
англ. / К. Ирвин. -М.: Вильяме, 2002. – 616 с.

3. Скляров В.А. Программирование на языке Ассемблера: учеб. пособие
/ В.А. Скляров. - М.: Высш. шк., 1999. - 152 с.

4. Юров В. Assembler: практикум (+дискета) / В. Юров. – СПб.: Питер Ком., 2002. - 400 с.

5. Юров В. Assembler: учеб. курс / В. Юров, С. Хорошенко. – СПб.: Питер Ком., 1999. - 672 с.

Дополнительная литература.

6. Джордейн Р. Справочник программиста персональных компьютеров
типа IBM PC, XT и AT: пер. с англ. / Р. Джордейн. -М.: Финансы и статистика,
1992. - 544 с.

7. Зубков СВ. Assembler для DOS, Windows и Unix / С.В. Зуев. – 2-е изд., испр. и доп. - М.: ДМК, 2000. - 608 с.

8. Пильщиков В.Н. Программирование на языке ассемблера IBM PC /
В.Н. Пильщиков. – М.: Диалог-МИФИ, 1996. - 288 с.

9. Пятибратов А.П. Вычислительные системы, сети и телекоммуникации / Пятибратов А.П. [и др.]. - М.: Финансы и статистика, 1998. - 400 с.

10. Сван Т. Освоение Turbo Assembler: пер. с англ. / Т. Сван. - 2-е изд. –Киев; М.; СПб.: Диалектика, 1996. - 544 с.

11. Финогенов К.Г. Самоучитель по системным функциям MS-DOS /
К.Г. Финогенов. - 2-е изд., испр. и дополн. - М.: Радио и связь: Энитрон, 1995. - 382 с.






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.