跳到主要内容

2.3 寄存器规格说明

在C语言中寄存器使用规则如表,因此可以编写汇编带参数或返回的库,参数或结果在如下对应功能的寄存器中。另外编写汇编库应该适应C规则下占用寄存器的压栈出栈保护。

表2.1 寄存器约定

寄存器名称用途跨函数调用时是否保存
R0gp/传参/返回值不保存
R1gp/传参/返回值不保存
R2 - R4gp/传参不保存
R5gp/scratch不保存
R6gp/fp
R7 - R12gp
R13lr/gp/函数返回地址
R14sp/fixed否
R15pc/fixed否

在表2.1中,寄存器支持R0~R15,gp表示该寄存为通用寄存器,可参与任何操作,fixed表示该寄存器为特殊寄存器,具有固定的用途,寄存器分配时,不参与分配。R6-R13用于保存生命周期跨函数调用的变量。R6在特殊情况下可替代实现FP指针的功能,如临时栈空间开辟。R13别名为LR,R14别名为SP,R15别名为PC。

如果中断和外部函数同时使用R6以上的寄存器时,应添加压栈出栈指令。

若中断逻辑中使用R5,可在中断顶层函数添加压栈出栈保护R5。