ARM获得PC指针为何PC=PC+8

本文详细解析了ARM7三级流水线的工作原理,并解释了为何在ARM7中PC寄存器会遵循PC=PC+8的原则。通过具体实例说明了在执行指令时,PC总是指向第三条指令的位置。
转:http://hi.baidu.com/yedeqixian/item/36be5931536afb2ab3c0c565
1.为何ARM7中PC=PC+8

此处解释为何ARM7中,CPU地址,即PC,为何有PC=PC+8这一说法:

众所周知,AMR7,是三级流水线,其细节见图:

图表 23 AMR7三级流水线

ARM获得PC指针为何PC=PC+8 <wbr>-转


首先,对于ARM7对应的流水线的执行情况,如下面这个图所示:

 

ARM7

图表 24 ARM7三级流水线状态

ARM获得PC指针为何PC=PC+8 <wbr>-转

然后对于三级流水线举例如下:

图表 25 ARM7三级流水线示例

ARM获得PC指针为何PC=PC+8 <wbr>-转

 

从上图,其实很容易看出,第一条指令:

add r0, r1,$5

执行的时候,此时PC已经指向第三条指令:

cmp r2,#3

的地址了,所以,是PC=PC+8.


可以这样说:

R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;
ARM架构中,程序计数器(Program Counter,PC)是一个关键的寄存器,其作用是存储当前正在执行的指令的地址。在多数ARM处理器中,PC寄存器通常对应于R15寄存器[^1]。其主要功能和使用方式如下: ### 指令执行流程控制 PC寄存器的核心作用是指示处理器下一条要执行的指令的地址。在顺序执行的情况下,PC会自动递增以指向下一条指令。由于ARM指令集架构(ISA)中每条指令的长度通常是固定的(如ARM模式下为32位),因此PC的递增步长是固定的,通常为4字节。 ### 分支与跳转操作 在执行分支(Branch)或跳转(Jump)指令时,PC会被加载新的地址,从而改变程序的执行流程。例如,`B`(Branch)指令会将PC设置为一个目标地址,实现程序控制流的跳转。类似地,`BL`(Branch with Link)指令不仅会跳转到目标地址,还会将返回地址(即下一条指令的地址)保存到链接寄存器(LR/R14)中,以便后续执行返回操作[^1]。 ### 异常处理与中断响应 在发生异常或中断时,PC的内容会被保存到相应的异常处理寄存器中(如异常链接寄存器ELR),以便在处理完成后恢复执行。例如,在Cortex-M系列处理器中,当异常发生时,PC的当前会被压入堆栈,并加载新的异常处理程序地址到PC中,从而跳转到中断服务例程(ISR)[^1]。 ### 指令流水线的影响 在采用指令流水线的ARM处理器中,PC可能并不总是指向当前正在执行的指令的实际地址。例如,在ARM7TDMI等三级流水线架构中,PC通常指向当前正在解码或执行指令的地址加上8字节。这种行为需要在调试和异常处理时特别注意,以确保正确的程序流程控制[^1]。 ### 地址对齐要求 ARM架构对PC的地址有一定的对齐要求。例如,在ARM模式下,指令必须4字节对齐,因此PC的最低两位始终为0;而在Thumb模式下,指令为16位,PC的最低位为0以确保正确对齐。 ### 示例代码:使用PC进行跳转 以下是一个简单的ARM汇编示例,演示如何通过修改PC寄存器来实现跳转: ```armasm AREA Reset_Handler, CODE, READONLY ENTRY Reset_Handler B Main ; 跳转到Main标签处执行 Main MOV R0, #0x12 MOV R1, #0x34 ADD R2, R0, R1 ; R2 = R0 + R1 Loop B Loop ; 无限循环 END ``` 在该示例中,`B Main`指令通过修改PC跳转到`Main`标签处执行,展示了PC在程序控制流中的关键作用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值