[Назад] [Далее] | |
FCOM источник | |
Сравнить вещественные числа | |
FCOMP источник | |
Сравнить и вытолкнуть из стека | |
FCOMPP источник | |
Сравнить и вытолкнуть из стека два числа | |
8087 |
Команды выполняют сравнение содержимого регистра ST(0) с источником (32- или 64-битная переменная или регистр ST(n), если операнд не указан — ST(1)) и устанавливают флаги С0, С2 и С3 в соответствии с таблицей 14.
Таблица 14. Флаги сравнения FPU
Условие | C3 | C2 | C0 |
ST(0) > источник | 0 | 0 | 0 |
ST(0) < источник | 0 | 0 | 1 |
ST(0) = источник | 1 | 0 | 0 |
Не сравнимы | 1 | 1 | 1 |
Если один из операндов — не-число или неподдерживаемое число, происходит исключение «недопустимая операция», а если оно замаскировано (флаг IM = 1), все три флага устанавливаются в 1. После команд сравнения с помощью команд FSTSW и SAHF можно перевести флаги С3, С2 и С0 в соответственно ZF, PF и CF, после чего все условные команды (Jcc, CMOVcc, FCMOVcc, SETcc) могут использовать результат сравнения, как после команды СМР.
Команда FCOMP после выполнения сравнения выталкивает из стека содержимое ST(0) (помечает его как пустой и увеличивает ТОР на 1), а команда FCOMPP выталкивает из стека и ST(0), и ST(1).
FUCOM источник | |
Сравнить вещественные числа без учета порядков | |
FUCOMP источник | |
Сравнить без учета порядков и вытолкнуть из стека | |
FUCOMPP источник | |
Сравнить без учета порядков и вытолкнуть из стека два числа | |
80387 |
Эти команды аналогичны FCOM/FCOMP/FCOMPP во всем, кроме того, что в роли источника могут выступать только регистры ST(n), и если один из операндов — QNAN («тихое» не-число), флаги С3, С2, С0 устанавливаются в единицы, но исключение «недопустимая операция» не вызывается. Если один из операндов — SNAN или неподдерживаемое число, эти команды ведут себя так же, как и обычное сравнение.
FICOM источник | |
Сравнить целые числа | |
FICOMP источник | |
Сравнить целые и вытолкнуть из стека | |
8087 |
Эти команды сравнивают содержимое регистра ST(0) и источника (16- или 32-битная переменная), причем считается, что источник содержит целое число. В остальном действие FICOM/FICOMP полностью эквивалентно FCOM/FCOMP.
FCOMI источник | |
Сравнить и установить EFLAGS | |
FCOMIP источник | |
Сравнить, установить EFLAGS и вытолкнуть | |
FUCOMI источник | |
Сравнить без учета порядков и установить EFLAGS | |
FUCOMIP источник | |
Сравнить без учета порядков, установить EFLAGS и вытолкнуть из стека | |
P6 |
Выполняет сравнение регистра ST(0) и источника (регистр ST(n)) и устанавливает флаги регистра EFLAGS соответственно таблице 15.
Таблица 15. Флаги после соманд FCOMI
Условие | ZF | PF | CF |
ST(0) > источник | 0 | 0 | 0 |
ST(0) < источник | 0 | 0 | 1 |
ST(0) = источник | 1 | 0 | 0 |
Не сравнимы | 1 | 1 | 1 |
Эти команды эквивалентны командам FCOM/FCOMP/FUCOM/FUCOMP, вслед за которыми исполняются FSMSW АХ и SAHF, но они не изменяют содержимого регистра АХ и выполняются быстрее.
FTST | |
Проверить, не содержит ли SP(0) ноль | |
8087 |
Сравнивает содержимое ST(0) с нулем и выставляет флаги С3, С2 и С0 аналогично другим командам сравнения.
FXAM | |
Проанализировать содержимое ST(0) | |
8087 |
Устанавливает флаги С3, С2 и С0 в зависимости от типа числа, находящегося в ST(0), в соответствии с правилами, приведенными в таблице 16.
Флаг С1 устанавливается равным знаку числа в ST(0) независимо от типа числа (на самом деле он устанавливается, даже если регистр помечен как пустой).
Таблица 16. Результаты действия команды FXAM
Тип числа | C3 | C2 | C0 |
Неподдерживаемое | 0 | 0 | 0 |
Не-число | 0 | 0 | 1 |
Нормальное конечное число | 0 | 1 | 0 |
Бесконечность | 0 | 1 | 1 |
Ноль | 1 | 0 | 0 |
Регистр пуст | 1 | 0 | 1 |
Денормализованное число | 1 | 1 | 0 |