web-dev-qa-db-ja.com

MIPSアセンブリ言語の「move」と「li」の違い

CコードをMIPSアセンブリ言語に変換する練習をしていましたが、変数の割り当てにおけるmoveliの使用法を理解するのに苦労しています。

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

int x = 0;

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

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

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

25
user2492270

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

specificゼロの場合、定数ゼロまたはゼロレジスタを使用してそれを取得できます。

move $s0, $zero
li   $s0, 0

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

li $s0, 12345678
48
duskwuff