MIPS分支数据通路

时间:2016-06-25 13:06:00

标签: assembly architecture mips

我正在编写单周期MIPS CPU,我很困惑如何计算分支地址。给出这个MIPS数据路径图

enter image description here

为什么在符号延伸并向左移2后,地址由PC + 4添加?

我的主要问题是当我做

','

我会被一条指令拒之门外。看看我写的MIPS程序集Fibonacci测试用例:

 SignExtImm(instruction.imm) << 2 + (PC + 4)

说我在[0x004000a0] 0x00112020 add $4, $0, $17 <-- # loop label here [0x004000a4] 0x0c100002 jal 0x00400008 [fib] [0x004000a8] 0x00000000 nop [0x004000ac] 0x00029821 addu $19, $0, $2 [0x004000b0] 0x22310001 addi $17, $17, 1 [0x004000b4] 0x1632fffb bne $17, $18, -20 [loop-0x004000b4]; [0x004000b8] 0x00000000 nop 并且分支被带走了

说明为0x004000b4

所以0x1632fffbimm val := 0xFFFB

sign extend imm val ==&gt; PC+4 := 0x004000B8

向左移动2 ==&gt; 0xFFFFFFFB

然后0xFFFFFFEC + 0xFFFFFFEC ==&gt; 0x004000B8 ==&gt; 0x1004000A4

但我的循环从0x004000A4

开始

如果我遵循MIPS数据路径图,我无法计算正确的分支地址。

0 个答案:

没有答案