难度:★ 本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。
打开某些启动文件或汇编头文件,你可能会看到这样的代码:
stack_ptr RN R13
link_ptr RN R14
prog_ptr RN R15
或者更语义化的:
BASE_ADDR RN R0
OFFSET RN R1
CNT RN R2
RN 是 ARM 汇编器的一条伪指令,全称是 ReName——给寄存器起个新名字。
很多初学者第一次看到时,以为这是某种“定义变量”的操作,或者以为它会在硬件层面产生什么特殊效果。
但真相是:它什么都不“产生”。 不生成指令,不分配内存,不影响二进制编码。它只是让程序员在写代码时,可以用一个有意义的名字代替 R0、R1 这种干巴巴的编号。
这就是典型的“语法糖”。
但问题来了:如果它真的这么“无用”,为什么 ARM 工具链要专门设计它?为什么启动文件和底层驱动库里大量使用它?
今天这篇文章,就来彻底拆解 RN 的真面目。我们会发现:最不起眼的“糖”,往往藏着工程实践中最沉痛的
