Здравствуйте, я изучаю сборку x86 FPU, и у меня есть простой вопрос, на который я не могу найти ответа:
Как переместить значение из 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
ST(0)
илиXMM0
. Никогда вeax
, потому что тогда вызывающему абоненту придется вернуть его обратно вST(0)
илиXMM0
, чтобы использовать его. - person Peter Cordes   schedule 11.11.2017