我已经分配了一定数量的内存,并希望将此内存的位置分配给我在程序的.data部分声明的变量。我知道如何将内存位置分配给变量,但是一旦我这样做,我如何使用该变量来访问分配的内存?
答案 0 :(得分:3)
如果我正确理解您的问题,您将需要使用la
(加载地址)指令将地址输入寄存器。然后,您将使用lw
(加载字)和sw
(存储字)指令来操作数据。例如,请考虑以下代码
.data
tmpval: .word 5
__start:
sub $sp, $sp, 12
sw $ra, 0($sp) # Return addy
sw $t0, 4($sp)
sw $t1, 8($sp)
la $t0, tmpval
lw $t1, 0($t0) # $t1 == tmpval == 5
li $t1, $2 # $t1 == 2
sw $t1, 0($t0) # tmpval == 2
lw $ra, 0($sp)
lw $t0, 4($sp)
lw $t1, 8($sp)
add $sp, $sp, 12
jr $ra
因此,在内部代码块中,您可以看到将$t0
(或任何其他寄存器)视为内存位置并适当地使用它。
答案 1 :(得分:3)
MIPS有许多加载和存储到存储器的指令:加载字(lw),加载半字(lh),加载字节(lb),存储字(sw),存储半字(sh)和存储字节(sb) ) 仅举几个。它们都使用相同类型的语法,因此这里是从内存位置加载的示例:
lw $t, C($s)
将从寄存器$ s加上C的内存位置加载字以注册$ t。即$ t = [$ s + C]
同样存储:
sw $t, C($s)
将把寄存器$ t中的单词存储到$ s加上C的内存位置。即[$ s + C] = $ t