[解決済み] なぜ、addiではなくaddiuを使うのか?
2022-02-05 15:31:01
質問
MIPSアセンブリにおいて
addiu
オーバー
addi
? はありません。
addiu
符号なし(計算が破綻する?)
どのように解決するのですか?
<ブロッククオートで、計算が台無しになる
いいえ、MIPSは 2の補数 したがって、同じ加算・減算命令で符号あり・なし両方の演算を行うことができます。結果に差はない。
これは、ビット単位の命令や、幅寄せしない乗算など、多くの演算でも同じことが言えます。参照
両者の違いは、ただ一つ
addi
はオーバーフロー時にトラップを発生させるのに対し
addiu
を使用しない。ですから
addi
とそのオーバーフロー族(
add
,
sub
...)は、役に立たないことが多い。実際、ほとんど使われないので
addi
はMIPSr6で削除されました。
貴重なオペコード空間を他の命令に解放するため
この命令名は非常に誤解を招きやすいもので、実際には "unsigned" の追加ではないためです。即値はまだ
符号拡張
ゼロ拡張ではありません。ですから
addiu $1, $2, 0xFFFF
から実際に1を減算します。
$2
65535を追加するのではなく、65535を追加する。
その名前とは裏腹に、add immediate unsigned (
addiu
) は、オーバーフローを気にしない場合に、符号付き整数に定数を追加するために使用されます。MIPSには減算即値命令がなく、負数には符号拡張が必要なため、MIPSのアーキテクトは即値フィールドを符号拡張することにしたのです。
もっと読む アドとアドゥの違い
関連
-
[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
-
[解決済み] callq命令とは何ですか?
-
[解決済み] error A2022: 命令オペランドは同じサイズでなければなりません。
-
[解決済み] CPUのParity Flagは何のためにあるのですか?
-
[解決済み] 8086アセンブリ言語での2つのレジスタのスワッピング(16ビット)
-
[解決済み] アセンブリで文字列の長さを表示する方法
-
ファイルまたはアセンブリを読み込めませんでした ... 不正なフォーマットでプログラムをロードしようとしました。
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?
-
[解決済み] std::vector に対する反復処理: 符号なしインデックス変数と符号ありインデックス変数の比較
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】単純なforループのためのMIPSアセンブリ
-
[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
-
[解決済み] 着信側セーブレジスタ、発信側セーブレジスタとは何ですか?
-
[解決済み] MIPSでディブディブ
-
[解決済み] アセンブリ - CMP後のJG/JNLE/JL/JNGE
-
[解決済み] x86アセンブリで160x100モードを実現する
-
[解決済み] MIPS浮動小数点:SWC1対S.S.
-
[解決済み] アセンブリ言語 - sarqはコードの中で何をするのですか?
-
[解決済み] x86アセンブリでレジスタに使用されるpush/pop命令の機能は何ですか?
-
[解決済み] LC3 LEA 命令と格納された値