1. ホーム
  2. c

[解決済み] MIPSアセンブリ言語における "move "と "li "の違いについて

2022-03-06 22:25:57

質問

C言語のコードをMIPSアセンブリ言語に変換する練習をしていたのですが、MIPSアセンブリ言語での moveli を変数に代入しています。

例えば、以下のC行をMIPSで実装する場合。

int x = 0;

私の理解が正しければ(大いに疑問ですが)、これらは両方ともMIPSアセンブラで動作するようです。

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

私が間違っているのでしょうか?この2行の違いは何でしょうか?

どのように解決するのですか?

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

については 特定 の場合、定数ゼロかゼロレジスタのどちらかを使って得ることができます。

move $s0, $zero
li   $s0, 0

しかし、0以外の値を生成するレジスタはないので、その場合は li のように、何か他の数値が必要な場合。

li $s0, 12345678