汇编浮点指令fld、fstp

来源:互联网 发布:java集合框架视频教程 编辑:程序博客网 时间:2024/05/17 22:09
FLD类似于   PUSH指令
FSTP类似于  POP指令
FADD类似于  ADD指令

1、FLD

指令格式:

FLD STReg/MemReal

指令功能:

将浮点数据压入协处理器的堆栈中。当进行内存单元内容压栈时,系统会自动决定传送数据的精度。比如:用DD或REAL4定义的内存单元数值是单精度数等。

STReg是处理器堆栈寄存器ST(0)~ST(7)。

例如:

 

.387

data1  DWORD 123, -543

data2  REAL8 -321.5

data3  REAL10 2.5

……

FLD  data1  ;压一个单精度数据进栈

FLD  data2  ;压一个双精度数据进栈

FLD  ST(0)  ;把堆栈寄存器ST(0)的值再压进栈

FLD  data3  ;压一个扩展精度数据进栈

2、FST

 

指令格式:

指令功能:

FST  STReg/MemReal

将协处理器堆栈栈顶的数据传送到目标操作数中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成相应精度的数据。

3、FSTP

 

指令格式:

FSTP  STReg/MemReal

指令功能:

与FST相类似,所不同的是:指令FST执行完后,不进行堆栈的弹出操作,即:堆栈不发生变化,而指令FSTP执行完后,则需要进行堆栈的弹出操作,堆栈将发生变化。

从上面的浮点传送指令中可以看出,不仅可以对内存变量进行传送,也可以进行寄存器之间的传送,这一点是整型数据以及BCD型数据传送指令所不具有的。


举例:
汇编指令:fld dword ptr ds:[eax+0xC]   意思是将[eax+c]的值以浮点型放进ST0里面
汇编指令:fstp dword ptr ss:[ebp-0x20] 意思是将ST0里面的浮点值,放到ebp-20这个内存里面,同是清空ST0里面的值