[解決済み] MIPSでディブディブ
質問事項
とはどのような違いがあるのでしょうか。
div
と
divu
をMIPSに搭載しました。
との違いを見たことがあります。
add
と
addu
(
同上リンク
). 私の理解では、addとadduはどちらも2の補数符号付き数値で演算します。
唯一の違いは、addはオーバーフロー時にトラップを発生させるが、adduは発生させないことである。
しかし、div と divu の違いは何ですか?つまり、ここではオーバーフローは発生しませんよね。
以下のケースを試しましたが、divuではかなり変な結果になりました。私は(mfloで)商をロードし、以下はその出力です。
num1 | num2 | div num1 num2 (qoutient) | divu num1 num2 (qoutient) |
5 | 2 | 2 | 2 |
-5 | 2 | -2 | 2147483645 |
5 | -2 | -2 | 0 |
-5 | -2 | 2 | 0 |
どなたか、何が起きているのか論理的に説明してくださいませんか?
どのように解決するのですか?
一般に
u
は符号なしを意味します。オーバーフロー・トラップは
副作用
の
サイン入り
一方、符号なし演算は例外を発生させることなく、オーバーフローや折り返しが許されます。
これが意味するのは、トラップを見る前に、符号付きと符号なしの違いを考えるべきだということです。通常の
div
命令はオペランドを2補符号化したものとして扱いますが
divu
演算はオペランドを符号なし整数として扱います。
つまり、同じオペランドを使っても、そのオペランドが
div
または
divu
が使用されます。
分割する場合
-5
によって
2
と
div
とすると,期待通りの答えが得られます:商が-2,余りが-1,これは,以下の理由から理にかなっています。
-2 * 2 + -1 = -5
. しかし
divu
これは符号なし整数を受け取る
を使用することができます。
-5
は、quot;negative five"とはみなされず、むしろ
11111111111111111111111111111011
(の2の補数表現である)。
-5
というバイトで読み込まれます。
4294967291
で割ると
2
が正しく得られる。
2147483645
.
要するに、その目的は
u
のバージョンは、たとえそれがオーバーフローを引き起こすことができないとしても、入力を符号なし整数として処理することです。なぜこのようなものが存在するのでしょうか?たとえば、あなたが
4294967291/2
- 符号付き除算でどのようにそれを行うのでしょうか?を格納しようとすると
4294967291
を 32 ビットレジスタで使用すると、次のように解釈されることになります。
-5
ではなく
4294967291
.
divu
は、符号用に1ビットを確保するのではなく、レジスタの32ビットすべてを"data"として使用することでこの問題に対処しています。
関連
-
[解決済み】lc3 LDR命令と格納される値について
-
[解決済み】x86アセンブリ。AT&Tの構文で「subl」コマンドはどのように動作するのか
-
[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
-
[解決済み] 018Hと0cHは、アセンブリでは何の略ですか?具体的には「cH」と「0」「h」のプリフィックス/ポストフィックス
-
[解決済み] x86 - C言語のsscanf関数
-
[解決済み] 8086アセンブリ言語での2つのレジスタのスワッピング(16ビット)
-
[解決済み] MIPSアセンブリ言語では、なぜ.globl mainを使うのですか?
-
[解決済み] CS:IPの組み立ての意味と仕組みについて教えてください。
-
[解決済み] x86アセンブリでレジスタに使用されるpush/pop命令の機能は何ですか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜMIPS用のsubiオペコードは存在しないのですか?
-
[解決済み] MIPSの大、小、大
-
[解決済み] ARMのアセンブリ言語でbx lrは何をするのですか?
-
[解決済み] MIPSの左シフト
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] オブジェクトファイルのシンボルテーブルとリロケーションテーブル
-
[解決済み] linuxのsys_readシステムコールを作ると、レジスタeaxに何が入るのでしょうか?
-
[解決済み] SRLとSRAの違いは何ですか?[重複しています]。
-
[解決済み] objdumpの出力にあるdata16とはどういう意味ですか?
-
[解決済み] アセンブリ言語 jeジャンプ機能