在MIPS类型的ISA中,有两种类型的函数Branch和Jump。这些是PC相关和伪直接。我想知道为什么我们为两种类型的指令使用两种不同的寻址方式?这是必要的吗?另外,分支指令跳转的最大大小是多少?怎么样跳?
答案 0 :(得分:0)
分支需要更多位来描述操作数和分支比较类型。跳转指令需要较少的信息,因此它们可以将更多的位用于直接指令。因此,跳跃可以比分支跳得更远。
我不明白PC-relative和“psuedodirect”之间的区别 - 它们与PC相关。唯一真正的区别是立即数是多少位。
需要PC-relative,因此编译器可以移动代码,而不关心分支和目标的确切位置。此外,与描述目标的绝对位置相比,它需要更少的位来描述“前10个指令”。同样,跳转有更多的即时位可用,因此它们可以跳得更远。分支或跳转的确切距离取决于具体的ISA。通常,具有32b大小指令的RISC ISA可以跳过2 ^ i个字(或4 *(2 ^ i)个字节),其中i是立即数的大小。