MIPS 从地址加载值
MIPS loading values from address
我正在学习 MIPS 汇编语言,我想知道如何从地址加载值。例如我想将内存地址 0x10010000 存储在 $t2 中。
0x10010000 的值是 12,33,70,70(0x10010000 - 0x10010003)。
0x10010004 会像 F4,A6, 12,99((0x10010004 - 0x10010007).
目前我有这个
add $t3, $t2, $zero
lw $t4, 0($t3)
add $t5, $t4, -6
sw $t5, 4($t2)
但不知道如何“初始化”$t2
给你的数据贴上标签,然后使用la $t2, labelName
。
或者,您可以使用 lui
将 0x10010000
加载到 $t2
,这会将 16 位的常量加载到寄存器的上半部分 - 这里您将使用 lui $t2, 0x1001
.
如果低 16 位需要 non-zero(例如 0x10010400
),则在 lui
之后使用 ori
(例如 ori $t2, $t2, 0x0400
).
另外,la
是伪指令。它通常会扩展为两条指令,并且,当您 assemble 您的代码(例如在 MARS 或 QtSPIM 中)时,您将能够看到这一点。
我正在学习 MIPS 汇编语言,我想知道如何从地址加载值。例如我想将内存地址 0x10010000 存储在 $t2 中。 0x10010000 的值是 12,33,70,70(0x10010000 - 0x10010003)。 0x10010004 会像 F4,A6, 12,99((0x10010004 - 0x10010007).
目前我有这个
add $t3, $t2, $zero
lw $t4, 0($t3)
add $t5, $t4, -6
sw $t5, 4($t2)
但不知道如何“初始化”$t2
给你的数据贴上标签,然后使用la $t2, labelName
。
或者,您可以使用 lui
将 0x10010000
加载到 $t2
,这会将 16 位的常量加载到寄存器的上半部分 - 这里您将使用 lui $t2, 0x1001
.
如果低 16 位需要 non-zero(例如 0x10010400
),则在 lui
之后使用 ori
(例如 ori $t2, $t2, 0x0400
).
另外,la
是伪指令。它通常会扩展为两条指令,并且,当您 assemble 您的代码(例如在 MARS 或 QtSPIM 中)时,您将能够看到这一点。