我们都知道汇编整形数加减运算可以使用add/sub来进行运算,比较简单,但是如果要进行浮点运行,就不能直接用add/sub来进行运算了,比较麻烦一些,所以今天把浮点运算方法记录一下,以免后面用到的时候又忘了。

浮点运算需要用到的几个指令:

  • FLD:类似PUSH指令,把当前浮点数压入堆栈。
  • FILD:类似FLD,只是把整形数压入堆栈。
  • FSTP:类似POP指令,把堆栈顶部浮点数出栈。
  • FISTP:类似FSTP,只是把浮点数出栈为整形数。

需要注意的是FLD/FSTP不能直接压入寄存器的数据,只能压入寄存去指向的内存地址的数据。

下面是浮点数减法例子,思路是先转为整形数字,作减法后再转为浮点数。

fld dword ptr [edi+30]
sub esp, 8  // 栈顶加多8位
fistp dword ptr [esp+4]
sub [esp+4], 70
fild dword ptr [esp+4]
fstp dword ptr [esp+4]

类型转换 int to float

fild dword ptr [eax]
Fstp dword ptr [eax]