CコードをMIPSアセンブリ言語に変換する練習をしていましたが、変数の割り当てにおけるmove
とli
の使用法を理解するのに苦労しています。
たとえば、MIPSで次のC行を実装するには:
int x = 0;
私がそれを正しく理解している場合(ただし、これは非常に疑わしい)、MIPSアセンブラーでこれらの両方が機能しているように見えます。
move $s0, $zero
li $s0, $zero
私が間違っている?これら2行の違いは何ですか?
move
命令は、あるレジスタから別のレジスタに値をコピーします。 li
命令は、特定の数値をそのレジスタにロードします。
specificゼロの場合、定数ゼロまたはゼロレジスタを使用してそれを取得できます。
move $s0, $zero
li $s0, 0
ただし、ゼロ以外の値を生成するレジスタはないため、次のような他の数値が必要な場合はli
を使用する必要があります。
li $s0, 12345678