1. ホーム
  2. assembly

[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?

2022-03-07 16:52:14

質問

今回の疑似インストラクションについて。

move $rt, $rs

アセンブリコードは、addiとaddのどちらでも良いのでしょうか?つまり、どちらを使ってもいいのでしょうか?

add $rt, $rs, $0

または

addi $rt, $rs, $0

?

編集する を間違えてしまったようです。 addi

add $rt, $rs, $0

と同じになります。

addi $rt, $rs, 0

から add はレジスタを追加するので、その直下に定数が必要です。 addi

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

その addi 命令では 即時 オペランドはレジスタではありません。 $0 は実際には 0 :

add   $rt, $rs, $0
addi  $rt, $rs, 0

両者とも 働く で、必要な情報はすべて命令自体にエンコードされています)。

add   $d, $s, $t
    0000 00ss ssst tttt dddd d000 0010 0000
addi  $t, $s, i
    0010 00ss ssst tttt iiii iiii iiii iiii

しかし、それはより 通常 を使うだけで、ゼロロックの $0 というのも、結局のところ、これがレジスタの目的だからです。

しかし、符号付き命令では余分なオーバーフロー・チェックが行われる可能性があると記憶していますので、符号なしのバリエーションを使用することもあります。

addu  $rt, $rs, $0