有人可以向我解释为什么MARS将伪指令翻译成两条指令:lui& ORI?有翻译只涉及一条指令的情况吗?
答案 0 :(得分:3)
您可能知道每种类型的命令都有一个“类似”结构命令的结构如下:
为该值保存的大小实际上是他们将其拆分为两个不同命令的问题/原因。
您可以在图中看到值的最大类型(I-Type,最低的类型)只有26位。地址具有32位值,因为您知道32位值不能适合26位命令。因此他们将其分为两步:
答案 1 :(得分:2)
这个简单的程序
.data
msg: .asciiz "This is a string"
.text
la $a0, msg # pseudo-instruction to load the address of the label str
转换为说明
Address Code Basic Source
0x00400000 0x3c011001 lui $1,0x00001001 4 la $a0, msg # pseudo-instruction to load the address of the label str
0x00400004 0x34240000 ori $4,$1,0x00000000
它总是这两条指令AFAIK。 lui指令使立即值向左移位16位并存储在寄存器中。低16位是零。
这样,您可以使用32位指令加载32位地址(以mips32为单位)。