arm 汇编调用c函数与c函数调用arm汇编

来源:互联网 发布:师洋淘宝一年赚 编辑:程序博客网 时间:2024/06/18 12:49

1、汇编调用c函数:

汇编代码:

add_s.s

import addarea codeseg,code,readonlyentrymov r0,#1mov r1,#2mov r2,#3mov r3,#4mov r4,#5stmfd r13!,{r4}/*由于arm只有r0-r3是传参寄存器,在这里要传递5个参数,所以要用到栈,将r4入栈*/bl add/*调用add.c*/ nopnopend



c函数代码:

add_c.c

extern int add(int x,int y,int z,int k,int m);int add(int x,int y,int z,int k,int m){return(x+y+z+k+m);}

2、c函数调用汇编:

c函数代码:

main_c.c

#include <stdio.h>extern int addfive(int,int,int,int,int,int);int main(void){int a=1,b=2,c=3,d=4,e=5,f=6;printf("a=%d\n",addfive(a,b,c,d,e,f));return 0;}

汇编代码:

main_s.s

area codeseg,code,readonlyexport addaddmov r5,#0add r5,r5,r0/*将r0+r5放入r5,下同*/add r5,r5,r1add r5,r5,r2add r5,r5,r3ldmia sp!,{r4}/*由于arm只有r0-r3是传参寄存器,在这里要传递5个参数,所以要用到栈,这里是从栈中取出一个数放到r4中*/add r5,r5,r4mov r0,r5/*函数返回时要返回r0中的值,所以将计算的和再放回r0*/mov pc,lr/*lr中存放的是在函数调用之前下一步要执行的指令,这里将其放回到pc中,下一步跳回到c函数中*/nopnopend






原创粉丝点击