Команды пересылки данных FPU
Команда: |
FLD источник |
Назначение: |
Загрузить вещественное число в стек |
Процессор: |
8087 |
Команда помещает содержимое источника (32-, 64- или 80-битная переменная или ST(n)) и уменьшает ТОР на 1. Команда FLD ST(0) делает копию вершины стека.
Команда: |
FST приемник |
Назначение: |
Скопировать вещественное число из стека |
Команда: |
FSTP приемник |
Назначение: |
Считать вещественное число из стека |
Процессор: |
8087 |
Копирует ST(0) в приемник (32- или 64-битную переменную или пустой ST(n) в случае FST; 32-, 64- или 80-битную переменную или пустой ST(n) в случае FSTP). FSTP после этого выталкивает число из стека (помечает ST(0) как пустой и увеличивает ТОР на один).
Команда: |
FILD источник |
Назначение: |
Загрузить целое число в стек |
Процессор: |
8087 |
Преобразовывает целое число со знаком из источника (16-, 32- или 64-битная переменная) в вещественный формат, помещает в вершину стека и уменьшает ТОР на 1.
Команда: |
FIST приемник |
Назначение: |
Скопировать целое число из стека |
Команда: |
FISTP приемник |
Назначение: |
Считать целое число из стека |
Процессор: |
8087 |
Преобразовывает число из вершины стека в целое со знаком и записывает его в приемник (16- или 32-битная переменная для FIST; 16-, 32- или 64-битная переменная для FISTP). FISTP после этого выталкивает число из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Попытка записи слишком большого числа, бесконечности или не-числа приводит к исключению «недопустимая операция» (и записи целой неопределенности, если IM = 1).
Команда: |
FBLD источник |
Назначение: |
Загрузить десятичное число в стек |
Процессор: |
8087 |
Преобразовывает BCD число из источника (80-битная переменная в памяти), помещает в вершину стека и уменьшает ТОР на 1.
Команда: |
FBSTP приемник |
Назначение: |
Считать десятичное число из стека |
Процессор: |
8087 |
Преобразовывает число из вершины стека в 80-битное упакованное десятичное, записывает его в приемник (80-битная переменная) и выталкивает это число из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Попытка записи слишком большого числа, бесконечности или не-числа приводит к исключению «недопустимая операция» (и записи десятичной неопределенности, если IM = 1).
Команда: |
FXCH приемник |
Назначение: |
Обменять местами два регистра стека |
Процессор: |
8087 |
<
/p>
Обмен местами содержимого регистра ST(0) и источника (регистр ST(n)). Если операнд не указан, обменивается содержимое ST(0) и ST(1).
Команда: |
FCMOVcc приемник, источник |
Назначение: |
Условная пересылка данных |
Процессор: |
P6 |
Это набор команд, каждая из которых копирует содержимое источника (регистр ST(n)) в приемник (только ST(0)), если выполняется соответствующее условие. Реально каждое условие соответствует тем или ным значениям флагов регистра FLAGS, но после команд
fcom (или другие команды сравнения) fstsw ax sahf
в регистр FLAGS загружаются флаги С0, С1 и С3, и последующая команда из набора FCMOVcc приобретает смысл обработки результата предыдущего сравнения (табл. 13).
Таблица 13. Команды FCMOVcc
Команда |
Значения флагов |
Действие после FCOM |
FCMOVE |
ZF = 1 |
если равно |
FCMOVNE |
ZF = 0 |
если не равно |
FCMOVB |
CF = 1 |
если меньше |
FCMOVBE |
CF = 1 и ZF = 1 |
если меньше или равно |
FCMOVNB |
CF = 0 |
если не меньше |
FCMOVNBE |
CF = 0 и ZF = 0 |
если не меньше или равно |
FCMOVU |
PF = 1 |
если несравнимы |
FCMOVNU |
PF = 0 |
если сравнимы |
Содержание раздела