$at 寄存器在 MIPS 中的使用示例
Example usage of $at register in MIPS
我的教科书说 MIPS 汇编程序必须将大常量分成几部分,然后将它们重新组合成一个寄存器。并且它使用 $at 作为
的临时寄存器
我一直在寻找这方面的具体示例,有人有吗?
我看到一些网站说la
伪指令转换为使用$at
的指令,但似乎不需要。例如:
la $t0, 0xABCD1234
转换为
lui $t0, 0xABCD
ori $t0, $t0, 0x1234
这是从 中提取的一个示例,用于解决有关 li
和 lw
的使用的早期问题:
给定以下代码:
.data
ten: .word 10
.text
main:
lw $t0, ten
SPIM 将为 lw
:
生成以下指令序列
0x3c011001 lui , 4097 ; lw $t0,ten
0x8c280000 lw , 0()
先把ten
的地址放在</code>(<code>$at
),然后从那个地址加载值
也许 sw
会是一个更好的例子。在 lw
的情况下,我想您可以将 lw
扩展为 lui , 4097 / lw , ()
。但是在 sw
的情况下,您不想用地址覆盖 $t0
。
我的教科书说 MIPS 汇编程序必须将大常量分成几部分,然后将它们重新组合成一个寄存器。并且它使用 $at 作为
的临时寄存器我一直在寻找这方面的具体示例,有人有吗?
我看到一些网站说la
伪指令转换为使用$at
的指令,但似乎不需要。例如:
la $t0, 0xABCD1234
转换为
lui $t0, 0xABCD
ori $t0, $t0, 0x1234
这是从 li
和 lw
的使用的早期问题:
给定以下代码:
.data
ten: .word 10
.text
main:
lw $t0, ten
SPIM 将为 lw
:
0x3c011001 lui , 4097 ; lw $t0,ten
0x8c280000 lw , 0()
先把ten
的地址放在</code>(<code>$at
),然后从那个地址加载值
也许 sw
会是一个更好的例子。在 lw
的情况下,我想您可以将 lw
扩展为 lui , 4097 / lw , ()
。但是在 sw
的情况下,您不想用地址覆盖 $t0
。