Программирование на Ассемблере

       

Коды условий


Арифметические команды формируют коды условий в зависимости от результата выполнения команды:

Перенос (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 оп, константа. Команда проверяет содержимое бита, номер которого задан константой, в операнде. Результат записывается в бит переноса регистра флагов.

 



Содержание раздела