记录用。。arm汇编










链接寄存器

目录

1来源

2作用

链接寄存器是ARM处理器中的一个有特殊用途的寄存器。

1来源编辑

ARM的user模式下,ARM CPU有16个数据寄存器,被命名为R0~R15(这个要比X86多一些),它们均为32位寄存器,其中的R13~R15有特殊用途。其中R14被称为“链接寄存器”(Link Register,LR)。

2作用编辑

当调用一个 函数时,返回地址被自动保存到链接寄存器,在函数返回时有效。这使得快速进入和返回“叶”函数(不调用其它函数的函数)成为可能。如果函数是分支的一部分(即函数中又调用另一个函数),则链接寄存器必须入栈(R13)。



用C语言写的ARM程序调用C函数和普通的C语言格式一样,没有特殊的地方;
如果用C语言调用ARM的汇编,则有规则。
在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS(ARM-THUMB procedure call standard )规则。ATPCS规定了一些子程序间调用的基本规则,比如:
寄存器的使用规则
子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。
在子程序中,使用寄存器r4~r11保存局部变量。
寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。  
堆栈的使用规则
堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。 
参数的传递规则
整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;
子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。
汇编程序调用C程序的方法为:首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。 
C程序调用汇编子程序的方法为:首先在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;然后在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值