Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FCOM
Влияние команды на флаги и форматы команды:
* |
* |
* |
|
|
|
|
D8 /2 |
FCOM m32real |
Сравнить ST(0) и m32real |
8087 |
fcom dword ptr [bx] |
DC /2 |
FCOM m64real |
Сравнить ST(0) и m64real |
8087 |
fcom qword ptr mtmo |
D8 D0+i |
FCOM ST(i) |
Сравнить ST(0) и ST(i) |
8087 |
fcom ST(2) |
D8 D1 |
FCOM |
Сравнить ST(0) и ST(1) |
8087 |
fcom |
D8 /3 |
FCOMP m32real |
Сравнить ST(0) и m32real, верхний элемент выталкивается из регистрового стека |
8087 |
fcomp dword ptr [bp] |
DC /3 |
FCOMP m64real |
Сравнить ST(0) и m64real, верхний элемент выталкивается из регистрового стека |
8087 |
fcomp dword ptr [ecx] |
D8 D8+i |
FCOMP ST(i) |
Сравнить ST(0) и ST(i), верхний элемент выталкивается из регистрового стека |
8087 |
fcomp ST(5) |
D8 D9 |
FCOMP |
Сравнить ST(0) и ST(1), верхний элемент выталкивается из регистрового стека |
8087 |
fcomp |
DE D9 |
FCOMPP |
Сравнить ST(0) и ST(1), из регистрового стека выталкивается два верхних элемента |
8087 |
fcompp |
Описание:
Команды сравнения вещественных значений сравнивают вершину стека с операндом-источником, который может быть регистром или операндом в памяти (коротким или длинным вещественным). По результатам сравнения устанавливаются биты условий C0, C2, C3 регистра SW.
Команда FCOMP, кроме этого, выталкивает из стека верхний элемент (ST).
Команда FCOMPP — два верхних элемента. Биты условий регистра SW аналогичны флагам регистра EFLAGS, они устанавливаются по результатам операций FPU, а их соответствие флагам приведено в таблице 6.142.
Таблица 6.142. Соответствие между битами C0..C3 регистра SW
и битами регистра EFLAGS
Флаги FPU |
Флаги EFLAGS |
C0 |
CF |
C1 |
Нет |
C2 |
PF |
C3 |
ZF |
Если операнд — NaN, представлен в неопределенном формате или регистр помечен как пустой, возникает исключение #IA, и биты условий устанавливаются в "несравнимо" (С1 C2 С3 = 111). Флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS.
Знак нуля игнорируется, так что -0.0 равен +0.0.
Операция:
CASE (Отношение операндов) OF
ST > SRC: C3, C2, C0 ¬ 000;
ST < SRC: C3, C2, C0 ¬ 001;
ST = SRC: C3, C2, C0 ¬ 100;
ESAC;
IF ST(0) или SRC в неподдерживаемом формате или NaN
THEN
#IA
IF FPUControlWord.IM = 1
THEN
C3, C2, C0 = 111;
FI;
FI;
IF Команда FCOMP
THEN
PopRegisterStack;
FI;
IF Команда FCOMPP
THEN
PopRegisterStack;
PopRegisterStack;
FI;
Особые ситуации защищенного режима:
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#NM, если CR0.EM = 1 или CR0.TS = 1.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.
#NM, если CR0.EM = 1 или CR0.TS = 1.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru