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

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指令是有操作数的?




原文地址:https://www.cnblogs.com/wlsandwho/p/4202149.html