【问题标题】:Branch instructions and Jump instruction in MipsMips中的分支指令和跳转指令
【发布时间】:2014-09-17 16:04:33
【问题描述】:

我是 Mips 的新手,需要您的帮助。我遇到了一个练习:

Assuming that the program counter has the 2000 0000hex value in it, is it possible that the program counter will get the 00001000hex or the 20001400hex value using the beq or the jump instruction

首先,我无法真正理解 beq 指令的 16 位值和跳转指令的 26 位值代表什么。它是偏移量还是地址?老实说,我认为这是一个地址,但我无法真正理解它是如何工作的。

练习的答案是,对于 00001000hex 值,两条指令都可以将您带到那里,但对于第二条指令,只有跳转指令可以工作。这是为什么?任何帮助将不胜感激。

【问题讨论】:

    标签: assembly branch mips


    【解决方案1】:

    MIPS 上的branch 保存 16 位位移(相对于下一条指令),以有符号指令数测量。 因此,您可以通过带有偏移量 +(0x1400/4-1) = 4FFbranch 从地址 0x2000 00000x2000 1400。你不能到达0x0000 1000,因为它的偏移量为-(1FFF000/4+1) = -7FFC01,超过16位。

    jump 包含一个 26 位的值,表示这样计算的绝对地址:
    (encoded value * 4) | (next instruction & 0xE0000000) 即,最高 4 位取自跳转后的指令。所以你可以通过jump instr-index=0x5000x2000 00000x2000 1400,但是你不能0x0000 1000,因为无论你做什么,你的新地址中的最高4位将是0x2,不是0x0

    如果你想要一条可以带你去任何地方的指令,MIPS 有jr 指令,跳转寄存器。由于寄存器包含一个 32 位的值,因此它可以将您带到 32 位地址空间内的任何位置。

    【讨论】:

      猜你喜欢
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2012-06-14
      相关资源
      最近更新 更多