汇编 fsub ,fmul,fdiv,fild,CVTTPS2PI 指令

知识点:
 浮点指令 fsub

一、浮点指令fsub
   格式
   fsub memvar // st0=st0-memvar
知识点:
 浮点指令 fmul

一、浮点指令fmul
   格式
   fmul  memvar // st0=st0*memvar
   
int _tmain(int argc, _TCHAR* argv[])
{
	double f1,f2;//float;
	f1=3.333f;
	f2=6.366f;
	f1=f1*f2;

//00401003  |.  83EC 10       SUB ESP,10                               ;  double f1,f2;
//00401006  |.  DD05 F0204000 FLD QWORD PTR DS:[4020F0]
//0040100C  |.  DD5D F0       FSTP QWORD PTR SS:[EBP-10]               ;  f1=[4020f0]=3.333;
//0040100F  |.  DD05 E8204000 FLD QWORD PTR DS:[4020E8]
//00401015  |.  DD5D F8       FSTP QWORD PTR SS:[EBP-8]                ;  f2=[4020e8]=6.366
//00401018      DD45 F0       FLD QWORD PTR SS:[EBP-10]
//0040101B      DC4D F8       FMUL QWORD PTR SS:[EBP-8]                ;  st0=st0*f2=6.366*3.33
//0040101E      DD5D F0       FSTP QWORD PTR SS:[EBP-10]               ;  f1=21.21788
return 0;
}
知识点:
 038-浮点指令FDIV(除)
一、浮点指令FDIV   格式
   FDIVmemvar // st0=st0 / memvar

int _tmain(int argc, _TCHAR* argv[])
{
  float f1,f2;
  f1=3.33;
  f2=2.00;
  f1=f1/f2;
 
//00401003  |.  83EC 08       SUB ESP,8                                ;  float f1,f2;
//00401006  |.  D905 E8204000 FLD DWORD PTR DS:[4020E8]
//0040100C  |.  D95D F8       FSTP DWORD PTR SS:[EBP-8]                ;  f1=3.33
//0040100F  |.  D905 E4204000 FLD DWORD PTR DS:[4020E4]
//00401015  |.  D95D FC       FSTP DWORD PTR SS:[EBP-4]                ;  f2=2.00
//00401018  |.  D945 F8       FLD DWORD PTR SS:[EBP-8]
//0040101B  |.  D875 FC       FDIV DWORD PTR SS:[EBP-4]                ;  st0=st0/f2
//0040101E  |.  D95D F8       FSTP DWORD PTR SS:[EBP-8]                ;  f1=1.665


	return 0;
}
知识点:
 038-浮点指令FILD
一、浮点指令FILD格式
  整数入栈指令 //fld
  FILD memvar // st0=(double)memvar

与之相似的指令有FIST 把st0的数转换成整数放置到变量中
浮点指令CVTTPS2PI

一、浮点指令CVTTPS2PI 
     把mem这个浮点数截断取整 后放到通用寄存器里边
    CVTTPS2PI mm0,mem// mm0
 
  CVTTPS2PI MM0,DQWORD PTR SS:[ebp]  //[eax]
  CVTTPS2PI MM0,DQWORD PTR SS:[ESP]
原文地址:https://www.cnblogs.com/whzym111/p/6370648.html