×
单片机 > 单片机程序设计 > 详情

ARM指令中的函数调用

发布时间:2020-08-25 发布时间:
|
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.

关键字:ARM指令  函数调用 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义