2017-07-04 8 views
0

例如如何从arm组件向c函数返回一个寄存器的值?在另一.S

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

调用addFunction()确定指标文件中像

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

现在如何返回存储R2的值。因此c程序中的变量z会得到正确的值。我可以用指针从c &更新asm中的地址。我不想这样。帮帮我!

+0

据我所知返回值是R0,因此使用'加R0,R0,r1'反而会做的工作(和你需要返回到来电者,当然) – Tommylee2k

+0

@ Tommylee2k ..这也是参考中提到的。我尝试过,但没有工作。 – sankar

+0

其工作..我的原始程序有逻辑错误。无论如何,这个问题也会对其他人有所帮助 – sankar

回答

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 
+0

@ Tommylee2k积分也可以使用 – Seoul

相关问题