Mips pc相对地址

时间:2012-11-26 01:07:43

标签: mips memory-address

尝试从David A Patterson的计算机组织和设计一书中学习Mips。第4版。
但是对于关于PC相对地址的问题之一,我感到困惑, 问题是:
当前的PC是0x00000600,您可以使用单个批处理指令到达PC地址

  

a)1010 1101 0001 0000 0000 0000 0000 0010
b)1111 1111 1111   1111 1111 1111 1111 1111

从当前PC的答案来看,范围是:

0X0604 + 0x1FFFC = 0x0002 06000x0604 - 0x20000 = 0xFFFE

他们如何获得0x1FFFC和0X20000?

请提前帮助,非常感谢。

1 个答案:

答案 0 :(得分:3)

MIPS架构中的分支指令允许您指定一个16位2s补码偏移量,该偏移量向左移位两位以产生18位PC偏移量(因为指令必须是字节对齐的,所以最低的2位始终具有成为零)然后从PC中添加或减去。

现在,如果您将获取最大PC偏移值,您可以添加到PC(这样您最终使用2s补码添加到PC),并认为它将是00000000000000011111111111111100或0x1FFFC。

如果您获取最大PC偏移值,您可以减去PC(这样您最终使用2s补码减去PC),并认为它将是00000000000000100000000000000000或0x20000。

因此,如果您有一个PC值,并且想知道它可以跳转到的地址范围,您只需要找到最大值和最小值,分别是PC + 0x1FFFC和PC - 0x20000。

如果您对任何事情感到困惑,请随时提出任何问题。