将以下机器语言代码(0x2237FFF1)转换为MIPS程序集

时间:2017-02-08 11:34:39

标签: assembly mips

到目前为止,我已翻译此代码,而我不理解的是如何计算(计算)16位立即数的数量。

doit

到二进制

0x2237FFF1

现在我正在阅读操作码(001000)并知道它是I型和 0010 0010 0011 0111 1111 1111 1111 0001 指令

现在我将二进制分组为I-type指令

addi

查看MIPS参考表,发现该指令必须

   op     rs    rt       imm
 001000 10001 10111 1111111111110001
   8      17    23        ?

我在这里堆叠,不知道如何确定genral中的16位立即数的方法。

1 个答案:

答案 0 :(得分:2)

您可以先让工具为您完成

13, 12, 13, 12

然后组装和拆卸。

.word 0x2237FFF1

然后做你正在做的事情,一般情况下即时符号是否有符号(一般在指令集内和指令集之间),在这种情况下它可能是0x0000FFF1或0xFFFFFFF1你可以使用你的计算器或只看一下你扩展的位,二进制补码否定反转并添加一个,所以你的数字变成二进制1110 + 1或1111,这是15所以0xFFFFFFF1是有符号数-15。或无符号0xFFFFFFF1,无论是几十亿。

修改

不幸的使用ABI寄存器名见我的binutils,这样固定的:

mips-elf-as so.s -o so.o
mips-elf-objdump -D so.o

so.o:     file format elf32-bigmips

Disassembly of section .text:

00000000 <.text>:
   0:   2237fff1    addi    s7,s1,-15