Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 2).doc
Скачиваний:
155
Добавлен:
08.03.2015
Размер:
380.93 Кб
Скачать

3.11.3 Логические команды

Логические команды предназначены для побитовой обработки данных. Их можно разделить на следующие подгруппы:

1)команды логических операций;

2)команды сравнения;

3)команды сдвигов.

Команды логических операций

К этой подгруппе относятся команды AND, OR, XOR и NOT, реализующие поразрядные логические операции над операндами.Первые три команды записываются в формате:

AND приемник, источник

OR приемник, источник

XOR приемник, источник

и выполняют соответственно операции "логическое И", "логическое ИЛИ" и "исключающее ИЛИ" над соответствующими битами операндов приемника и источника. Результаты исполнения этих команд для однобитных операндов приведены в табл. 3.2.

Таблица 3.2

Таблица истинности команд AND, OR, XOR

Операнды

Результат

Приемник

Источник

AND

OR

XOR

0

0

0

0

0

0

1

0

1

1

1

0

0

1

1

1

1

1

1

0

Операндами команд AND, OR и XOR могут быть байты или слова. В качестве приемника и источника данных могут использоваться регистры МП или регистр и ячейка памяти. Кроме того, источник может быть и непосредственным значением.

Команда конъюнкции AND используется для сброса битов операндаприемника. После выполнения этой команды сбрасываются те биты, которым в операндеисточнике соответствуют 0. Команда AND, как правило, применяется для выделения указанных полей операндаприемника. Выделяемые поля указываются значениями битов операндаисточника, называемого маской. Маска должна содержать единицы в разрядах, соответствующих выделяемым полям, и нули во всех остальных. После выполнения команды AND выделяемые поля приемника сохраняют свое значение, а все остальные обращаются в нуль.

Пример 3.78:

AND AX, DX ;Логическое И над двумя регистрами

AND AL, MemByte ;или регистром и ячейкой памяти

AND [BX], DX

AND AL, 00001111b ;Выделение младшей тетрады регистра AL

Команда дизъюнкции OR предназначена для объединения полей операндов приемника и источника. После выполнения этой команды те биты операндаприемника, в которых хотя бы один из операндов содержит 1, устанавливаются в 1. Команда OR обычно используется для установки указанных полей операндаприемника. Устанавливаемые поля указываются значениями битов операнда источника (маски). Маска должна содержать единицы в разрядах, соответствующих устанавливаемым полям, и нули во всех остальных. После выполнения команды OR устанавливаемые поля приемника имеют единичное значение, а все остальные не изменяются.

Пример 3.79:

OR AL, DL ;Объединение двух регистров

OR Table[SI], DX ;или регистра и ячейки памяти

OR AX, 8000H ;Установка разряда D15 регистра AX в 1

Пример 3.80:

Переключить МП в режим трассировки и обратно.

Эта задача решается путем установки и сброса флага трассировки TF. Это реализуется через память с помощью команд AND или OR с соответствующей маской :

; Включение режима трассировки

PUSHF ; Запись в стек регистра флагов

MOV BP, SP ; Настройка адреса на верхушку стека

OR WORD PTR [BP], 100h ; Установка флага TF

POPF ; Загрузка регистра флагов

. . . . . . . . . . . . .

; Выключение режима трассировки

. . . . . . . . . . . . .

AND WORD PTR [BP], 0FEFFh ; Сброс флага TF

Команда XOR служит для инвертирования указанных полей операнда-приемника. Инвертируемые поля указываются значениями битов операнда-источника (маски). Маска должна содержать единицы в разрядах, соответствующих инвертируемым полям, и нули во всех остальных. После выполнения этой команды инвертируемые поля изменяют свое значение на противоположное, а все остальные не изменяются.

Кроме того, команда XOR используется, если необходимо определить, в каких битах значения операндов не совпадают. После ее выполнения в разрядах, в которых биты операндов не совпадают, устанавливаются единицы, а во всех остальных нули.

Команда XOR часто применяется для очистки регистров. В этом случае в качестве приемника и источника используется один и тот же регистр.

Команда XOR используется и для правильного формирования флага четности PF при необходимости характеристики слова или более длинных элементов данных. Это достигается путем выполнения этой команды по отношению к младшему и старшему байтам контролируемого слова. При этом из слова попарно удаляются единицы, совпадающие в разрядах составляющих его байтов, что не влияет на признак четности, но сводит слово к байту, который правильно характеризуется флагом PF.

Пример 3.81:

XOR AX, 8000h ;Инвертирование разряда D15 регистра AX

XOR AX, DX ;Выявление несовпадающих значений в ;битах регистров

XOR DX, [BX+SI] ;или регистра и ячейки памяти

XOR MemByte, AL

XOR AX, AX ;Очистка регистра AX

XOR AL, AH ;Формирование флага PF для слова из AX

Команды AND, OR и XOR правильно формируют флаги SF, ZF, PF и сбрасывают флаги OF=CF=0.

Команда отрицания NOT записывается в формате:

NOT приемник

и осуществляет инвертирование каждого бита операндаприемника. В качестве приемника могут использоваться 8-битные или 16-битные регистры или ячейки памяти. Команда NOT не изменяет значения флагов.

Пример 3.82:

NOT AX ; Инвертирование регистра

NOT BYTE PTR [BX+2] ; или ячейки памяти