以二进制显示BEQ MIPS指令

以二进制显示BEQ MIPS指令,mips,Mips,以下问题的答案是 beq $s1, $s2, endif(assume endif is 22 instructions after the branch) 有人能解释一下“假设endif是分支后的22条指令”是什么意思吗 有用数据: beq的操作码为000100 $s1是10010 $s2是10001 我只需要帮助理解我们如何得到最后一部分,即endif。您想跳转到beq之后的第22条指令,即跳过接下来的21条指令。 现在,这将是10101二进制,也就是21十进制(要跳过的指令数)。 此

以下问题的答案是

beq   $s1, $s2, endif(assume endif is 22 instructions after the branch)
有人能解释一下“假设endif是分支后的22条指令”是什么意思吗

有用数据:

beq的操作码为
000100

$s1是
10010

$s2是
10001


我只需要帮助理解我们如何得到最后一部分,即endif。

您想跳转到beq之后的第22条指令,即跳过接下来的21条指令。 现在,这将是10101二进制,也就是21十进制(要跳过的指令数)。 此类跳转的指令将是0001 0010 0011 0010 0000 0000 0001 0101,而不是您所写的指令(您的分支偏移量错误)

您必须考虑到,在MIPS中,每条指令的大小相同(4字节),因此分支计算要跳转的字数(每条4字节)

除此之外,这些值是用2的补码编码的,所以当你向前跳时,你只需要读取二进制数,如果它是向后的,你必须用2的补码来“看”,如果它会跳

000100 10001 10010 0000000000001111