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

标签 assembly mips

我的教科书说 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/

相关文章:

assembly - NASM - 获取堆栈中的项目数

c - GCC 避免将分支编译为链接寄存器 (blr) 语句

Verilog 实现 a<b ? 1 : 0

assembly - 为什么 MIPS 中 bgezal 和 bltzal 是基本指令而不是伪指令?

c++ - 为什么编译器不优化简单的包装函数指针?

c - 使用 FASM 将汇编生成的代码嵌入到 C 程序中

assembly - 如何执行机器代码(学习汇编)

c - 交叉编译时PIC/non-PIC代码错误

C++ CPU 寄存器使用

assembly - MIPS 程序集返回调用分支语句