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



我知道,ARM使用3级流水线。因此,一条指令分为三个部分:获取、解码和执行。

我的第一个疑问是,这是否意味着一条指令被转换为3条指令?那么它会在加载时进行地址设置吗?

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

您正在描述早期的ARM架构,其中ARM内核从一开始就至少有三个阶段在管道中。较新的ARM架构在管道中有更多的阶段,但是由于向后兼容性的问题,PC在执行指令时仍然是+8地址。

例如手册说ARM1156T2-S有9级,ARM946E-S有5级,等等

岩心管道阶段如下;获取,解码和执行。Fetch从内存中加载指令,所以如果你认为你当前执行的指令是在n,解码阶段是在n + 4,下一次读取是在n + 8。它是4的倍数,因为ARM中的一条指令在ARM模式下是4个字节。(如果你在拇指/thumb2模式下,它可能是+4)

请理解前面有两个说明。对于32位体系结构,这意味着arm模式超前8字节,两个指令。但在拇指模式下,它可以在4到8字节之间,重要的是它是两个指令…

相关内容

最新更新