Изучение системы команд Ассемблера. Логические команды и команды сдвига 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Изучение системы команд Ассемблера. Логические команды и команды сдвига



Практическое занятие № 14

«Изучение системы команд Ассемблера. Логические команды и команды сдвига»

 

Цель работы: изучить логические команды и команды сдвига данных.

 

Образовательные результаты, заявленные в ФГОС:

Студент должен уметь:

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

 

знать:

основные компоненты программного обеспечения компьютерных систем.

 

Логические команды служат для сброса или установки отдельных бит или байт в слове. Они включают операторы «не», «или», «и», «исключающее или» и операцию тестирования.

 

Таблица 14.1 – Логические команды

Название Мнемокод Действие
«Не» NOT op op←NOT(op)
Логическое «или» OR op1,op2 op1←(op1)U(op2)
Логическое «и» AND op1,op2 op1←(op1)&(op2)
«Исключающее или» XOR op1,op2 op1←(op1)XOR(op2)
Проверка битов TEST op1,op2 FLAGS←(op1)&(op2)

 

Инструкция NOT op инвертирует все биты байта или слова.

Команда OR op1,op2 выполняет поразрядное логическое «или» двух операндов и помещает результат на место первого операнда. Бит результата устанавливается в 1, если хотя бы один из двух соответствующих битов операндов равен 1, и устанавливается в 0 если нет.

Команда AND op1,op2 выполняет поразрядное логическое «и» двух операндов и помещает результат на место первого операнда. Бит результата устанавливается в 1, если установлены в 1 оба соответствующих ему бита операндов, и устанавливаются в 0 противном случае.

Команда XOR op1,op2 выполняет поразрядную операцию «исключающее или» двух операндов и помещает результат на место первого операнд. Бит результата устанавливается в 1, если соответствующие ему биты операндов имеют противоположные значения, и устанавливается в 0 в противном случае.

Инструкция TEST выполняет логическое «и» двух операндов (байтов или слов), модифицирует флаги SF, ZF и PF, но результат не возвращает, т.е. операнды не изменяются.

Команды сдвига данных

 

 

Таблица 14.2 – Команды сдвига данных

Название Мнемокод Действие
Сдвиг операнда влево SHL dst,CL
Сдвиг операнда вправо SHR dst,CL
Циклический сдвиг влево ROL dst,CL
Циклический сдвиг вправо ROR dst,CL
Циклический сдвиг влево через CF RCL dst,CL
Циклический сдвиг вправо через CF RCR dst,CL

 

Команда SHL dst,CL выполняет сдвиг битов влево на число разрядов, хранящееся в регистре CL. Освобождающиеся при сдвиге разряды заполняются нулями. При этом последний сдвигаемый бит сохраняется в флаге CF. Например, SHL 11111111b,3. После выполнения команды получим 11111000.

Команда SHR dst,CL работает аналогично, но сдвиг выполняется вправо. Например, SHR 11111111b,3. После выполнения команды получим 00011111.

Команда ROR dst,CL выполняет циклический сдвиг вправо на число разрядов, хранящееся в регистре CL. При этом младший сдвигаемый бит копируется в флаг CF.

 

Рисунок 14.1 – Изображение циклического сдвига вправо

 

Команда ROL dst,CL выполняет циклический сдвиг влево на число разрядов, хранящееся в регистре CL. При этом старший сдвигаемый бит копируется в флаг CF.

Команда RCL dst,CL выполняет циклический сдвиг влево через CF. Все разряды операнда циклически сдвигаются влево. Содержимое старшего разряда загружается в СF, а прежнее содержимое СF загружается в младший разряд результата.

Команда RCR dst,CL выполняет циклический сдвиг вправо через CF. Все разряды операнда циклически сдвигаются вправо. Содержимое младшего разряда загружается в СF, а прежнее содержимое СF загружается в старший разряд результата.

 

Примеры программ

Задача 1. Установить 3 и 0 биты в регистре AL, остальные не изменять.

OR AL, 00001001b

 

Задача 2. Сбросить 4 и 6 битвы в регистре AL, остальные биты не изменять.

AND AL, 10101111b

 

Задача 3. Инвертировать 2 и 4 биты в регистре AL, остальные биты не изменять.

XOR AL, 00010100b

 

Задача 4. Перейти на метку LAB, если установлен 4 бит регистра AL, в противном случае продолжить выполнение программы.

TEST AL, 00010000b

JNZ LAB

LAB:

 

Задача 5. Посчитать число единиц в регистре AL, рассматривая байт, как набор бит.

MOV CX, 8; число сдвигов

XOR BL, BL; обнуление BL

LL: SHL AL, 1; сдвиг влево на один разряд

JNC NO      ; переход, если нет переноса

INC BL       ; иначе увеличить BL

NO: LOOP LL ; возврат, если СХ не равно 0

 

Задания для практической работы

 

1 Составить таблицы «Логические команды» и «Команды сдвига данных» с указанием названия команды, ее мнемокода и выполняемого действия.

2 Определить содержимое регистра AL при выполнении команд (таблица 14.3).

3 Разработать программу на языке Ассемблер для выполнения задачи в соответствии с вариантом (таблица 14.4).

 

Таблица 14.3 – Таблица вариантов для задачи 2

Вариант

Задача

1 MOV AL,11111111b OR AL,00100100b MOV AL, 10100111b XOR AL, 10010101b
2 MOV AL,11111111b OR AL, 11000011b MOV AL, 10011111b AND AL, 11010110b
3 MOV AL,11111111b AND AL, 10100001b MOV AL, 11001001b XOR AL, 10011101b
4 MOV AL,11111111b OR AL, 11100010b MOV AL, 10110100b XOR AL, 10011101b
5 MOV AL,11111111b OR AL, 10001110b MOV AL, 10101011b AND AL, 11011101b
6 MOV AL,11111111b AND AL, 11011110b MOV AL, 00100111b XOR AL, 10011101b
7 MOV AL,11111111b OR AL, 00101011b MOV AL, 11001111b XOR AL, 11011010b
8 MOV AL,11111111b OR AL, 10111110b MOV AL, 01000010b AND AL, 01101000b
9 MOV AL,11111111b AND AL, 10101100b MOV AL, 11110101b XOR AL, 10011101b
10 MOV AL,11111111b OR AL, 11100111b MOV AL, 10010101b XOR AL, 11000010b

 

Таблица 14.4 – Таблица вариантов для задачи 3

Вариант Задача
1 Дан массив из 10 байт. Посчитать количество байт, в которых сброшены 6 и 4 биты.
2 Дан массив из 8 байт. Рассматривая его, как массив из 64 бит, посчитать количество единиц.
3 Дан массив из 10 байт. Посчитать количество байт с числом единиц в байте равным трем.
4 Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать в нем количество нулей.
5 Дан массив из 8 байт. Посчитать количество байт, в которых число нулей и единиц одинаковое.
6 Дан массив из 13 байт. Посчитать количество байт, содержащих только нули или единицы.
7 Дан массив из 6 байт. Посчитать количество байт, число нулей в которых не больше трех.
8 Дан массив из 7 байт. Посчитать количество байт, в которых разряды 7 и 0 установлены в единицу.
9 Дан массив из 20 байт. Посчитать количество байт, содержимое которых равно 10101010b.
10 Дан массив из 11 байт. Посчитать количество байт, в которых старшим разрядом является ноль, а младшим разрядом – единица.

 

Примечание: массив байтов размещается, начиная с адреса DS:0000h. Ответ должен быть записан в регистр DX.

Контрольные вопросы

 

1 Для чего служат логические команды?

2 Какие команды относятся к логическим и как они работают?

3 Как работают команды SHL dst,CL и SHR dst,CL?

4 Чем отличаются команды ROL dst,CL и RСL dst,CL?



Поделиться:


Последнее изменение этой страницы: 2020-03-27; просмотров: 344; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.37.169 (0.009 с.)