因此,我无法理解如何在不同位置(FPU /内存/寄存器)之间存储/移动值。我已经尝试过查看手册和谷歌搜索,但没有找到任何有用的东西。所以我写了以下代码:
global _floTest
_floTest:
fld dword[esi-8] ;Load value into st0
fst dword [test] ;store st0 into [test]
mov EAX,[test] ;this line is useless
mov EAX,5
mov [test],EAX
fild dword[test] ;load st1 from [test]
fsub st0,st0 ;st0 = 0
fadd st0,st1 ;fadd st0,st1
ret
_flotest是一个由c程序调用的函数,它将float作为输入并返回一个float。目标汇编程序是NASM。
我不明白的主要事情是,中间部分(EAX)字面上对函数的输出没有任何影响,函数总是返回给定的值。我可以对EAX执行任意操作,它将始终返回初始值。如果我将5移入[test]然后从[test]加载st1不应该st1的值为5吗?