Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 20

Примечание. Обычно команду CMP используют перед командами условного перехода, условной пересылки данных или условной установки байтов, которые позволяют применить результат сравнения, не изучая детальное значение каждого флага. Например, команда JE выполняет переход, если операнды команды CMP были равны. На самом деле, команда JE — лишь другая мнемоника команды JZ, которая выполняет переход, если установлен флаг нуля. А флаг нуля устанавливается при вычитании тогда и только тогда, когда уменьшаемое и вычитаемое равны.

Команда CMP применяется также перед любыми другими командами, чувствительными к флагам состояния.

В то же время, условные команды часто используются не после CMP или TEST, а после других команд, устанавливающих флаги состояния. Например, самая короткая команда для проверки равенства AX единице есть

                DEC     EAX

Она занимает один байт, а не четыре, как команда

                CMP     EAX, 1

Выполнение обеих команд занимает один такт на процессорах семейства P6. Единственный недостаток первого варианта состоит в том, что он меняет исследуемое число.

CMPXCHG операнд1, операнд2             сравнить и обменять                 80486

Сравнивает значение регистра AL, AX или EAX соответственно размеру первого операнда со значением первого операнда. Если они равны, содержимое второго операнда копируется в первый. В противном случае содержимое первого операнда копируется в аккумулятор.

Флаги устанавливаются, как после команды CMP.

Первым операндом может быть

—  регистр общего назначения;

—  память.

Вторым операндом может быть регистр общего назначения.

CMPXCHG8B операнд                            сравнить и обменять 8 байт            P5

Сравнивает содержимое регистров EDX:EAX как 64-разрядного числа с операндом. Если они равны, в EDX:EAX копируется содержимое регистров ECX:EBX, иначе — копируется содержимое операнда.

Операндом может быть память.

7.3.  Команды двоично-десятичной арифметики

DAA            BCD-коррекция после сложения                                             8086

DAS            BCD-коррекция после вычитания                                           8086

AAA            ASCII-коррекция после сложения                                          8086

AAS            ASCII-коррекция после вычитания                                         8086

AAM            ASCII-коррекция после умножения                                       8086

AAD            ASCII-коррекция перед делением                                           8086

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

Результат всех логических операций с двумя операндами помещается в первый из них.

AND            приёмник, источник           побитовое И                                 8086

Приёмником может быть:

—  регистр общего назначения;

—  память.

Источником может быть:

—  непосредственный операнд;

—  регистр общего назначения;

—  память.

Флаги:

AF — не определён;

CF, OF — сброшены;

PF, SF, ZF — в соответствии с результатом операции.

OR              приёмник, источник           побитовое ИЛИ                           8086

Аналогично AND.

XOR            приёмник, источник           побитовое исключающее ИЛИ   8086

Аналогично AND.

NOT            операнд                               побитовая инверсия                     8086

Флаги не изменяются.

TEST         операнд1, операнд2            логическое сравнение                  8086

Выполняет операцию И над операндами не сохраняя результат.

Правила для операндов и состояние флагов — такие же, как в команде AND.

Примечание. TEST так же, как CMP, используется, в основном, перед условными командами.

7.5.  Команды операций сдвига

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

Для процессоров 8088 и 8086 счётчиком может быть непосредственный операнд 1 или регистр CL, причём эти процессоры учитывают все биты регистра CL, несмотря на возможную неэффективность операции.