0

MIPS で、実行中にラベルの値を変更したり、特定の値でラベルを作成したりすることは可能ですか?

lw $a0, label($s0)命令を使用するとき、ループするたびにラベルの値をインクリメントしたいので、これを尋ねます+4 配列の新しいメモリアドレスを示します。できることは承知していますlw $a0, label+4($s0)が、ラベルの新しい値は保存されません。

何かアドバイスはありますか?

4

2 に答える 2

5

いいえ。MIPS では、参照解除の際に括弧の外側に定数を指定する必要があります (不適切な表現)。ラベルの値を変更できるとしたら、それは一定ではなくなります。これを回避するには、代わりに次のようなことを行うことができます

la $t1, label          #t1 holds address of label
add $t1, $t1, $s0      #t1 now holds address of label + s0 offset
lw $a0, 0($t1)         #load word from t1's location

addi $t1, $t1, 4       #t1 was incremented by 4 bytes now
lw $a0, 0($t1)         #load the next word

s0 が常に負でない場合は、addu を使用することをお勧めします。

編集: ラベルの値を変更することはできません。これは、メモリ内の場所の単なるエイリアスです。テキスト セクションでは、次の命令の位置のエイリアスです。データ セクションでは、次のスペースのメモリ内の場所のエイリアスです。

于 2010-11-02T21:47:04.387 に答える