Cortex-M 上编写汇编函数
在 ARM Cortex-M 系列单片机中使用汇编语言编写函数时,需要特别注意寄存器的使用、栈管理、调用约定以及与 C 语言的兼容性。以下是关键注意事项和示例说明:
1. 遵循 AAPCS 调用约定
ARM 定义了 AAPCS(ARM Architecture Procedure Call Standard),规定了函数调用时寄存器的使用规则:
- 调用者保存(Caller-Saved):
R0-R3
,R12
,LR
- 调用函数前,如果这些寄存器的值需要保留,调用者负责保存它们。
- 被调用者保存(Callee-Saved):
R4-R11
,SP
- 如果被调函数修改了这些寄存器,被调函数必须在入口处保存它们,并在退出时恢复。
示例:函数入口/出口
my_function:
PUSH {R4, R5, LR} ; 保存被修改的寄存器(R4, R5)和 LR(如果需要嵌套调用)
... ; 函数逻辑(可使用 R0-R3 自由修改)
P