汇编 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]