3.6.1.1中的例子
_Calc proc _dwX,_dwY local @dwResult finit fild _dwX fld st(0) fmul ;i*i fild _dwY fld st(0) fmul ;j*j fadd ;i*i+j*j fsqrt ;sqrt(i*i+j*j) fistp @dwResult ;put result mov eax,@dwResult ret _Calc endp
以下指令解释来自百度百科
FINIT指令(0xdb,0xe3)用来清除浮点数据寄存器栈和异常,初始化FPU。为程序提供一个“干净”的初始状态。否则,遗留在浮点寄存器栈中的数据可能会产生堆栈溢出。该指令清除浮点数据寄存器栈和异常。一般用于驱动程序中的入口点,防止驱动蓝屏。同样,该指令也用于浮点传送程序。(FPU:(Float Point Unit,浮点运算单元)FPU是专用于浮点运算的处理器,以前的FPU是一种单独芯片,在486之后,英特尔把FPU集成在CPU之内。)
FILD 是将整数转化为长双精FP80压栈(压到st0)。
FLD是Intel的指令集协处理器的汇编指令,FLD 指令用于把浮点数字传送入和传送出FPU寄存器.
-----------------------------------------------------------------------------
为什么我在intel的手册上看到的FMUL指令是有操作数的?