一个简单的MIPS,问题

时间:2010-10-31 08:26:39

标签: assembly mips instruction-set

我有一个问题,这有点令人困惑

Write the MIPS instruction whose machine language encoding is:
0000 0011 0001 1001 0100 0000 0010 1010
Your answer must use register names (like $t0) not numbers; and must specify
any immediate as a signed integer in decimal.

后面的答案与slt有关。有人可以解释一下,问题到底是什么,答案是什么?

感谢

2 个答案:

答案 0 :(得分:4)

编程时,如今你通常使用C或Java等高级语言编写,编译器将其分解为汇编语言(MIPS,x86等),然后将其组装成机器语言(二进制),处理器可以原生地解释。

这是MIPS处理器能够解释和执行的一条指令。问题是要求您将其转换回MIPS汇编语言。你肯定应该有一个MIPS指令参考来帮助你。如果你没有,这是一个很好的:

http://www.d.umn.edu/~gshute/spimsal/talref.html#rtype

(提示:我们现在看到的指令是一个R-Type指令,这意味着它是一个直接在寄存器上操作的指令,不使用立即值。)

如果查看顶部表格,它会分解MIPS R类型指令。前6位是操作码。您会注意到指令的前6位是0,这是因为所有R型指令都有000000用于操作码,并且处理器通过使用FUNCT字段知道它正在处理什么指令,这就是我们所知道的“slt”是我们正在关注的指令(参见参考资料)。

现在你真正需要的是知道哪些寄存器名称映射到哪个寄存器号(即.register 8可能是$ t0)。以下是对此的参考:

http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm

答案 1 :(得分:3)

汇编指令将机器表示为位,即给定的位。

它们还有一个文本表示,使人们更容易阅读和写作,这就是你被问到的那个。

您需要了解如何从二进制文件中提取文本表示的各个部分。使用slt,您处于正确的轨道上,它仍然可以找到指令中使用的寄存器或常量。您应该有一些MIPS指令引用,指定该指令的位模式的含义。