260 likes | 458 Views
FPU. Архитектура сопроцессора Команды сопроцессора Организация взаимодействия СР и FPU. Программная модель сопроцессора. Control Word Register. rc. pc. pm. um. om. zm. dm. im. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0. Управление округлением.
E N D
FPU Архитектура сопроцессора Команды сопроцессора Организация взаимодействия СР и FPU
Control Word Register rc pc pm um om zm dm im 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Управление округлением Управление точностью Маски исключений Status Word Register b 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 Ошибка работы стека Флаги исключений
Управление точностью (pc) Длина мантиссы: 00 – 24 бита 01 – 53 бита 11 – 64 бита Управление округлением (rc) Пусть: m – точное значение результата a и b – ближайшие представимые в регистре сопроцессора точно числа с недостатком и с избытком 00 – к ближайшему из a и b 01 – c недостатком (=а) 10 – с избытком (=b) 11 – отбрасывание дробной части(для целочисленной арифметики)
Биты кода условия с0,с1,с2,с3 Fstsw ax Sahf J*** 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 b c3 top c2 c1 c0 es sf pe ue oe ze de ie sf zf af pf cf
Tags Word Register 15 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 2 Передачи данных ST(I) fld fbldfbstp M80 M32,64,80 fxch ST(I) fist M16,32 fst ST(I) fild M16,32,64 M32,64
Вещественныхfcom fcomp(p)fucom(p)(pp) Целыхficom(p) Анализfxam С нулемftst Сравнения данных ST(I) fcom(p) M32,64 fucom ST(I) ficom M16,32 fcompp fxam ftst
Вещественные Сложениеfadd(p) Вычитаниеfsub(r) fsub(r)p Умножениеfmul(p) Делениеfdiv(r) fdiv(r)p Целочисленные Сложениеfiadd Вычитаниеfisub(r) Умножениеfimul Делениеfidiv(r) Арифметические faddfsub,fsubrfmulfdiv,fdivr faddpfsubp,fsubrpfmulpfdivp,fdivrp fiaddfisub,fisubrfimulfidiv,fidivr M32,64 ST(I) ST(I),ST M16,32 ST,ST(I) ST(I),ST
Без параметров:КОП ;КОП 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: … sf zf af pf cf * 0 * * * 0 * 0
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 Вспомогательные арифметические
Тригонометрическиеfsin fsincosfcosfptanfpatanТригонометрическиеfsin fsincosfcosfptanfpatan Степенные и логарифмические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 Работы со стекомffreeST(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 Команды управления Без обработки исключительных ситуаций