我现在有点困惑。 MIPS中的分支指令可以跳多远? 我实际上找到了一个答案,即+/- 128 kByte,如果我没有错,那将是2 ^ 21位。但我只是不明白这是怎么回事。在大学写的那张纸上写的是beq和bne这样计算PC = PC + 4 + BranchAddress。并且BrachAddress本身是{14 {immediate [15]},immediate,2'b0},如果我没有错,则意味着有一个16位立即,其中MSB被扩展14个“位置”到在左边和右边,它被延长了2个零。那么这不意味着Branchaddress必须是2 ^ 18位吗?
答案 0 :(得分:2)
您应该检查this之类的指令集引用。您可以看到BEQ指令编码为
------------------------------------------------------
| 6 bit opcode | 5 bit rs | 5 bit rt | 16 bit offset |
------------------------------------------------------
关于抵消,它说:
18位有符号偏移(16位偏移字段向左移位2位)被添加到以下指令的地址中 在分支延迟槽中的分支(不是分支本身),以形成PC相对有效目标地址
这意味着16位值左移2(乘以4,基本上将其与双字对齐)并解释为带符号数。这会产生[-2^17, 2^17 - 1]
范围内的值[-131072, 131071]
。但是你必须考虑到在分支之后将值添加到指令中,因此相对于指令本身的实际范围是[-131072+4, 131071+4]
。
无条件跳转BC
的故事是不同的,它有26位的偏移(仍然向左移动了2),所以28位有符号数。