Ассемблер. Логические инструкции

  Светлана Деменева  | 

  Обновл. 8 Ноя 2019  | 

 599

Набор команд процессора содержит логические инструкции AND, OR, XOR, TEST и NOT, которые проверяют, устанавливают и очищают биты в соответствии с потребностями программы.

Логические инструкции

Синтаксис использования логических инструкций:

   AND операнд1, операнд2

   OR операнд1, операнд2

   XOR операнд1, операнд2

   TEST операнд1, операнд2

   NOT операнд1

Во всех случаях первый операнд находится либо в регистре, либо в памяти. Второй операнд может быть либо в регистре/памяти, либо в (константном) значении. Тем не менее, операции «память-память» невозможны.

Инструкция AND


Инструкция AND выполняет побитовую операцию AND. Побитовая операция AND возвращает 1, если совпадающие биты обоих операндов равны 1, в противно случае — 0.

Например:

Операнд №1: 0101
Операнд №2: 0011
--
После применения AND -> Операнд №1: 0001

Операция AND может быть использована для сброса одного или нескольких битов. Например, допустим, что регистр BL содержит 0011 1010. Если вам необходимо сбросить старшие биты до нуля, то вы выполняете операцию AND с этим регистром и с 0FH:

Давайте рассмотрим другой пример. Если вы хотите проверить, является ли определённое число чётным или нечётным, то с помощью простого теста вы можете проверить младший значимый бит числа. Если им окажется 1, то число нечётное, если же 0, то число чётное.

Например, если число находится в регистре AL, то мы можем написать следующее:

Следующая программа это проиллюстрирует:

Результат выполнения программы выше:

Even Number!

Изменяем значение в регистре AX, указав нечётную цифру:

И результат:

Odd Number!

Вы можете точно так же очистить весь регистр, используя AND с 00H.

Инструкция OR

Инструкция OR выполняет побитовую операцию OR. Побитовый оператор OR возвращает 1, если совпадающие биты одного или обоих операндов равны 1, и возвращает 0, если оба бита равны нулю.

Например:

Операнд №1: 0101
Операнд №2: 0011
--
После применения OR -> Операнд №1: 0111

Операция OR может быть использована для указания одного или нескольких битов. Например, допустим, что регистр AL содержит 0011 1010 и нам необходимо установить четыре младших бита. Мы можем сделать это, используя оператор OR со значением 0000 1111 (т.е. с регистром FH):

В качестве другого примера давайте сохраним значения 5 и 3 в регистрах AL и BL, соответственно. Таким образом, следующая инструкция:

Должна сохранить 7 в регистре AL:

Результат выполнения программы выше:

7

Инструкция XOR


Инструкция XOR выполняет побитовую операцию XOR. Побитовая операция XOR возвращает 1, если биты операндов являются различными, если же они являются одинаковыми (оба равны 0 или 1), то возвращается 0.

Например:

Операнд №1: 0101
Операнд №2: 0011
--
После применения XOR -> Операнд №1: 0110

Следующая инструкция очищает регистр (сбрасывает все биты на 0):

Инструкция TEST

Инструкция TEST работает так же, как и инструкция AND, но, в отличие от инструкции AND, она не изменяет первый операнд. Таким образом, если нам нужно проверить, является ли число в регистре чётным или нечётным, мы можем сделать это, используя инструкцию TEST, без необходимости изменять исходное число:

Инструкция NOT


Инструкция NOT выполняет побитовую операцию NOT. Побитовая операция NOT изменяет биты операнда на противоположные. Операнд может находится либо в регистре, либо в памяти.

Например:

Операнд №1: 0101 0011
--
После применения NOT -> Операнд №1: 1010 1100

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *