将 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
我试图在网上找到解释,但我发现的一切似乎都是某人编写的转换程序,并没有真正解释它。在这里寻找关于 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