将 MIPS 指令转换为其十六进制代码的过程

Process of Converting a MIPS Instruction to its Hex code

我试图在网上找到解释,但我发现的一切似乎都是某人编写的转换程序,并没有真正解释它。在这里寻找关于 SO 的问题,其中大部分都在我的薪资等级之上,我正在寻找基础知识的最开始。我理解这个想法(我认为):

`add $s0, $s3, $s5`

像这样隔离他们

并记住 "rd" 需要来自第一个寄存器 $s0,根据 MIPS Green Sheet 将片段转换为十六进制,给我们

add = op code of 0  
$s3 = 19 in decimal, 13 in hex  
$s5 = 21 in decimal, 15 in hex  
$s0 = 16 in decimal, 10 in hex  
shamt = 0  
funct = 20 from add

这已经让我迷路了,因为它将是 0131510020... 而不是 8 位。没有。

并基于此online converter,得出

`02758020` in hex

这到底是怎么发生的?我什至在玩转换器,一次只向上移动一个寄存器,而这些变化只会让我更加困惑。我错过了这个技巧还是好的资源?我找到的每个视频都在谈论机器代码(二进制),从不涉及它的十六进制部分。

你需要用二进制而不是十六进制把它们放在一起。

图中的小数字告诉你每个部分的位数。

add = op code of 0, 000000 in bin
$s3 = 19 in decimal, 13 in hex, 10011 in bin
$s5 = 21 in decimal, 15 in hex, 10101 in bin
$s0 = 16 in decimal, 10 in hex, 10000 in bin
shamt = 0, 00000 in bin
funct = 20 from add, 10100 in bin

然后把所有的东西放在一起,转换成十六进制:

0b00000010011101011000000000100000 = 0x02758020