Таким образом, я пытаюсь заставить процессор вычислить x*log_2(y)
ниже мой текущий код сборки (синтаксис nasm). У меня есть входное значение для y в регистре XMM0
, и X будет константой 10.
MOVSD QWORD [RSP], XMM0 ;Copy result of prev calculation to the stack
FLD QWORD [RSP] ;Load the float from XMM0 to the fpu stack
;Load number 10 to the fpu stack
MOV RAX, 10
PUSH RAX
FLD QWORD [RSP] ;ST(0)
POP RAX
;Do the math y = xmm0, x=10 X*LOG2(Y)
FYL2X ;ST(1) = OUT
FSTP ;just remove ST(0), no need to preserve
FSTP QWORD [RSP];Pop the result from the logarithm to the stack
MOV RDI, QWORD [RSP]
call printfcallfloat
Я проверил со значением 2,0 в регистре XMM0, но я всегда получаю простые нули. Что я тут не так делаю?