Assembly Mips中的分支指令和跳转指令

Assembly Mips中的分支指令和跳转指令,assembly,branch,mips,Assembly,Branch,Mips,我是Mips的新手,我需要你的帮助。我遇到了一个练习: 假设程序计数器中有2000 0000hex值,程序计数器是否可能使用beq或跳转指令获得00001000hex或20001400hex值 首先,我不能真正理解beq指令的16位值和跳转指令的26位值代表了什么。这是一个抵消还是一个地址?老实说,我认为这是一个地址,但我真的不明白它是如何工作的 这个练习的答案是,对于000010000Hex值,两条指令都可以带您到那里,但对于第二条指令,只有跳转指令可以工作。为什么呢?任何帮助都将不胜感激。M

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

假设程序计数器中有2000 0000hex值,程序计数器是否可能使用beq或跳转指令获得00001000hex或20001400hex值

首先,我不能真正理解beq指令的16位值和跳转指令的26位值代表了什么。这是一个抵消还是一个地址?老实说,我认为这是一个地址,但我真的不明白它是如何工作的


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

MIPS上的分支
包含16位位移(相对于下一条指令),以有符号指令数衡量。 因此,您可以通过偏移量+(0x1400/4-1)=
4FF
分支从地址
0x2000 0000
0x2000 1400
。您无法访问
0x0000 1000
,因为它的偏移量为-(1ff000/4+1)=
-7FFC01
,大于16位

jump
包含一个26位的值,表示如下计算的绝对地址:
(编码值*4)|(下一条指令&0xE0000000)
即,从跳转后的指令中获取最高位的4位。因此,您可以通过
jump instr index=0x500
0x2000 0000
0x2000 1400
,但无法到达
0x0000 1000
,因为无论您做什么,新地址中的4个最高位将是
0x2
,而不是
0x0


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

MIPS上的分支
包含16位位移(相对于下一条指令),以有符号指令数衡量。 因此,您可以通过偏移量+(0x1400/4-1)=
4FF
分支从地址
0x2000 0000
0x2000 1400
。您无法访问
0x0000 1000
,因为它的偏移量为-(1ff000/4+1)=
-7FFC01
,大于16位

jump
包含一个26位的值,表示如下计算的绝对地址:
(编码值*4)|(下一条指令&0xE0000000)
即,从跳转后的指令中获取最高位的4位。因此,您可以通过
jump instr index=0x500
0x2000 0000
0x2000 1400
,但无法到达
0x0000 1000
,因为无论您做什么,新地址中的4个最高位将是
0x2
,而不是
0x0


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

MIPS上的分支
包含16位位移(相对于下一条指令),以有符号指令数衡量。 因此,您可以通过偏移量+(0x1400/4-1)=
4FF
分支从地址
0x2000 0000
0x2000 1400
。您无法访问
0x0000 1000
,因为它的偏移量为-(1ff000/4+1)=
-7FFC01
,大于16位

jump
包含一个26位的值,表示如下计算的绝对地址:
(编码值*4)|(下一条指令&0xE0000000)
即,从跳转后的指令中获取最高位的4位。因此,您可以通过
jump instr index=0x500
0x2000 0000
0x2000 1400
,但无法到达
0x0000 1000
,因为无论您做什么,新地址中的4个最高位将是
0x2
,而不是
0x0


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

MIPS上的分支
包含16位位移(相对于下一条指令),以有符号指令数衡量。 因此,您可以通过偏移量+(0x1400/4-1)=
4FF
分支从地址
0x2000 0000
0x2000 1400
。您无法访问
0x0000 1000
,因为它的偏移量为-(1ff000/4+1)=
-7FFC01
,大于16位

jump
包含一个26位的值,表示如下计算的绝对地址:
(编码值*4)|(下一条指令&0xE0000000)
即,从跳转后的指令中获取最高位的4位。因此,您可以通过
jump instr index=0x500
0x2000 0000
0x2000 1400
,但无法到达
0x0000 1000
,因为无论您做什么,新地址中的4个最高位将是
0x2
,而不是
0x0

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