微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM指令中的函数调用

ARM指令中的函数调用

时间:11-20 来源:互联网 点击:
1. 重要寄存器

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

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

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

2. 程序跳转

B

BL

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

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

--

看到这里,我们需要注意不是所以的函数调用都遵循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.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top