stm32 lr pc寄存器
时间: 2025-01-23 07:57:11 浏览: 58
### STM32 中 LR 和 PC 寄存器的功能与使用
#### 1. 链接寄存器 (Link Register, LR)
链接寄存器(也称为 R14),主要用于保存子程序返回地址。当执行 `BL` 或者 `BLX` 指令时,即发生过程调用的情况下,当前的程序计数器(PC)值会被复制到 LR 中作为后续跳转回原位置的基础[^3]。
此外,在 Cortex-M3 架构下,LR 还承担着额外的任务——它最底部的一位用来指示 Thumb 状态。这意味着如果该位为零,则表示接下来应解释成 16-bit 的 Thumb 指令;反之则代表即将解析的是混合有 32-bit 扩展指令集的代码片段[^1]。
```c
// 示例:函数调用前后 LR 的变化
void function_call_example(void){
// 函数内部...
}
int main(){
__asm volatile ("bl %0\n\t" : "=r"(function_call_example));
// 此处 LR 已经更新为main之后的地址
}
```
#### 2. 程序计数器 (Program Counter, PC)
程序计数器(通常指代 R15),负责指向正在被执行机器码的位置,并随着每次指令周期递增以追踪下一个待取指的目标地址。对于 ARM 处理器而言,由于采用流水线结构,实际上 PC 总是指向距离当前位置两条指令后的内存单元。
值得注意的是,在某些情况下,比如异常处理期间或是调试过程中,程序员可能需要手动调整 PC 来改变控制流走向。然而一般开发场景里并不推荐这样做,除非确实有必要绕过正常流程或实现特殊逻辑。
```assembly
; 修改 PC 实现简单跳转
MOV PC, #new_address ; 直接赋新址给 PC 完成交叉跳转
BX target_register ; 利用 BX 指令间接转移至目标寄存器所含地址
```
阅读全文
相关推荐



















