我的教科书说 MIPS 汇编器必须将大常量分解成小块,然后将它们重新组装成一个寄存器。并且它使用 $at 作为临时寄存器
我一直在寻找一个具体的例子,有人有吗?
我看到一些网站说la
伪指令使用 $at
转换为指令,但这似乎没有必要。例如:
la $t0, 0xABCD1234
转换为
lui $t0, 0xABCD
ori $t0, $t0, 0x1234
最佳答案
这是取自 my answer 的示例之前关于使用 li
的问题和 lw
:
鉴于以下代码:
.data
ten: .word 10
.text
main:
lw $t0, ten
SPIM 将为
lw
生成以下指令序列:0x3c011001 lui $1, 4097 ; lw $t0,ten
0x8c280000 lw $8, 0($1)
ten
的地址最先放在$1
( $at
),然后从该地址加载值。也许
sw
将是一个更好的例子。在lw
的情况下我想你可以扩展 lw
进入 lui $8, 4097 / lw $8, ($8)
.但在 sw
的情况下您不想覆盖 $t0
与地址。
关于assembly - MIPS 中 $at 寄存器的示例用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589828/