gpt4 book ai didi

assembly - MIPS 指令 J 格式

转载 作者:行者123 更新时间:2023-12-03 06:29:23 25 4
gpt4 key购买 nike

我对以下 MIPS 代码有疑问:如果第一条指令放在内存地址0xFFFFFF00,那么指令“j LoopEnd”的十六进制表示是什么?我不知道该怎么做。任何帮助将不胜感激。谢谢。

loop:
slt $t9, $s3, $s2
bne $t9, $zero, end
add $s4, $s2, $s3
srl $s4, $s4, 1
sll $t0, $s4, 2
add $t0, $s0, $t0
lw $t1, 0($t0)
slt $t9, $s1, $t1
beq $t9, $zero, bigger
addi $s3, $s4, -1
j loopEnd
loopEnd:
j loop

最佳答案

j 是 j 类型指令,其格式如下:操作码 - 地址分别是6位和26位。

前 6 位,j 指令的 opcode000010

接下来的 26 位地址有点棘手。首先,您需要您所引用的标签的地址。在你的例子中,由于slt的指令地址是0xFFFFFF00,每次加4,loopEnd的指令地址(即指令jloop >) 将是 0xFFFFFF2C

现在我们有了目标指令的地址0xFFFFFF2C,但这是32位,而我们只有26位可用于J类型指令中的目标地址。这是通过删除第一个十六进制数字并删除最后 2 个二进制数字来解决的。实际跳转到的地址的第一个十六进制数字将与当前指令相同(在您的情况下是F)。我们可以删除最后 2 个二进制数字,因为指令地址总是 4 的倍数,所以我们不需要最后 2 个二进制数字给我们的精度 0、1、2、3,它们将始终是 00 为指令地址。

将所有这些结合到您的示例中:

0xFFFFFF2C -> 0x FFFFF2C -> 转换为二进制

1111_1111_1111_1111_1111_0010_1100 -> 1111_1111_1111_1111_1111_0010_10

现在我们将操作码与解释的指令地址结合起来:000010_11111111111111111111001010

这就是j Loopend的机器代码

TL;博士

  1. 获取跳转指令的操作码
  2. 获取标签处的地址(十六进制)
  3. 删除地址的第一个十六进制数字
  4. 转换为二进制
  5. 删除最后两位
  6. 组合操作码和解释地址

关于assembly - MIPS 指令 J 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com