设为首页 加入收藏

TOP

4.2.5 C语言代码中调用汇编函数
2013-10-12 06:56:29 来源: 作者: 【 】 浏览:90
Tags:4.2.5 语言 代码 调用 汇编 函数

4.2.5  C语言代码中调用汇编函数

C语言中调用汇编函数所涉及的关键点也是参数传递和函数返回问题。

1. 参数传递

在编译时,编译器将会对C函数的实参使用R0~R3进行传递(如果超过四个参数,则其余的参数使用栈进行传递),因此汇编函数可以直接使用R0~R3寄存器进行计算。

2. 函数返回

由于汇编代码是不经过编译器处理的代码,所以现场保护和返回都必须由程序员自己完成。通常情况下现场保护代码就是将本函数内用到的R4~R12寄存器压栈保护,并且将R14寄存器压栈保护,汇编函数返回时将栈中保护的数据弹出。

假设要设计一汇编函数,完成两整数相减(假设必须用R7和R8寄存器完成),并在C函数中调用。设计代码如下:

  1. ;汇编代码文件  
  2.     ;asses.S  
  3.     EXPORT sub1 ;声明该函数  
  4.     … …  
  5.     AREA Init,CODE,READONLY  
  6.     ENTRY  
  7.     … …  
  8. sub1  
  9.     STMFD sp!,{r7-r8,lr};保存现场  
  10.     MOV R7,R0   ;通过R0,R1寄存器传送参数  
  11.     MOV R8,R1  
  12.     SUB R7,R8  
  13.     MOV R0,R7  
  14.     LDMFD sp!,{r7-r8,pc};返回  
  15.     … …  
  16.     END  
  17.     //C文件  
  18.     //main.c  
  19.     int sub1(int,int);//函数声明  
  20.     … …  
  21.     int Main(  )  
  22.     {  
  23.         int x=20y=10;  
  24.         sub1(x,y) ;  
  25.     }  
  26.     … … 

备注:其实在上面例子中可以不用保存LR寄存器,但是如果在此汇编函数中调用其他函数,就必须保存LR寄存器了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.2.2 C语言中内嵌汇编代码 下一篇4.2.4 汇编代码中调用C函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: