1

尝试从 David A Patterson 的 Computer organization and design 一书中学习 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 ?

请帮助,非常感谢提前。

4

1 回答 1

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。

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

于 2012-11-26T02:54:49.257 回答