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) независимо от типа числа (на самом деле он устанавливается, даже если регистр помечен как пустой).