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

标签 assembly hex mips

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

`add $s0, $s3, $s5`

像这样隔离它们 Green sheet snippet

请记住“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

关于assembly - 将 MIPS 指令转换为其十六进制代码的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491269/

相关文章:

r - 转为 base58 的十六进制字符串

python - 将字符串中的十六进制字符附加到字符串

exception - 系统调用和陷阱之间的区别

assembly - 数据中来自 .asciiz 的 MIPS lw

assembly - 在汇编中为什么不移位就不能打印十六进制数?

assembly - 如何使用 GCC 生成一个最小的 BIOS hello world 引导扇区,使其可以在真实硬件上的 USB 内存棒上运行?

linux - 有没有人在 Linux 的 Wine 中使用 MASM 汇编语言?

将二进制数据转换为 C 程序的十六进制字符串

c++ - mips装配中的递归斐波那契函数

linux - 计算条件跳转