在ARM处理器的三级流水线架构中,“PC值 = 当前程序执行位置 + 8”是一个关键特性,由流水线的并行执行机制导致。以下通过具体案例逐步解析这一关系:
案例背景
假设ARM处理器处于ARM状态(指令长度固定为4字节),三级流水线结构如下:
• 取指(Fetch):从内存读取指令。
• 译码(Decode):解析指令操作。
• 执行(Execute):执行指令操作。
当流水线满负荷时,三条指令同时处于不同阶段。
具体案例解析
- 顺序执行场景
程序地址序列:
0x4000: AND R0, R1, R2 ; 指令A(执行阶段)
0x4004: SUB R3, R4, R5 ; 指令B(译码阶段)
0x4008: ADD R6, R7, R8 ; 指令C(取指阶段,PC指向此处)
• 当前程序执行位置:指令A正在执行(地址 0x4000)。
• PC值:指向正在取指的指令C(地址 0x4008)。
• 关系验证:
PC = 0x4008 = 当前执行位置(0x4000) + 8 ✅
原因:执行阶段比取指阶段落后两条指令(2 × 4字节 = 8字节)。
- 跳转指令场景
程序片段:
0x4000: ADD PC, PC, #4 ; 跳转指令(执行阶段)
0x4004: MOV R0, #1 ; 译码阶段(被丢弃)
0x4008: MOV R1, #2 ; 取指阶段(被丢弃,PC=0x4008)
0x