Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВС сети и телекомм-практикум.doc
Скачиваний:
45
Добавлен:
01.07.2025
Размер:
614 Кб
Скачать

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

Закончив с арифметическими командами, перейдем к логическим. К ним принято относить операции НЕ, И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ. Подробно изучим их работу.

Простейшей является операция логического отрицания НЕ, иногда называемая инверсией. В ассемблере используется команда NOT, имеющая следующий формат

NOT приемник

Суть состоит в том, что каждый бит приемника (регистр или переменная), равный нулю, устанавливается в 1, и каждый бит, равный 1, сбрасывается в 0. Флаги при этом остаются неизменными.

Логическое И выполняется командой AND над приемником (регистр или переменная) и источником (число, регистр или переменная). Причем источник и приемник не могут быть переменными одновременно. Результат помещается в приемник. Любой бит результата равен 1, только если соответствующие биты обоих операндов были равны 1, и равен 0 в остальных случаях.

Логическое ИЛИ выполняется командой OR над приемником (регистр или переменная) и источником (число, регистр или переменная). Причем источник и приемник не могут быть переменными одновременно. Результат помещается в приемник. Любой бит результата равен 0, только если соответствующие биты обоих операндов были равны 0, и равен 1 в остальных случаях.

Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ выполняется командой ХOR над приемником (регистр или переменная) и источником (число, регистр или переменная). Причем источник и приемник не могут быть переменными одновременно. Результат помещается в приемник. Особенность команды состоит в том, что результирующий бит равен единице, если соответствующие биты операндов различны. Если же биты операндов одинаковы, то результирующий бит всегда равен нулю.

Именно поэтому команду XOR часто используют для обнуления результатов. Ведь если, к примеру, AX=7, то строка

XOR AX, AX

сделает АХ=0, причем быстрее и эффективнее, чем вариант

MOV AX, 0.

Ассемблер позволяет проводить два вида сравнения – арифметическое и логическое. Данные две операции схожи друг с другом, но имеются и отличия.

Арифметическое сравнение осуществляется с помощью команды CMP, которая сравнивает приемник и источник и устанавливает флаги. Сравнение осуществляется путем вычитания источника (число, регистр или переменная) из приемника (регистр или переменная) приемник и источник не могут быть переменными одновременно), причем результат вычитания никуда не записывается, единственным результатом работы этой команды оказывается изменение флагов CF, OF, SF, ZF, AF и PF. Обычно команду СМР используют вместе с командами условного перехода (Jcc), которые позволяют использовать результат сравнения, не обращая внимания на детальное значение каждого флага.

Логическое сравнение осуществляется с помощью команды TEST. Эта команда выполняет операцию И над приемником (регистр или переменная) и источником (число, регистр или переменная). Причем источник и приемник не могут быть переменными одновременно. Единственным результатом работы этой команды оказывается изменение флагов SF, ZF и PF в соответствии с полученным результатом, не сохраняя результат (флаги OF и CF обнуляются, значение AF не определено). TEST, так же как и СМР, используется в основном в сочетании с командами условного перехода (Jcc).