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 $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 に答える