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

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

  Обновл. 7 Дек 2020  | 

 8902

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

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

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

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

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

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

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

   NOT операнд1

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

Инструкция 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 выполняет побитовую операцию ИЛИ. Побитовый оператор ИЛИ возвращает 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 выполняет побитовую операцию НЕ. Побитовая операция НЕ изменяет биты операнда на противоположные. Операнд может находиться либо в регистре, либо в памяти. Например:

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

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

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

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

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