FPU Архитектура сопроцессора Команды сопроцессора Организация взаимодействия СР и FPU
Программная модель сопроцессора Регистры общего назначения (Стек) ST(0)CWR Управляющие регистры ST(1)SWR ST(2)TWR ST(3) FPU FIP ST(4) ST(5) FDP ST(6) ST(7)
Control Word Register rcpcpmumomzmdmim Status Word Register bc3topc2c1c0essfpeueoezedeie Маски исключений Флаги исключений ES – исключительная ситуация IeInvalid operation ErrorOeOverflow Error DeDenormalized operand ErrorUeUnderflow Error Zedivide by ZeroPePrecision Error Управление округлением Управление точностью Ошибка работы стека
Управление точностью (pc) Длина мантиссы: 00 – 24 бита 01 – 53 бита 11 – 64 бита Управление округлением (rc) Пусть: m – точное значение результата a и b – ближайшие представимые в регистре сопроцессора точно числа с недостатком и с избытком 00 – к ближайшему из a и b 01 – c недостатком (=а) 10 – с избытком (=b) 11 – отбрасывание дробной части (для целочисленной арифметики)
Биты кода условия с0,с1,с2,с3 c3c2c0 ST > операнд000 ST < операнд001 ST = операнд100 Не сравнимы111 bc3topc2c1c0essfpeueoezedeie sfzfafpfcf Fstsw ax Sahf J***
Tags Word Register Регистр стека: 00 – занят допустимым ненулевым значением 01 – содержит нулевое значение 10 – содержит одно из специальных числовых значений 11 – регистр пуст в него можно производить запись Data Pointer Register Instruction Pointer Register - для хранения адреса команды, вызвавшей исключительную ситуацию, и адреса её операнда.
Команды сопроцессора Передачи данныхСравнения данных АрифметическиеТрансцендентные Управления F***p – после операции производится выталкивание из стека F***r(p) – реверсивное следование операндов в операциях – и /
Передачи данных Вещественных fldfst(p) Целых fildfist(p) Десятичных fbldfbstp Обмена fxch Загрузка констант ST(0) fldz 0 fld1 1 fldpi π fldl2t log 2 10 fldl2e log 2 e fldlg2 lg 2 fldln2 ln 2 fld M32,64,80 ST(I) fildM16,32,64 fbld fbstp M80 fistM16,32 fst M32,64 ST(I) fxch ST(I)
Сравнения данных Вещественных fcomfcomp(p) fucom(p)(pp) Целых ficom(p) Анализ fxam С нулем ftst fcom(p) ST(I) M32,64 fucom ST(I) ficomM16,32 fcompp fxam ftst
FXAM c1c3c2c0Содержимое ST Знак ST000Неизвестный формат 001Не число 010Корректное вещественное число 011Бесконечность 100Нуль 101Пусто 110Денормализованное число
Арифметические Вещественные Сложение fadd(p) Вычитание fsub(r)fsub(r)p Умножение fmul(p) Деление fdiv(r)fdiv(r)p Целочисленные Сложение fiadd Вычитание fisub(r) Умножение fimul Деление fidiv(r) fadd fsub,fsubr fmul fdiv,fdivr M32,64 ST,ST(I) ST(I),ST faddp fsubp,fsubrp fmulp fdivp,fdivrp ST(I) ST(I),ST fiadd fisub,fisubr fimul fidiv,fidivr M16,32
Без параметров: КОП; КОП ST(1),ST(0) + pop С одним параметром: КОП источник; КОП ST(0),источник С двумя параметрами: КОП приемник,источник ; приемник = приемник коп источник КОПr приемник,источник ; приемник = источник коп приемник
.data add-1.5 bdd98765 cdt67890h ddw15.code movds,ax flda fld1 -1.5
.data add-1.5 bdd98765 cdt67890h ddw15.code movds,ax flda fld1 fadd
.data add-1.5 bdd98765 cdt67890h ddw15.code movds,ax flda fld1 fadd fld1 -0.5
.data add-1.5 bdd98765 cdt67890h ddw15.code movds,ax flda fld1 fadd fld1 fsubst,st(1)
.data add-1.5 bdd98765 cdt67890h ddw15.code movds,ax flda fld1 fadd fld1 fsubst,st(1) fdivrst(1),st
.data add-1.5 bdd98765 cdt67890h ddw15.code movds,ax flda fld1 fadd fld1 fsubst,st(1) fdivrst(1),st
add-1.5 bdd98765 cdt67890h ddw15.code movds,ax flda fld1 fadd fld1 fsubst,st(1) fdivrst(1),st fildb fbldc fsub
bdd98765 cdt67890h ddw15.code movds,ax flda fld1 fadd fld1 fsubst,st(1) fdivrst(1),st fildb fbldc fsub fbstpc
cdt30875h ddw15.code movds,ax flda fld1 fadd fld1 fsubst,st(1) fdivrst(1),st fildb fbldc fsub fbstpc fcompp; st-st(1)
fcompp; st-st(1) fstswax sahf; c3c2c0=000 jpm1; не сравнимы jcm2; st < st(1) jzm3; 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*2 st(1) st –[st] st
Трансцендентные функции Тригонометрические fsin fsincos fcos fptan fpatan Степенные и логарифмические f2xm1 fyl2xp1 fyl2x sin(st) st sin(st) st, cos(st) st(1) cos(st), tg(st) st, fld1 arctg(st/st(1)) st 2 st -1 st; -1
Команды управления Инициализация сопроцессора f(n)init Работы со средой f(n)save mem f(n)stenv/fldenv mem f(n)clex fldcw/f(n)stcw m16 f(n)stsw m16 frstor mem Работы со стеком ffree ST(I) Синхронизации CP и FPU wait/fwait cwr=037f swr=0000 twr=ffff cwr,swr,twr,st,…st(7),fdp,fip cwr,swr,twr,fip,fdp swr=0*** **** Без обработки исключительных ситуаций