[解決済み] ARMはSDIVとUDIVを区別していますが、ADD、SUB、MULでは区別していないのはなぜですか?
2022-02-15 12:27:47
質問
タイトルにあるように、ARM命令セットでは、なぜ除算時のみ符号付きと符号なしを区別しているのでしょうか?
SDIVとUDIVは使えますが、ADD、SUB、MULはそうではありません。
どのように解決するのですか?
同じ大きさの符号付き数と符号なし数の加算と減算は、(ARMが採用している)2の補数演算では全く同じビットパターンになるので、別の命令は必要ありません。例えば、バイトサイズの値を取る場合です。
0xFC +4
signed: -4+4 = 0
unsigned: 252 +4 = 256 = 0x100 = 0x00 (truncated to byte)
オペランドが符号付きか符号なしかで掛け算の結果が変わりますが、その場合は
MUL
命令では
下位32ビットのみ
の結果であり、どちらも同じです。
最近のARMプロセッサでは、64ビット全体の結果を生成する命令があり、それらはSDIVとUDIVのようにペアで提供されます。
umull、umlal、ssmull、smlal
:
符号付きおよび符号なし Long Multiply、オプションでAccumulate。 32 ビットのオペランドと 64 ビットの結果およびアキュムレータ。
関連
-
[解決済み】MIPSで整数の絶対値?
-
[解決済み] callq命令とは何ですか?
-
[解決済み] popまたはadd esp、4 ? その差は何ですか?
-
[解決済み] なぜ、addiではなくaddiuを使うのか?
-
[解決済み] MIPS分岐実行順序(beqz)
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み] ARMチップにはなぜJavascriptを名前に含む命令(FJCVTZS)があるのですか?
-
[解決済み] C#の整数の割り算は、なぜfloatではなく整数を返すのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】andiとoriはこのプログラムで何をするのですか?
-
[解決済み] popまたはadd esp、4 ? その差は何ですか?
-
[解決済み] error A2022: 命令オペランドは同じサイズでなければなりません。
-
[解決済み] MIPS: スタックポインタ($sp)とスタックの関連した使用法
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] アセンブリで数字をASCIIに変換する
-
[解決済み] なぜSet on Less ThanはALU演算なのか?
-
[解決済み] .quadディレクティブはアセンブリでどのように機能するのですか?
-
[解決済み] ARMv8でリテラル0ではなく、xzrレジスタを使用するのはなぜですか?
-
[解決済み] MIPSアセンブリ言語では、なぜ.globl mainを使うのですか?