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

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

  Обновл. 16 Сен 2021  | 

 14151

Набор команд процессора содержит логические инструкции 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 (19 оценок, среднее: 4,79 из 5)
Загрузка...

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

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