Я не знаю, в чем проблема, потому что это отлично работает для SIN и COS. Для TAN он возвращает 0.0000 для 50.0 радиан. Но если я включил прокомментированную строку, она работает так, как ожидалось. Это странно, потому что TAN должен возвращать двойной в XMM0, а не RAX.FASM: Calling Tangent from GCC
;./fasm testing.asm
;gcc -s testing.o -o testing -lm
format elf64
extrn printf
extrn tan
section '.data' writeable align 16
rad dq 50.0
fmt db "%.5lf",0ah,0
section '.text' executable align 16
public main
main:
push rbp
mov rbp,rsp
pxor xmm0,xmm0
movq xmm0,[rad]
call tan
;movq rax,xmm0 ;works if I enable this. but SIN and COS don't need this
mov rdi,fmt
call printf
mov rsp,rbp
pop rbp
ret
В чем проблема?
'RAX' (фактически' AL') должно содержать количество используемых регистров XMM – user35443
Теперь вот в чем проблема. RAX не должен участвовать. Я ожидал, что возвращаемое значение в XMM0 будет использоваться далее printf как 2-й аргумент. – royalfinest