MIPS分支。如何向后跳?

MIPS分支。如何向后跳?,mips,Mips,我一直在寻找答案,最后我决定问问这里是否有人能帮我;) MIPS中条件跳转指令的格式(比如beq指令)包含一个16位字段,指示跳转的de“大小”。我知道必须将其添加到当前PC才能获得所需的方向。我的疑问是,如何设置向后跳跃的场地?我猜两个是互补的?我找到了这个例子,但它让我比以前更困惑。。。如果有人能简单地解释一下,我将非常感激!顺便说一下,我的语法/表达很抱歉,我的英语还不是很好 这个例子提到: PC+Jump(Forward) 0100 1101 0000 0011 1010 1100 0

我一直在寻找答案,最后我决定问问这里是否有人能帮我;)

MIPS中条件跳转指令的格式(比如beq指令)包含一个16位字段,指示跳转的de“大小”。我知道必须将其添加到当前PC才能获得所需的方向。我的疑问是,如何设置向后跳跃的场地?我猜两个是互补的?我找到了这个例子,但它让我比以前更困惑。。。如果有人能简单地解释一下,我将非常感激!顺便说一下,我的语法/表达很抱歉,我的英语还不是很好

这个例子提到:

PC+Jump(Forward)

0100 1101 0000 0011 1010 1100 0101 1000

0000 0000 0000 0000 0000 0000 1001 1100

.......................................................................

0100 1101 0000 0011 1010 1100 1111 0100


PC+Jump(Backwards)

0100 1101 0000 0011 1010 1100 0101 1000

1111 1111 1111 1111 1100 0000 1001 1100

.......................................................................

0100 1101 0000 0011 0110 1100 1111 0100

偏移量是一个有符号值,因此向后跳转只使用负偏移量


您展示的示例演示了简单的加法。在分支和跳转的上下文中,顶部的数字表示当前PC,第二个数字表示偏移量,底部的数字表示新PC。回想一下,在二的补码中,减法与负数的加法相同。请注意,在向后示例中,偏移量为负值。当偏移量在MIPS指令中编码时,它将符号扩展到32位。

非常感谢您的回复。它真的帮助我理解了这个过程。为了确保我做对了,如果我想向后跳到可以从beq指令到达的较低的PC,我只需在当前PC上添加“30个一”?再一次为我对技术语言的知识贫乏感到抱歉-u-
BEQ
指令接受16位立即偏移量。最大幅值负16位数字为0x8000,或1后跟15个零。将其左移两位(因为所有地址都是四的倍数),并进行符号扩展以给出0xfffe0000的偏移量。如果您需要跳转到更远的地方,则使用
J
,如果您需要再远一点,则将目标地址放入寄存器并使用
JR
。再次感谢您的回复,Rob,这非常有用!