2017-07-04 9 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

相關問題