Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在x86_64位汇编语言中调用c pow函数_Assembly_X86_X86 64 - Fatal编程技术网

Assembly 在x86_64位汇编语言中调用c pow函数

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 ;

我想在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            ;  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 C
pow(double,double)
接受两个FP参数(因此xmm0和xmm1),而不是RDI中的整数。另外,千万不要用
pow
来摆正东西!!!使用
mulsd
。如果您正在编写自己的
pow(double,long)
,那么也要显示该代码。