我目前正在学习MIPS,我对如何将汇编语言转换为二进制文件感到困惑。据我所知,基本格式是:
opcode(6 bit) rs(5 bit) rd(5 bit) rd(5 bit) shamt(5 bit) funct(6 bit)
问题是:
sw $t1, 32($t2)
到目前为止,我知道:
$ t1 = 01001,$ t2 = 01010,sw = 101011的操作码,二进制中的32 = 100000
我首先感到困惑的是shamt或者转变。我了解到它是一个5位值,但二进制中的32表示为6位。
我困惑的第二件事是订购。这是我到目前为止所做的,但我不认为它是正确的,因为它不是32位字符串:
000000 01010 01001 100000 101011
有人可以解释汇编语言指令的正确二进制字符串是什么吗?
答案 0 :(得分:5)
并非所有指令都使用该机器代码格式,它看起来像算术指令一样。您还需要better reference manual列出其他说明的编码。 sw
特别是:1010 11ss ssst tttt iiii iiii iiii iiii
其中s
是目标(!),t
是来源,i
是直接偏移量。因此,您的示例看起来像1010 1101 0100 1001 0000 0000 0010 0000
0xAD490020
请与汇编程序核实:
AD490020 sw $t1, 32($t2)