到目前为止,我已翻译此代码,而我不理解的是如何计算(计算)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位立即数的方法。
答案 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