5

メモリアクセスについてお聞きしたいのですが。コマンドを実行するとload word、どのようなメモリ制限がありますか?オフセットまたはベースレジスタとして使用できる最大数は何ですか?

レジスタは32ビットであり、私が知る限り、「イミディエート」は16ビットです。したがって、私は次のようなことはできないと確信しています

array:  .word 0:20000
~

la     $s0, array
lw     $s1, 15000($s0)
...

したがって、15000にアクセスしたい場合は、laもっと小さいものにアクセスして、そこから先に進む必要があるかもしれません。しかし、大丈夫であるためにアクセスする必要がある小さい値は何ですか、そしてその理由は何ですか?

4

1 に答える 1

2

のイミディエートフィールドlwは16ビットです。2の補数で署名されているため、即時オフセットの可能な範囲は-32768..32767であるため、lw $s1, 15000($s0)問題ないはずです。

laこれは実際のMIPS命令ではないことを認識してください。むしろ、指定したイミディエート値が指定されたレジスタに配置されるように、最適な命令シーケンスを生成するようにアセンブラに指示します。したがって、32ビット範囲の値全体をを使用して設定できますが、一般に、1回使用して適切な値をレジスタに配置し、後続のいくつかの命令が使用するよりもその値からの即時オフセットを使用できるようにすることで、laより最適なコードを生成できます。即時値が必要になるたび。lala

したがって、配列のオフセット40000および50000から値をロードする必要があるとすると、次のようになります。

array:  .word 0:20000
~
la     $s0, array          # get address of array
la     $s1, 40000          # get offset into a register
add    $s0, $s0, $s1       # add offset to address, i.e. calculate (array+40000)
lw     $s1, 0($s0)         # fetch data from (array+40000)
lw     $s2, 10000($s0)     # fetch data from (array+40000+10000)
于 2011-03-09T08:48:25.870 に答える