2.4.6. Команды сравнения FPU

Команда Назначение \ Процессор

FCOM источник Сравнить вещественные числа 8087

FCOMP источник Сравнить и вытолкнуть из стека 8087

FCOMPP Сравнить и вытолкнуть из стека два числа 8087

Команды выполняют сравнение содержимого регистра ST(0) с источником (32- или 64-битная переменная или регистр ST(n), если операнд не указан -ST(1)) и устанавливают флаги СО, С2 и СЗ в соответствии с табл. 14.

Таблица 14. Флаги сравнения FPU

Условие

СЗ

С2

со

ST(O) > источник

O

O

O

ST(O) < источник

O

O

І

ST(O) = источник

І

O

O

Несравнимы

І

І

І

Если один из операндов - не-число или неподдерживаемое число, происходит исключение «недопустимая операция», а если оно замаскировано (флаг ІМ = 1), все три флага устанавливаются в 1. После команд сравнения посредством Б8Т8\¥ и 8ЛЫЕ можно перевести флаги СЗ, С2 и СО в 2Б, РБ и СБ соответственно, затем все условные команды Осе, СМОУсс, БСМОУсс, 8ЕТсс) используют результат сравнения, как после команды СМР

Команда БСОМР после выполнения сравнения выталкивает из стека содер­жимое 8Т(0) (помечает его как пустой и увеличивает ТОР на 1), а команда БСОМРР выталкивает из стека и 8Т(0), и 8Т(1).

Команда

Назначение

Процессор

FUCOM источник

Сравнить вещественные числа без учета порядков

BO3B?

FUCOMP источник

Сравнить без учета порядков и вытолкнуть из стека

BO3B? ■

FUCOMPP

Сравнить без учета порядков и вытолкнуть

80387

 

из стека два числа

:

mum

Эти команды аналогичны РСОМ/ТСОМР/ТСОМРР во всем, но в роли источ­ника могут выступать только регистры ВТ(п), и если один из операндов - (ЖАМ («тихое» не-число), флаги СЗ, С2, СО устанавливаются в единицы, однако исключе­ние «недопустимая операция» не вызывается. Если один из операндов - БЫЛИ или неподдерживаемое число, эти команды ведут себя так же, как и обычное сравнение.

Команда

Назначение

Процессор

FICOM источник

Сравнить целые числа

8087

FICOMP источник

Сравнить целые и вытолкнуть из стека

8087

Эти команды сравнивают содержимое регистра ST(0) и источника

(16- или 32-

битная переменная), причем считается, что источник содержит целое число. В ос-

тальном действие ПСОМ/ТЮОМР полностью эквивалентно РСОМ/БСОМР.

Команда

Назначение

Процессор

FCOMI источник

Сравнить и установить

P6

источник

Сравнить, установить ЕРШЗБ и вытолкнуть

Р6

FUCOMI источник

Сравнить без учета порядков и установить ЕРЬАОБ

P6

источник

Сравнить без учета порядков, установить ЕРЬАОБ

P6

 

и вытолкнуть из стека

 

Выполняет сравнение регистра БТ(0) и источника (регистр 5Т(п)) и устанав­ливает флаги регистра ЕЕЬАОБ соответственно табл. 15.

Таблица 15. Флаги после команд РУСОМ

Условие

ZF

PF

CF

ST(0) > источник

0

O

O

источник

O

O

І

источник

І

O

O

Несравнимы

І

І

І

Эти команды эквивалентны командам FCOM/FCOMP/FUCOM/FUCOMP, вслед за которыми исполняются FSMSW АХ и SAHF, но они не изменяют содер­жимого регистра АХ и выполняются быстрее.

Команда Назначение Процессор

FTST Проверить, не содержит ли SP(0) ноль 8087

Сравнивает содержимое ST(0) с нулем и выставляет флаги СЗ, С2 и СО анало­гично другим командам сравнения.

Команда Назначение Процессор

FXAM Проанализировать содержимое ST(0) 8087

Устанавливает флаги СЗ, С2 и СО в зависимости от типа числа, находящегося в ВТ(0), в соответствии с правилами, приведенными в табл. 16.

Таблица 16. Результаты действия команды РХАМ

Тип числа

СЗ

С2

со

Неподдерживаемое

G

G

G

Не-число

G

G

1

Нормальное конечное число

G

1

G

Бесконечность

G

1

1

Ноль

1

G

G

Регистр пуст

1

G

1

Денормализованное

число

1

1

G

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