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.