首页 > 其他 > 详细

ARM指令中的函数调用

时间:2014-03-05 11:24:47      阅读:546      评论:0      收藏:0      [点我收藏+]

1. 重要寄存器

SP 栈指针,  每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性

LR 链接寄存器,一般用来存储返回地址;在执行BL或BLX等指令时,会自动存储下一条指令地址,即返回地址

PC 程序计数器,存储将要执行的指令

 

2. 程序跳转

B <label>   ;<label>--> PC,即跳转到label

BL <label>  ;将当前指令的下一条指令的地址存储到LR,然后跳转到label  <label>--> PC

BX Rm        ;指令集的切换,跳转到另一指令集的label;

BLX Rm      ;将当前指令的下一条指令的地址存储到LR,然后跳转到另一指令集的地址处label  <label>--> PC

 

-----

看到这里,我们需要注意不是所以的函数调用都遵循AAPCS调用方式,相反,部分ARM c编译器可能强制将返回地址存放在栈上,然后使用B或BX这样的强制调转指令进行跳转。

Note that, in practice, not all function calls follow the AAPCS calling conventions: Instead of transferring the return address to lr register, the ARM C compiler may enforce the return address to be push onto the stack and afterwards performs a direct branch to the function through a B or BX instruction.

ARM指令中的函数调用,布布扣,bubuko.com

ARM指令中的函数调用

原文:http://www.cnblogs.com/rainduck/p/3580773.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!