Assembly 在x86_64位汇编语言中调用c pow函数
我想在c中调用pow函数,请解释如何从汇编中调用c函数,第一个参数是double,第二个参数是int 这是我到目前为止的代码Assembly 在x86_64位汇编语言中调用c pow函数,assembly,x86,x86-64,Assembly,X86,X86 64,我想在c中调用pow函数,请解释如何从汇编中调用c函数,第一个参数是double,第二个参数是int 这是我到目前为止的代码 segment .text global bmi bmi: push rbp mov rbp,rsp movsd xmm8,xmm0 ; w movsd xmm7,xmm1 ; h movsd xmm0,xmm1 ;
segment .text
global bmi
bmi:
push rbp
mov rbp,rsp
movsd xmm8,xmm0 ; w
movsd xmm7,xmm1 ; h
movsd xmm0,xmm1 ; h
mov rdi,2
call pow ; h^2
divsd xmm8,xmm0 ; w/h
movsd xmm0,xmm8 ; return w
mov rbp,rsp
push rbp
ret
谢谢您需要解释什么?您是否查阅了呼叫会议文档?即使从代码中,您也可以看到浮点参数在
xmm0
中传递,整数在rdi
中传递。您将在xmm0
中返回结果。你在用什么操作系统?请注意,xmm7
和xmm8
是调用方保存的。pow
函数可能会破坏它们,因此您不能依赖值不变。附言:当然,如果你只需要一个数字的平方,你应该直接乘以它本身。哦,你的尾声被打断了。当然应该是mov-rsp,rbp;pop-rbp;ret
反转序言。ISO Cpow(double,double)
接受两个FP参数(因此xmm0和xmm1),而不是RDI中的整数。另外,千万不要用pow
来摆正东西!!!使用mulsd
。如果您正在编写自己的pow(double,long)
,那么也要显示该代码。