为什么MIPS在计算分支目标地址时使用'PC+4'作为基本地址?

问题描述 投票:0回答:1

如果你观察MIPS的5阶段流水线(1.指令获取--2.指令解码--3.执行--4.内存访问--5.回写),是否分支最终是在执行阶段决定的。

MIPS五段式流水线

从图中可以看到,ALU的上层输出被送入MUX,在普通PC步和分支之间进行选择。

因此,当CPU决定是否分支时,从对应指令的IF阶段开始,已经经过了两个流水线阶段。假设 PC1=PC,当IFPC2=PC,当决定分支时. 因此 PC2 = PC1+4. 为了恢复 PC2PC1+4,需要额外的硬件。(用于操作 PC2-4)

尽管有这样的缺点,但我不知道为什么MIPS处理器采用了 PC+4 作为基本地址,而不是使用 PC+8 因为它是。

assembly mips cpu-architecture machine-code
1个回答
0
投票

如果说你需要更多的硬件才能得到PC+8,或者说如果你想可以跳过流水线阶段,让分支偏移量适用于取阶段地址的值,那么会让异常-返回处理之类的东西更加复杂。 (MIPS的分支延迟槽意味着从异常返回需要一个PC和单独的next-PC,以防从取支的分支延迟槽出现故障)。

另外,如果fetch停滞不前PC怎么办?

在实际经典的MIPS中。分支延迟为1个周期 所以分支是相对于分支-延迟槽中的指令而不是2条指令之后的指令是有意义的。如何计算跳转目标地址和分支目标地址?.

另外,IF阶段已经计算出了PC+4,所以它可以把这个值和指令一起送下流水线。 如果可以避免的话,你就不要长线,通过流水线阶段之间的锁存器发送PC+4值是有意义的。

© www.soinside.com 2019 - 2024. All rights reserved.