FPU
Архитектура сопроцессора
Команды сопроцессора
Организация взаимодействия СР и FPU
Программная модель сопроцессора
Регистры
общего назначения
(Стек)
79 0 15 0
ST(0) CWR Управляю
щие регистры
ST(1) SWR
ST(2) TWR
ST(3) FPUFIP
ST(4)
ST(5)FDP
ST(6)
ST(7)
Control Word Registerrc pc pm um om zm dm im
Status Word Registerb c3 top c2 c1 c0 es sf pe ue oe ze de ie
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Маски исключений
Флаги исключений
ES – исключительная ситуация
Ie Invalid operation Error Oe Overflow Error
De Denormalized operand Error Ue Underflow Error
Ze divide by Zero Pe Precision Error
Управление округлением
Управление точностью
Ошибка работы стека
• Управление точностью (pc)
Длина мантиссы:
00 – 24 бита
01 – 53 бита
11 – 64 бита
• Управление округлением (rc)
Пусть:
m – точное значение результата
a и b – ближайшие представимые в регистре сопроцессора точно числа с недостатком и с избытком
00 – к ближайшему из a и b
01 – c недостатком (=а)
10 – с избытком (=b)
11 – отбрасывание дробной части (для целочисленной арифметики)
Биты кода условия с0,с1,с2,с3
c3 c2 c0
ST > операнд 0 0 0
ST < операнд 0 0 1
ST = операнд 1 0 0
Не сравнимы 1 1 1
b c3 top c2 c1 c0 es sf pe ue oe ze de ie15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
sf zf af pf cf
Fstsw ax
Sahf
J***
Tags Word Register15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Регистр стека:00 – занят допустимым ненулевым значением01 – содержит нулевое значение10 – содержит одно из специальных числовых значений11 – регистр пуст в него можно производить запись
Data Pointer RegisterInstruction Pointer Register
- для хранения адреса команды, вызвавшей исключительную ситуацию, и адреса её операнда.
Команды сопроцессора
Передачи данных Сравнения данных
Арифметические Трансцендентные
Управления
F***p – после операции производится выталкивание из стекаF***r(p) – реверсивное следование операндов в операциях – и /
Передачи данных• Вещественных
fld fst(p)• Целых
fild fist(p)• Десятичных
fbld fbstp• Обмена
fxch
• Загрузка констант
ST(0)fldz 0fld1 1fldpi π fldl2t log210fldl2e log2efldlg2 lg 2fldln2 ln 2fld
M32,64,80
ST(I)
fild M16,32,64
fbldfbstp
M80
fist M16,32fst
M32,64
ST(I)fxch
ST(I)
Сравнения данных• Вещественных
fcom fcomp(p)fucom(p)(pp)
• Целыхficom(p)
• Анализfxam
• С нулемftst
fcom(p)ST(I)
M32,64
fucomST(I)
ficom M16,32
fcompp
fxam
ftst
FXAM
c1 c3 c2 c0 Содержимое ST
Знак ST 0 0 0 Неизвестный формат
0 0 1 Не число
0 1 0 Корректное вещественное число
0 1 1 Бесконечность
1 0 0 Нуль
1 0 1 Пусто
1 1 0 Денормализованное число
АрифметическиеВещественные• Сложение
fadd(p)• Вычитание
fsub(r) fsub(r)p• Умножение
fmul(p)• Деление
fdiv(r) fdiv(r)p
Целочисленные• Сложение
fiadd• Вычитание
fisub(r)• Умножение
fimul• Деление
fidiv(r)
faddfsub,fsubr
fmulfdiv,fdivr
M32,64
ST,ST(I)
ST(I),ST
faddpfsubp,fsubrp
fmulpfdivp,fdivrp
ST(I)
ST(I),ST
fiaddfisub,fisubr
fimulfidiv,fidivr
M16,32
• Без параметров:КОП ; КОП ST(1),ST(0) + pop
• С одним параметром:КОП источник ; КОП ST(0),источник
• С двумя параметрами:КОП приемник,источник
; приемник = приемник коп источникКОПr приемник,источник
; приемник = источник коп приемник
.dataa dd -1.5b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1
-1.5
.dataa dd -1.5b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1fadd
1.
-1.5
.dataa dd -1.5b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1faddfld1
-0.5
.dataa dd -1.5b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1faddfld1fsub st,st(1)
1
-0.5
.dataa dd -1.5b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1faddfld1fsub st,st(1)fdivr st(1),st
1.5
-0.5
.dataa dd -1.5b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1faddfld1fsub st,st(1)fdivr st(1),st
1.5
-3.
a dd -1.5b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1faddfld1fsub st,st(1)fdivr st(1),stfild bfbld cfsub
67890.
98765.
1.5
-3.
b dd 98765c dt 67890hd dw 15
.codemov ax,@datamov ds,axfld afld1faddfld1fsub st,st(1)fdivr st(1),stfild bfbld cfsubfbstp c
30875.
1.5
-3.
c dt 30875hd dw 15
.codemov ax,@datamov ds,axfld afld1faddfld1fsub st,st(1)fdivr st(1),stfild bfbld cfsubfbstp cfcompp ; st-st(1)
1.5
-3.
fcompp ; st-st(1)fstsw axsahf ; c3c2c0=000
jp m1 ; не сравнимы
jc m2 ; st < st(1)
jz m3 ; st = st(1)
m4: … ; st > st(1)
m3: …
m2: …
m1: …
* 0 * * * 0 * 0
sf zf af pf cf
Вспомогательные арифметические• Fsqrt• Fabs• Fchs• Fxtract• Fprem• Fscale• Frndint
– Sqrt(st) st– Abs(st) st– +/- st st– Мантисса st, порядок st(1)– st mod st(1) st– st*2st(1) st– [st] st
Трансцендентные функции• Тригонометрические
fsinfsincosfcosfptanfpatan
• Степенные и логарифмическиеf2xm1fyl2xp1fyl2x
sin(st) stsin(st) st, cos(st) st(1)cos(st),tg(st) st, fld1arctg(st/st(1)) st
2st-1 st; -1<x<1st(1)*log2(st+1) st(1), popst(1)*log2(st) st(1), pop
Команды управления• Инициализация сопроцессора
f(n)init• Работы со средой
f(n)save memf(n)stenv/fldenv memf(n)clexfldcw/f(n)stcw m16f(n)stsw m16frstor mem
• Работы со стекомffree ST(I)
• Синхронизации CP и FPUwait/fwait
cwr=037f swr=0000 twr=ffff
cwr,swr,twr,st,…st(7),fdp,fipcwr,swr,twr,fip,fdpswr=0*** **** 0000 0000
Без обработки исключительных
ситуаций