读书笔记——Windows环境下32位汇编语言程序设计(3)求复数模的子程序

时间:2021-03-25 04:53:01

3.6.1.1中的例子

_Calcproc _dwX,_dwY
local@dwResult

finit
fild_dwX
fldst(0)
fmul;i*i
fild_dwY
fldst(0)
fmul;j*j
fadd;i*i+j*j
fsqrt;sqrt(i*i+j*j)
fistp@dwResult;put result
moveax,@dwResult
ret

_Calcendp

以下指令解释来自百度百科

FINIT指令(0xdb,0xe3)用来清除浮点数据寄存器栈和异常,初始化FPU。为程序提供一个“干净”的初始状态。否则,遗留在浮点寄存器栈中的数据可能会产生堆栈溢出。该指令清除浮点数据寄存器栈和异常。一般用于驱动程序中的入口点,防止驱动蓝屏。同样,该指令也用于浮点传送程序。(FPU:(Float Point Unit,浮点运算单元)FPU是专用于浮点运算的处理器,以前的FPU是一种单独芯片,在486之后,英特尔把FPU集成在CPU之内。)

FILD 是将整数转化为长双精FP80压栈(压到st0)。

FLD是Intel的指令集协处理器的汇编指令,FLD 指令用于把浮点数字传送入和传送出FPU寄存器.

-----------------------------------------------------------------------------

为什么我在intel的手册上看到的FMUL指令是有操作数的?