) , . FPU.
) .
MF (memory format) :
00 , (32 )
01 (32 )
10 , (64 )
11 (16 ) (80 )
) FPU
reg ST(i). R (reverse) , (R=0) (R=1), .. . P (Pop) , (P = 1 -> TOP + 1) (P = 0)
) , . .
) FPU, , .
FPU 5 :
1)
2)
3)
4)
5)
:
- (TOP--) | PUSH
- ST(0)
FLD r/m
FILD m
FBLD m
FLD ST(0);
FLD QWORD PTR [bx];
FILD WORD PTR AR1[si];
:
, .. ST(0) TOP SW
FST r/m;
FST mem ->
FIST m;m -> , ( FPU)
RC , .
FST ST(4);ST(0) -> ST(4)
FIST WORD PTR MEM1;ST(0) -> MEM1 ( )
FST DWORD PTR MEM2;ST(0) -> MEM2 (.)
FXCH reg ST(0) . . :
FXCH st(5); st(0) ß à st(5).
FLDZ - +0.0
FLD1 - ------------------- 1.0
FLDPI - ------------
FLDLG2 --------- log10 (2)
FLDLN2 --------- ln(2)
FLDL2T ---------- log2(10)
FLDL2E ---------- log2(e)
2.
:
F (floating) ( )
|
|
I (integer) , (Binary-coded decimal) ,
R ( )
() , .
+, -, *, / - ( ) :
ß () ()
(-) (/) :
ß () ()
ST(0) - . :
FADD; st(0) + st(1) à st(0)
FADD qword ptr [bx]; st(0) + (64) à st(0)
FADD mem1
FADDP; st(1) + st(0) à st(1), TOP++, st(1) à st(0)
, | |||
FADD | FIADD | FADDP | (+) |
FSUB | FISUB | FSUBP | (-) |
FSUBR | FISUBR | FSUBRP | |
FMUL | FIMUL | FMULP | (*) |
FDIV | FIDIV | FDIVP | (/) |
FDIVR | FIDIVR | FDIVRP |
.
FSUB; [st(0), st(1)] à st(0) st(1) à st(0);
FSUB mem32/64; mem . : st(0) [mem] à st(0).
FSUB op1, op2; 1 st(0) |st(i) 2, , st(i)|st(0);
1) st(0) st(i) à st(0)
2) st(i) st à st(i)
:
.DATA
x dd 20.0
y dd 5.0
.CODE
FLD x; st = 20.0
FSUB y; st = 15.0
FLD y; st = 5, st(1) = 15.0
FSUB st(1), st(0); st = 5.0, st(1) = 10.0
FSUBP;
: st(1) st(0) à st(1); TOP++ à rezultat st(0)
, FSUB, (st(1) st(0) à st(1)), FSUBP st(1), st(0) FSUB st(1), st
FSUBP st(i); st(i) - , :
st(i) st à st(i); TOP++; st(i-1);
FSUBP st(i), st(0); .
:
.DATA
x dd 20.0
y dd 5.0
.CODE
.
.
FLD x; st(0) = 20.0
FLD y; st(0) = 5; st(1) = 20.0
FSUBP; st(0) = 15.0; (st = 5, st(1) = 15, TOP++, st =15.)
FLD y; st = 5.0, st(1) =15.
FSUBP st(1), st(0); st(0) =10.0
FSUBR - . :
st(1) st(0) à st(0)
FSUBR mem32/64; [ mem32/64 ] st à st
FSUBR st(0), st(i); st(i) - st à st
FSUBR st(i), st; st st(i) à st(i)
:
.DATA
x dd 20.0
y dd 5.0
.CODE
.
FLD y; st(o) = 5.0
FSUBR x; st(o) = 15.0
FLD x; st = 20.0; st(1) = 15.0
FSUB st(1), st; st(1) = -5.0; st = 20.0
FSUBRP;
st(1) - st à st(1); TOP ++, st(1) à st(0).
FSUBRP st(i), st; st st(i) à st(i); TOP++; st(i) à st(i-1).
:
|
|
FABS; | st(0) | à st(0),
FCHS; st(0),
FRNDINT; RC ,
FSCALE; st(0) ( st(1)), .. st(0)= st(0) * 2 st(1) , st(1) .
FXTRACT; st(0) () à st(0), TOP --, à st(0), st(1).
FSQRT; st(0) à st(0).
SW (C0, C2, C3). , ( ) ( ). , , , . (). FSTSW ax SAHF C3, C2 C0 ZF, PF, F EFLAGS.
FCOM; st - st(1) à C3, C2, C0
FCOM op; st op à C3,C2, C0; op - st(i) .
3 | 2 | 0 | |
ST(0) > op | |||
ST(0) < op | |||
ST(0) = op | |||