You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何快速判断十六进制转二进制后的MIPS指令为R型或I型

快速区分MIPS R型/I型指令:看前6位opcode就够了!

嘿,这个问题我当初刚学MIPS指令集的时候也卡过一阵子,其实核心判断逻辑超简单——只需要看二进制指令的前6位(最高位开始的6位)opcode

核心判断规则

  • 如果二进制指令的前6位是000000:这绝对是R型指令!
    这时候后面的26位会按照R型格式拆分:5位rs、5位rt、5位rd、5位shift amount、6位function code。换句话说,最后16位是「5位rd + 5位shift amount + 6位function code」的组合,不是立即数。
  • 如果二进制指令的前6位不是000000:那就是I型指令(如果排除J型的话,J型opcode是000010000011,但你问的是R/I,所以不用管这个)!
    这时候后面的26位会按照I型格式拆分:5位rs、5位rt、16位immediate amount。也就是最后16位直接就是立即数。

举两个实际例子

  1. R型指令示例:十六进制0x00221820转二进制是000000 00001 00010 00011 00000 100000
    前6位是000000,判定为R型。最后16位是00011 00000 100000,对应rd、shift amount、function code,这条是add $3, $1, $2指令。
  2. I型指令示例:十六进制0x8C010004转二进制是100011 00000 00001 0000000000000100
    前6位是100011(lw指令的opcode),非0,判定为I型。最后16位0000000000000100就是立即数,对应lw $1, 4($0)指令。

为什么这个方法靠谱?

MIPS指令集的设计就是这么直白:所有R型指令的opcode固定为全0,靠后面的function code区分具体操作;而所有I型指令都用非0的opcode来标识,根本不需要看后面的位就能快速区分。

内容的提问来源于stack exchange,提问作者Richie

火山引擎 最新活动