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