MIPS で、実行中にラベルの値を変更したり、特定の値でラベルを作成したりすることは可能ですか?
lw $a0, label($s0)
命令を使用するとき、ループするたびにラベルの値をインクリメントしたいので、これを尋ねます+4 配列の新しいメモリアドレスを示します。できることは承知していますlw $a0, label+4($s0)
が、ラベルの新しい値は保存されません。
何かアドバイスはありますか?
MIPS で、実行中にラベルの値を変更したり、特定の値でラベルを作成したりすることは可能ですか?
lw $a0, label($s0)
命令を使用するとき、ループするたびにラベルの値をインクリメントしたいので、これを尋ねます+4 配列の新しいメモリアドレスを示します。できることは承知していますlw $a0, label+4($s0)
が、ラベルの新しい値は保存されません。
何かアドバイスはありますか?
いいえ。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 を使用することをお勧めします。
編集: ラベルの値を変更することはできません。これは、メモリ内の場所の単なるエイリアスです。テキスト セクションでは、次の命令の位置のエイリアスです。データ セクションでは、次のスペースのメモリ内の場所のエイリアスです。