Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FIST
Влияние команды на флаги и форматы команды:
* |
* |
|
|
|
|
* |
DF /2 |
FIST m16int |
Сохранить ST(0) в m16int |
8087 |
fist word ptr [si+2] |
DB /2 |
FIST m32int |
Сохранить ST(0) в m32int |
8087 |
fist dword ptr [bx] |
DF /3 |
FISTP m16int |
Сохранить ST(0) в m16int, верхний элемент выталкивается из регистрового стека |
8087 |
fistp word ptr [dx] |
DB /3 |
FISTP m32int |
Сохранить ST(0) в m32int, верхний элемент выталкивается из регистрового стека |
8087 |
fistp dword ptr [edi] |
DF /7 |
FISTP m64int |
Сохранить ST(0) в m64int, верхний элемент выталкивается из регистрового стека |
8087 |
fistp qword ptr [di] |
Описание:
Команда FIST преобразует значение в ST в знаковое целое в соответствии с полем RC управляющего слова и пересылает результат в память. ST остается неизменным. FIST может использовать целое слово или короткое целое в качестве назначения. FISTP также может использовать длинное целое. Команда FISTP, кроме этого, выталкивает из регистрового стека FPU верхний элемент (ST).
Если входное значение в ST(0) слишком велико, чтобы быть преобразованным в целое, NaN или представлено в неподдерживаемом формате, то возникает исключение #IA. Если при этом маска исключения установлена (IM = 1), то в операнд-назначение помещается целочисленная неопределенность. Если маска не установлена, то записи в память не происходит и управление передается обработчику исключений.
Флаги C0, C2, C3 регистра SW после выполнения команды неопределены, флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS, а также указывает направление округления в случае возникновения исключения #P (неточный результат): 0 – округление к меньшему, 1 – округление к большему.
Операция:
DEST = ST(0);
IF (Команда FISTP) 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) при невыровненной ссылке в память.
Замечание:
Различные ошибки в этой команде могут встречаться на процессорах Pentium. В процессоре Pentium III существуют некоторые ситуации, когда команды FST, FSTP, FIST и FISTP с операндом в памяти не генерируют исключения #P несмотря на проблемы с точностью. Обратитесь к технической документации Intel за описанием всех возможных случаев проявления ошибки. Для однозначного устранения всех предпосылок возникновения этой ошибки используется две команды NOP перед критической командой FPU.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru