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

2024-01-10

我有一个作业,必须将 MIPS 指令转换为其十六进制机器代码。我知道如何转换 add、addi、lw 等指令,但是当它转换为 beq 之类的指令时,我感到困惑。我如何将这个 beq 转换为十六进制?

0x00400108   beq $t3, $t5, NEXT
0x0040010C   j END

其中 NEXT 的地址是

0x0040011C

?

我尝试过的:

beq 操作码 = 4

$t3 = 寄存器 11

$t5 = 寄存器 13

下一个 = 0x0040011C - 0x0040010C = 10(十六进制)= 16(十进制)

4 11 13 16 (decimal)
000100 01011 01101 0000 0000 0000 1000 (convert to binary)
0001 0001 0110 1101 0000 0000 0000 1000 (group into fours)
1 1 6 D 0 0 0 8 (hexadecimal)

但这是错误的...


经过很长一段时间的愚蠢,我找到了正确的答案。

总结代码:

beq $t3, $t5, NEXT
[instruction 1]
[instruction 2]
[instruction 3]
[instruction 4]
NEXT: [instruction 5]

正如迈克尔所说,偏移量是分支指令后面的指令的字数。指令 1 是 beq 之后的下一条指令,因此从那里开始计数直到 NEXT。从指令 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字节

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MIPS:将 BEQ 计算为十六进制机器代码 的相关文章

随机推荐