Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FLD
Влияние команды на флаги и форматы команды:
* |
* |
* |
|
|
|
|
D9 /0 |
FLD m32real |
Загрузить m32real в регистровый стек |
8087 |
fld dword ptr [bx] |
DD /0 |
FLD m64real |
Загрузить m64real в регистровый стек |
8087 |
fld qword ptr [bp] |
DB /5 |
FLD m80real |
Загрузить m80real в регистровый стек |
8087 |
fld tbyte ptr [si+12] |
D9 C0+i |
FLD ST(i) |
Загрузить ST(i) в регистровый стек |
8087 |
fld ST(3) |
Описание:
Команда FLD помещает операнд-источник в стек FPU. Если операндом-источником является регистр, то номер регистра используется прежде, чем происходит уменьшение указателя вершины стека. В частности, код FLD ST(0) дублирует вершину стека.
Если операнд-источник представлен коротким или длинным вещественным, то он автоматически преобразуется к формату временного вещественного.
Флаги C0, C2, C3 регистра SW после выполнения команды неопределены, флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS.
Исключение #IA возникает, если операнд-источник SNaN или представлен в неподдерживаемом формате.
Операция:
IF SRC это ST(i) THEN temp = ST(i); FI;
TOP = TOP - 1;
IF SRC это операнд в памяти
THEN
ST(0) = ExtendedReal(SRC);
ELSE (* SRC это ST(i) *)
ST(0) = temp;
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) при невыровненной ссылке в память.
Замечание:
Команда FLD m80real на процессорах Intel387, Intel486, … не может вызывать исключение #D, т.к. это не арифметическая команда. На сопроцессорах Intel287 и 8087 исключение #D возможно. Это не влияет на совместимость программного обеспечения.
В командах FLDm32real и FLDm64real для процессоров Intel387, Intel486, … загружаемое денормализованное значение будет точно конвертировано к временному вещественному. Для сопроцессоров Intel287 и 8087 загружаемое денормализованное значение будет конвертировано к ненормализованному. Если в программе далее следует команда FXTRACT или FXAM, процессоры Intel387, Intel486, … дадут результат отличный от сопроцессоров Intel287 и 8087. Данное изменение было введено для совместимости со стандартом IEEE-754.
В командах FLD m32real и FLD m64real, когда загружается SNaN, в процессорах Intel387, Intel486, … возникает исключение #IA, а в сопроцессорах Intel287 и 8087 — нет. Обработчик исключения необходимо скорректировать для обработки этого условия. Изменение было внесено для совместимости со стандартом IEEE-754.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru