logo search
несколько программ / bsp33

Команды сравнений чисел

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

Команда

Описание

FCOM

Сравнение

FICOM

Целочисленное сравнение

FCOMP

Сравнение и извлечение из стека

FICOMP

Целочисленное сравнение и извлечение из стека

FCOMPP

Сравнение и двойное извлечение из стека

FTST

Сравнение операнда с нулем

FXAM

Анализ операнда

Команда FCOM вычитает содержимое операнда, размещенного в оперативной памяти, из верхушки стека ST(0). Результат вычитания никуда не записывается и указатель верхушки стека ST не изменяется.

Обозначим операнд команды сравнения как "x". В следующей таблице приведем значения битов кодов условия после выполнения команды "FCOM x":

C3

C0

Условие

0

0

ST(0) > x

0

1

ST(0) < x

1

0

ST(0) = x

1

1

ST(0) и x не сравнимы

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

Команда FICOM работает с 16- или 32-разрядными числами, в остальном она аналогична команде FCOM.

Команды FCOMP и FICOMP аналогичны, соответственно, командам FCOM и FICOM, за исключением того, что после выполнения операнд извлекается из стека.

Команда FCOMPP выполняет те же действия, что и FCOM, но она после выполнения извлекает из стека оба операнда, участвовавших в сравнении.

Для сравнения операнда с нулем предназначена команда FTST. После ее выполнения коды условий устанавливаются в соответствии со следующей таблицей:

C3

C0

Условие

0

0

ST(0) > 0

0

1

ST(0) < 0

1

0

ST(0) = 0

1

1

ST(0) и 0не сравнимы

Команда FXAM анализирует содержимое ST(0). После ее выполнения устанавливаются коды условий, по которым можно судить о знаке числа, о его конечности или бесконечности, нормализованности и так далее.

Бит C1 содержит знак анализируемого числа:

C1

Знак числа

0

Положительный

1

Отрицательный

С помощью бита C0 можно определить, является число конечным или бесконечным:

C0

Описание

0

Конечное число

1

Бесконечное число

Для конечных чисел дальнейшая классификация может проводиться по содержимому кодов условий C2 и C3:

C3

C2

Описание числа

0

0

Ненормализованное число

0

1

Нормализованное число

1

0

Нулевое число

1

1

Число денормализовано

Аналогично, для бесконечных чисел коды условий C2 и C3 имеют следующие значения:

C3

C2

Описание числа

0

0

Нечисло

0

1

Бесконечное число

1

0

Пустое число

1

1

Пустое число

С помощью команды "FSTSW AX" программа может переписать содержимое регистра состояния сопроцессора в регистр AX центрального процессора. Далее содержимое регистра AH можно переписать в регистр флагов центрального процессора при помощи команды SAHF. Биты кодов условий сопроцессора отображаются на регистр флагов центрального процессора таким образом, что для анализа кодов условий можно использовать команды условных переходов.

Например, в следующем фрагменте программы выполняется переход к метке error, если операнды несравнимы:

.286

. . .

fcom

fstsw ax

sahf

je error