为什么在ARM指令集的情况下,PC被设置为current_address + 8?

时间:2014-03-13 06:26:43

标签: kernel arm

我认为,ARM使用3级流水线。因此,指令分为3部分提取,解码和执行。

我的第一个疑问是,这是否意味着指令转换为3条指令?加载时它会解决3个问题吗?

第二个疑问是,为什么我们将PC设置为current_address + 8?

2 个答案:

答案 0 :(得分:4)

您正在描述早期的ARM体系结构,其中ARM核心从一开始就至少有三个阶段。较新的ARM体系结构在其流水线中具有更多阶段,但是在执行指令时,向后兼容的怪异PC仍然是+8地址。

例如,手册说ARM1156T2-S有9个阶段,ARM946E-S有5个等等。

核心管道阶段就像;获取,解码和执行。 Fetch从内存加载指令,所以如果您认为当前正在n处执行指令,则解码阶段为n + 4,下一次提取为n + 8.由于ARM中的指令,它与4的乘法相同在ARM模式下是4个字节。 (如果您使用拇指/拇指2模式,它可能是+4)

答案 1 :(得分:0)

明白这是两个指示。对于32位architctures,这意味着arm模式是前面8个字节,两个指令。但是在拇指模式下它可以在4到8个字节之间,重要的是它是两个指令......