Коды условий
Арифметические команды формируют коды условий в зависимости от результата выполнения команды:
Перенос (c) – если есть перенос за границы разрядной сетки ячейки;
Четность (p) – количество битов младшего байта результата – четное;
Знак (s) – результат отрицательный;
Нуль (z)– результат равен нулю;
Переполнение (o).
Признак результата записывается в регистр флагов. Регистр флагов – 32 битное число, в котором каждый флаг записывается в фиксированный бит. Для рассмотренных выше флагов используются биты:
C –бит 0
P – бит 2
Z – бит 6
S – бит 7
O – бит 11 .
Содержимое регистра флагов может быть записано в стек (команда pushfd) и прочитано из стека (например, команда pop eax).
Пример. Записать содержимое регистра флагов в регистр EAX:
Pushfd
Pop eax
Команды пересылки не изменяют содержимое регистра флагов!
Специально для изменения битов регистра флагов используются команды:
Команда сравнения : cmp оп1, оп2. Операнды задаются как для арифметических- команд. Фактически выполняется команда вычитания, но результат не записывается вместо первого данного, а только формируется регистр флагов.
Команда test оп1, оп2. Операнды задаются как для арифметических- команд. Фактически выполняется операция поразрядного умножения, но результат не записывается в оп1, а флаги формируются. Команда используется для сравнения с нулем всего числа или отдельных его битов.
Команда bt оп, константа. Команда проверяет содержимое бита, номер которого задан константой, в операнде. Результат записывается в бит переноса регистра флагов.