喂,我正在学习的x86 FPU组装,我已经 有一个简单的问题,我无法找到答案:如何将ST(0)移动到EAX?
如何值从ST(0)
(FPU的 堆栈的顶部),以EAX
动?
也:
是此代码正确:
; multiply (dot) two vectors of 3 floats passed by pointers as arg 1 arg 2
; passings are ok I think, but not sure if multiplies-adds are ok
push ebp
mov ebp, esp
mov eax, dword [ebp+8H]
mov edx, dword [ebp+0CH]
fld qword [eax]
fmul qword [edx]
fld qword [eax+4H]
fmul qword [edx+4H]
fld qword [eax+8H]
fmul qword [edx+8H]
faddp st1, st(0)
faddp st1, st(0)
fstp qword [ebp+10H] ; here I vould prefer 'mov eax, st0'
pop ebp
ret
你想在EAX或整数表示(转换)的fp数字的位表示? – Necrolis 2012-08-10 10:43:54
我想也许我做了某种错误,我需要编写类似C的函数来返回一个浮点数 - 我错误地认为ret值是由eax决定的,但这是浮点数,所以也许我应该把它放在st0上 - (现在我意识到了)除了我的FPU点(float *,float *)计算好吗? – 2012-08-10 10:51:14
是的,在通常的调用约定中,FP值在'ST(0)'或'XMM0'中返回。不要在'eax'中,因为那么调用者必须将其反弹回'ST(0)'或'XMM0'来使用它。 – 2017-11-11 16:31:30