Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FICOM
Влияние команды на флаги и форматы команды:
* |
* |
* |
|
|
|
|
DE /2 |
FICOM m16int |
Сравнить ST(0) и m16int |
8087 |
ficom word ptr [eax] |
DA /2 |
FICOM m32int |
Сравнить ST(0) и m32int |
8087 |
ficom dword ptr [si] |
DE /3 |
FICOMP m16int |
Сравнить ST(0) и m16int, верхний элемент выталкивается из регистрового стека |
8087 |
ficomp tpas |
DA /3 |
FICOMP m32int |
Сравнить ST(0) и m32int, верхний элемент выталкивается из регистрового стека |
8087 |
ficomp dword ptr [bp] |
Описание:
Команды целочисленного сравнения сравнивают содержимое вершины стека с операндом-источником. По результатам сравнения устанавливаются биты условий C0, C2, C3 регистра SW. Команда FICOMP, кроме этого, выталкивает из стека верхний элемент (ST).
Биты условий регистра SW аналогичны флагам регистра EFLAGS, они устанавливаются по результатам операций FPU, а их соответствие флагам приведено в таблице 6.154.
Таблица 6.154. Соответствие между битами 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
Не сравнимые: C3, C2, C0 = 111;
ST > SRC: C3, C2, C0 = 000;
ST < SRC: C3, C2, C0 = 001;
ST = SRC: C3, C2, C0 = 100;
ESAC;
IF (Команда FICOMP) THEN Pop(ST); 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