2.3 寄存器规格说明
在C语言中寄存器使用规则如表,因此可以编写汇编带参数或返回的库,参数或结果在如下对应功能的寄存器中。另外编写汇编库应该适应C规则下占用寄存器的压栈出栈保护。
表2.1 寄存器约定
| 寄存器名称 | 用途 | 跨函数调用时是否保存 |
|---|---|---|
| R0 | gp/传参/返回值 | 不保存 |
| R1 | gp/传参/返回值 | 不保存 |
| R2 - R4 | gp/传参 | 不保存 |
| R5 | gp/scratch | 不保存 |
| R6 | gp/fp | |
| R7 - R12 | gp | |
| R13 | lr/gp/函数返回地址 | |
| R14 | sp/fixed | 否 |
| R15 | pc/fixed | 否 |
在表2.1中,寄存器支持R0~R15,gp表示该寄存为通用寄存器,可参与任何操作,fixed表示该寄存器为特殊寄存器,具有固定的用途,寄存器分配时,不参与分配。R6-R13用于保存生命周期跨函数调用的变量。R6在特殊情况下可替代实现FP指针的功能,如临时栈空间开辟。R13别名为LR,R14别名为SP,R15别名为PC。
如果中断和外部函数同时使用R6以上的寄存器时,应添加压栈出栈指令。
若中断逻辑中使用R5,可在中断顶层函数添加压栈出栈保护R5。