1

背景

私は自分のコースの1つでMIPSを学び始めたばかりの学生であり、教授はlaコードでLoad Address()などの疑似命令を使用することを許可していません。宣言された変数のアドレスをコードの後半で使用するためにレジスターに格納する場合、標準命令の正しい使用法の例はどのようになるのでしょうか。

私の解決策

命令で構文エラーが発生しましたが、現在このコードを使用しようとしていますlui

main:
.data
    Array:
    .space 80             #Declares that Array will hold 20 integers
.text
    lui  $s0, Array       #loads most significant bits into $s0
    ori  $s0, $s0, Array  #loads least significant bits into $s0

私の質問

私が理解していることから、これはArrayに配置されるアドレスになるはず$s0です。しかし、そうではないように思われるので、私がここで何をすべきかについて誰かが私を助けてくれるだろうかと思います。

4

1 に答える 1

2

luiおよびoriの説明のデータセクションにあるラベルを参照する必要があります。以下は、gnuアセンブラ(as)で機能します。

    .data
    Array:
    .space 80             #Declares that Array will hold 20 integers
...
.text
    lui $s0, %hi(Array)
    ori $s0, %lo(Array)
    lw  $s1, 0($s0)       # load 1st word of Array
...

%hiおよび%loディレクティブは、リンカーに何が起こっているかを通知するため、マシンコードにラベル「配列」のアドレスを入れることができます。(注:これは、SPIMまたはMARSでは機能しない可能性があります。)

この質問を参照してください。

MIPSRunはMIPSCPUに関する標準的な本です。を参照してください。この本では、MIPS命令セット、CPUアーキテクチャ、およびそれらがMIPSLinuxとどのように関連しているかについて説明します。

于 2012-10-11T23:40:18.627 に答える