在跳转指令中,
为什么我们将26位地址转换为28位?
当我们将地址移位2位时,跳转指令的参数(地址)可以在0 ... 2 ^ 28-1的范围内。
如果我们不转移地址,则只能在0 ... 2 ^ 26-1范围内。
这意味着我们只能使用地址空间的1/4。
另一方面,不转移地址的明显好处将不是真正的好处:
不移动地址将允许使用不可被4整除的地址。但是,由于指令始终位于可被4整除的地址处,因此跳转指令到不可被4整除的地址是没有意义的。
顺便说一句:其他CPU(例如MC68000)确实使用16位“分支”(跳转)指令,其中低位始终必须为零-因此,如果CPU将地址移位1,则可以寻址更多的内存。
为什么我们将PC中最左边的4位添加到28位?
PC寄存器为32位宽,跳转指令仅包含26位。所以我们必须从其他地方取6位:
PC寄存器的低2位始终为零,因此我们仍然必须考虑“左” 4位。
如果我们总是将剩余的4位设置为零,我们只能跳转到位于前256 MB内存中的某些代码。
如果我们根本不修改PC的左4位,则可以跳转到与跳转指令本身位于256 MB范围内的某些代码。
让我们考虑一个for()
orwhile()
循环:
在这样的循环结束时,有一个跳转指令指向循环的开始。
假定程序不必位于前256 MB内存中。
更可能的是:
循环的开始与循环的末尾(跳转指令)在相同的256 MB范围内,还是循环的开始在内存的前256 MB内部?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句