6

我已经分配了一定数量的内存,并希望将此内存的位置分配给我在程序的 .data 部分中声明的变量。我知道如何将内存位置分配给变量,但是一旦我这样做了,我如何使用该变量来访问分配的内存?

4

2 回答 2

5

如果我正确理解您的问题,您将需要使用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(或任何其他寄存器)视为内存位置并适当地使用它。

于 2012-04-25T22:47:14.003 回答
4

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

于 2012-04-25T22:48:47.693 回答