36

私は C コードを MIPS アセンブリ言語に変換する練習をしていましたが、変数代入におけるmoveとの使用法を理解するのに苦労しています。li

たとえば、MIPS で次の C 行を実装するには:

int x = 0;

私がそれを正しく理解していれば (しかし、私はこれを非常に疑っています)、MIPS アセンブラーでこれらの両方が機能するように見えます:

move $s0, $zero
li $s0, $zero

私が間違っている?これらの2つの行の違いは何ですか?

4

1 に答える 1

60

このmove命令は、あるレジスタから別のレジスタに値をコピーします。このli命令は、特定の数値をそのレジスタにロードします。

ゼロの特定のケースでは、定数ゼロまたはゼロレジスタのいずれかを使用してそれを取得できます。

move $s0, $zero
li   $s0, 0

ただし、ゼロ以外の値を生成するレジスタはないためli、次のような他の数値が必要な場合は使用する必要があります。

li $s0, 12345678
于 2013-11-07T03:55:32.273 に答える