MIPS:将BEQ计算为十六进制机器码

MIPS:将BEQ计算为十六进制机器码,mips,Mips,我有一个任务,我必须把MIPS指令转换成十六进制机器码。我知道如何转换add、addi、lw等指令,但当涉及到像beq这样的指令时,我会感到困惑。我如何将此beq转换为十六进制 0x00400108 beq $t3, $t5, NEXT 0x0040010C j END NEXT的地址在哪里 0x0040011C ? 我所尝试的: beq操作码=4 $t3=寄存器11 $t5=寄存器13 NEXT=0x0040011C-0x0040010C=10(十六进制)=16(十进制) 但是这是

我有一个任务,我必须把MIPS指令转换成十六进制机器码。我知道如何转换add、addi、lw等指令,但当涉及到像beq这样的指令时,我会感到困惑。我如何将此beq转换为十六进制

0x00400108   beq $t3, $t5, NEXT
0x0040010C   j END
NEXT的地址在哪里

0x0040011C
?

我所尝试的:

beq操作码=4

$t3=寄存器11

$t5=寄存器13

NEXT=0x0040011C-0x0040010C=10(十六进制)=16(十进制)


但是这是错误的…

在花了很长时间保持沉默之后,我找到了正确的答案

代码摘要:

beq $t3, $t5, NEXT
[instruction 1]
[instruction 2]
[instruction 3]
[instruction 4]
NEXT: [instruction 5]
正如Michael所说,偏移量是分支指令后面的指令的字数。指令1是beq之后的后续指令,因此从那里开始计数,直到下一个。指令1和NEXT中有4条指令,因此beq的格式现在为:

op     |  rs   |  rd   |  16-bit constant or address
000100 | 01011 | 01101 | 0000 0000 0001 0000
其中rs为$t3,rd为$t5

重新组合并转换为十六进制:

0001 | 0001 | 0110 | 1101 | 0000 0000 0001 0000
  1  |  1   |  6   |  D   |   0    0   1     0
所以十六进制表示法是116D0010。干杯
编辑:指令是文字,4条指令*4字节=16字节

,因为指令的偏移量为3个命令,pc在偏移量中输入3,而不是4。因此,二进制代表是0001 | 0001 | 0110 | 1101 | 0000 0000 0011,而不是编辑的答案所说的乘以4


查看此pdf中的示例:

指令中存储的偏移量是分支指令后面的指令的字数(32位实体)。参考MIPS指令集参考。我试过了,但我不太懂。你的意思是我计算bne和NEXT之间的指令数,然后乘以4,因为它是32位的吗(
0001 | 0001 | 0110 | 1101 | 0000 0000 0001 0000
  1  |  1   |  6   |  D   |   0    0   1     0