MIPS 中 $at 寄存器的用法示例

cou*_*que 5 assembly mips

我的教科书说,MIPS 汇编器必须将大常量分解成片段,然后将它们重新组装到寄存器中。并且它使用 $at 作为临时寄存器

我一直在寻找一个具体的例子,有人有吗?

我看到一些网站说la伪指令使用 转换为指令$at,但这似乎不需要。例如:

la $t0, 0xABCD1234
Run Code Online (Sandbox Code Playgroud)

转换成

lui $t0, 0xABCD
ori $t0, $t0, 0x1234
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 3

这是li对之前有关and的使用的问题的回答中的一个示例lw

给出以下代码:

.data
ten: .word 10

.text 
main:
    lw $t0, ten
Run Code Online (Sandbox Code Playgroud)

SPIM 将为 生成以下指令序列lw

0x3c011001  lui $1, 4097                    ; lw $t0,ten
0x8c280000  lw $8, 0($1)
Run Code Online (Sandbox Code Playgroud)

首先将的地址ten放入$1( $at),然后从该地址加载值。

也许sw会是一个更好的例子。在这种情况下,lw我想你可以将其扩展lwlui $8, 4097 / lw $8, ($8). 但如果sw您不想用$t0地址覆盖。