Похожие презентации:
FPU. Регистры
1.
FPU2.
Регистры3.
Адресация регистров4.
Мнемоническое обозначение команд сопроцессораПервая буква F
Вторая – тип операнда в памяти
i - целое двоичное
b - целое десятичное
пусто – вещественное
Последние p – выталкивание результата
(Пред)последняя r – реверс операндов
5.
Форматы команд– Стековый
– Регистровый
– С памятью
FADD
FADD ST(1),ST
FADD mem64real
6.
Команды передачи данныхОсновными командами передачи данных являются
команда FLD (загрузка данных в вершину стека сопроцессора);
команда FST (сохранение вершины стека сопроцессора в память)
Команды передачи данных можно разделить на следующие группы:
команды передачи данных в вещественном формате;
команды передачи данных в целочисленном формате;
команды передачи данных в двоично-десятичном формате.
7.
Команды передачи данных вещественного типаКоманда
Операнды
Пояснение
Описание
FLD
src
TOPSWR-=1; ST(0)=src;
Загрузка операнда в вершину
стека
FST
dst
dst=ST(0);
Сохранение вершины стека в
память
FSTP
dst
dst=ST(0); TOPSWR+=1;
Сохранение вершины стека в
память с выталкиванием
FXCH
ST(i)
ST(0) ↔ ST(i)
Обмен значений ST(0) и ST(i)
8.
Команды передачи данных целого типаКоманда
Операнды
Пояснение
Описание
FILD
src
TOPSWR-=1; ST(0)=src; Загрузка операнда в вершину стека
FIST
dst
dst=ST(0);
Сохранение вершины стека в
память
FISTP
dst
dst=ST(0); TOPSWR+=1;
Сохранение вершины стека в
память с выталкиванием
9.
Команды загрузки константКоманда
Пояснение
Описание
FLDZ
TOPSWR-=1; ST(0)=0;
Загрузка 0
FLD1
TOPSWR-=1; ST(0)=1;
Загрузка 1
FLDPI
TOPSWR-=1; ST(0)=3.1415926535;
Загрузка π
FLDL2T
TOPSWR-=1; ST(0)=3.3219280948;
Загрузка log210
FLDL2E
TOPSWR-=1; ST(0)=1.4426950408;
Загрузка log2e
FLDLG2
TOPSWR-=1; ST(0)=0.3010299956;
Загрузка lg 2
FLDLN2
TOPSWR-=1; ST(0)=0.6931471805;
Загрузка ln 2
10.
Команды сравнения данных вещественного типаКоманда
Операнды
Пояснение
Описание
FCOM FUCOM
src
ST(0) — src
Вещественное сравнение
FCOMP FUCOMP
src
ST(0) — src; TOPSWR+=1;
Вещественное сравнение с
выталкиванием
FCOMPP FUCOMPP
—
ST(0) — ST(1); TOPSWR+=2;
Вещественное сравнение с двойным
выталкиванием
FCOMI FUCOMI
ST, ST(i)
ST(0) — ST(i)
Вещественное сравнение c
модификацией EFLAGS
ST(0) — ST(i); TOPSWR+=1;
Вещественное сравнение c
выталкиванием с модификацией
EFLAGS
FCOMIP FUCOMIP
ST, ST(i)
FXAM
—
Анализ ST(0)
11.
Команды FCOMI, FUCOMIУсловие
ZF
PF
CF
Переход
ST(0) > ST(i)
0
0
0
ja
ST(0) < ST(i)
0
0
1
jb
ST(0) = ST(i)
1
0
0
je
ST(0) >= ST(i)
*
0
0
jae
ST(0) <= ST(i)
*
0
*
jbe
12.
Арифметические команды вещественного типаКоманда
Операнды
Пояснение
Описание
FADD
dst, src
dst = dst + src;
Сложение вещественное
Сложение вещественное с
ST(i) = ST(i) + ST(0); TOPSWR+=1;
выталкиванием
FADDP
ST(i), ST(0)
FSUB
dst, src
FSUBP
ST(i), ST(0)
FSUBR
dst, src
FSUBRP
ST(i), ST(0)
FMUL
dst, src
FMULP
ST(i), ST(0)
FDIV
dst, src
FDIVP
ST(i), ST(0)
FDIVR
dst, src
Деление вещественное
Деление вещественное с
ST(i) = ST(i) / ST(0); TOPSWR+=1;
выталкиванием
dst = src /dst;
Деление вещественное реверсивное
FDIVRP
ST(i), ST(0)
ST(i) = ST(0) / ST(i); TOPSWR+=1;
dst = dst — src;
Вычитание вещественное
Вычитание вещественное с
ST(i) = ST(i) — ST(0); TOPSWR+=1;
выталкиванием
Вычитание вещественное
dst = src — dst;
реверсивное
Вычитание вещественное
ST(i) = ST(0) — ST(i); TOPSWR+=1;
реверсивное с выталкиванием
dst = dst * src;
Умножение вещественное
Умножение вещественное с
ST(i) = ST(i) * ST(0); TOPSWR+=1;
выталкиванием
dst = dst / src;
Деление вещественное реверсивное с
выталкиванием
13.
Дополнительные арифметические командыКоманда
Пояснение
Описание
FSQRT
ST(0) = √ST(0)
Вычисление квадратного корня
FABS
ST(0) = |ST(0)|
Вычисление модуля
FCHS
ST(0) = -ST(0)
Изменение знака
FXTRACT
temp = ST(0); ST(0)=порядок(temp); TOP-=1;
ST(0)=мантисса(temp);
Выделение порядка и мантиссы
FSCALE
ST(0) = ST(0) · 2ST(1)
Масштабирование по степеням 2
FRNDINT
ST(0)=(ST(0))
Округление ST(0)
ST(0)=ST(0)-Q*ST(1)
Частичный остаток от деления
FPREM
FPREM1
14.
Команды трансцендентных функцийКоманда
Пояснение
Описание
FSIN
ST(0) = sin(ST(0))
Вычисление синуса
FCOS
ST(0) = cos(ST(0))
Вычисление косинуса
FSINCOS
temp=ST(0); ST(0)=sin(temp); TOP-=1; ST(0)=cos(temp);
Вычисление синуса и косинуса
FPTAN
ST(0)=tg(ST(0)); TOP-=1; ST(0)=1.0;
Вычисление тангенса
FPATAN
ST(1)=atan(ST(1)/ST(0)); TOP+=1;
Вычисление арктангенса
F2XM1
ST(0)=2ST(0)-1;
Вычисление выражения y=2x-1
FYL2X
x=ST(0); y=ST(1); TOP+=1; ST(0)=y*log2x;
Вычисление выражения y*log2x
FYL2XP1
x=ST(0); y=ST(1); TOP+=1; ST(0)=y*log2(x+1);
Вычисление выражения y*log2(x+1)
15.
Пример 1int main()
{
static float a = 2.5;
static float b = 1.5;
static float c = 0;
__asm
{
finit
fld a
fld b
fadd
fstp c
}
}
16.
Пример 2int main()
{
static float data[] = { 6.0, 2.0, 4.5, 3.2 };
static float c = 0;
// 6.0 * 2.0 + 4.5 * 3.2 <=> 6.0 2.0 * 4.5 3.2 * +
__asm
{
finit
fld data
fmul data + 4
fld data + 8
fmul data + 12
fadd
fstp c
}
}