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

时间:2014-02-15 19:25:31

标签: mips

我有一项任务,我必须将MIPS指令转换为十六进制机器代码。我知道如何转换add,addi,lw等指令就好了,但是当它达到像beq这样的指令时,我会感到困惑。我如何将此beq转换为十六进制?

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

其中NEXT的地址是

0x0040011C

我尝试了什么:

beq opcode = 4

$ t3 =注册11

$ t5 =注册13

NEXT = 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)

但这是错误的......

2 个答案:

答案 0 :(得分:5)

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

汇总代码:

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字节

答案 1 :(得分:0)

由于指令的偏移量为3,因此PC偏移量为3,而不是4。因此,二进制表示为0001 |。 0001 | 0110 | 1101 | 0000 0000 0000 0011,而不是编辑后的答案所说的乘以4。

查看以下pdf示例:https://ai.berkeley.edu/~cs61c/sp17/lec/11/lec11.pdf