【发布时间】:2012-08-10 10:39:44
【问题描述】:
你好,我正在学习 x86 FPU 组装,我有 有一个简单的问题,我找不到答案:
如何从 ST(0) 转移价值(FPU 的顶部
stack ) 到 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数的位表示还是整数表示(转换)?
-
我想也许我犯了某种错误,我需要编写类似 c 的函数来返回一个浮点数 - 我误认为 ret 值是 eax 的,但这是浮点数所以也许我应该把它留在st0上-(现在我意识到了,)除了我的FPU点(float*,float*)计算还可以吗??
-
是的,在通常的调用约定中,FP 值在
ST(0)或XMM0中返回。永远不要在eax中使用,因为调用者必须将其退回到ST(0)或XMM0才能使用它。