如何将臂组件的寄存器值返回到c函数?

时间:2017-07-04 06:58:19

标签: c function assembly arm return

例如

extern int addfunction(int,int);
main(){
int a=5,b=6,z;
z=addfunction(a,b);
printf("%d",c);
}

addfunction()defintion在另一个.s文件中,如

.global addfunction
addfunction:
    @ value a will be in R0 & R1 respectively
    add r2, r0, r1    @ r2=r0+r1

现在如何返回存储r2的值。这样c程序中的变量z就能得到正确的值。我可以用c&更新asm中的地址。我不想这样。救命!

1 个答案:

答案 0 :(得分:0)

here

  

标准的32位ARM调用约定将16个ARM寄存器分配为:

     
    

r0到r3:用于保存传递给子程序的参数值,并保存从子程序返回的结果。

  

因此将r0设置为返回值

.global addfunction
addfunction:
    @ value a will be in R0 & R1 respectively
    add r0, r0, r1    @ r0=r0+r1