問題タブ [carryflag]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - キャリーフラグが設定されているかどうかを確認します
インラインアセンブラ[gcc、intel、c]を使用して、操作後にキャリーフラグが設定されているかどうかを確認するにはどうすればよいですか?
c++ - アセンブリ ADC (キャリー付き加算) から C++
x86 アセンブリ命令がありますADC
。これは「キャリーで追加」を意味することがわかりました。これはどういう意味ですか/何をしますか? この命令の動作を C++ でどのように実装しますか?
情報:
Windows でコンパイルされています。32 ビットの Windows インストールを使用しています。私のプロセッサは Intel の Core 2 Duo です。
c# - バイトがオーバーフローすると実際に何が起こりますか?
バイトがオーバーフローすると実際に何が起こりますか?
私たちが持っていると言う
今この追加を行う場合
最終的にbyte3=94になると思いますが、実際にはどうなりますか?どういうわけか他のメモリを上書きしましたか、それともこれは完全に無害ですか?
assembly - ADC を使用してアセンブリで 32 ビットの 2 つの数値を加算するにはどうすればよいですか?
ADC を使用してアセンブリで 32 ビットの 2 つの数値を加算するにはどうすればよいですか?
gdb - アセンブラ付きのgdb:キャリーフラグのステータスを出力します
gdbでデバッグしているx86アセンブラプログラムがあります。「print$cf」のように、gdb内のキャリーフラグのステータスを出力する方法はありますか?
c++ - キャリー フラグを使用した効率的な 128 ビット加算
C++ コードの非常に内側のループで 128 ビットの整数カウンターを使用しています。(無関係な背景: 実際のアプリケーションでは、通常のグリッドで有限差分方程式を評価しています。これには、大きな整数を繰り返しインクリメントすることが含まれます。また、64 ビットでさえ十分な精度ではありません。小さな丸めが累積して、答えに影響を与えるからです。)
整数を 2 つの 64 ビット符号なし long として表現しました。これらの値を 128 ビットの定数でインクリメントする必要があります。これは難しいことではありませんが、下位ワードから上位ワードへのキャリーを手動でキャッチする必要があります。
私は次のような作業コードを持っています:
これはタイトでシンプルなコードです。できます。
残念ながら、これは実行時間の約 20% です。キラーラインは、そのローワードテストです。それを削除すると、明らかに間違った答えが得られますが、実行時のオーバーヘッドは 20% から 4% に減少します! そのキャリーテストは特に高価です!
私の質問: C++ はハードウェア キャリー フラグを、GCC の拡張としても公開しますか? 実際のコンパイル済み命令が hiWord の追加に最後のキャリー命令を使用した追加を使用した場合、上記の test-and-add-carry 行なしで追加を実行できるようです。test-and-add-carry 行を書き直して、コンパイラに組み込みオペコードを使用させる方法はありますか?
binary - バイナリ加算/減算
キャリー フラグ (CF) とオーバーフロー フラグ (OF) を理解するのに少し苦労しています。
ここに私が取り組んでいるいくつかのサンプル問題があります:
- 符号位置のキャリーアウトが1で、符号位置へのキャリーインが0なので、OF=1?
- 符号位置のキャリーアウトが1、符号位置へのキャリーインが1なので、OF=0?
- 符号位置のキャリーアウトが0で、符号位置へのキャリーインが1なので、OF=1?
符号なしオーバーフローと適切な CF 値を理解するのに苦労していると思います。
math - Z80 のオーバーフロー フラグとキャリー フラグ
Z80 コアにオペコードの ADD A,r セットを実装する準備が整いました。キャリー フラグとオーバーフロー フラグについて少し混乱がありましたが、それが正しいことを確認するためにコミュニティに投稿したかったのです。
基本的に、私が見る限り、Z80 の ALU は符号付き/符号なし操作を気にせず、ビットを追加するだけです。これは、2 つの 8 ビット値が加算され、加算の結果が 9 ビット値になる場合、キャリー フラグが設定されることを意味します。これには、-20 (11101100) と -40 (11011000) などの 2 つの負の 2 の補数を加算することが含まれます。結果は -60 (11000100) ですが、結果は実際には 9 ビット値 1 1100 0100 になります。 2 つの負の 2 の補数値を加算すると、オーバーフロー条件がない場合でもキャリー フラグが常に設定されます。
次に、この命令のオーバーフローを検出するために、両方のオペランドのビット 7 を XOR し、結果が 10000000 の場合、オーバーフローは絶対にありません。結果が 00000000 の場合、次のようにオーバーフローが発生する可能性があります。符号は同じなので、どちらかのオペランドのビット 7 との加算結果のビット 7 を XOR します。この結果が 10000000 の場合、オーバーフローが発生し、P/V オーバーフロー フラグを設定します。私もここにいるの?
このような複雑な質問で申し訳ありませんが、私は正しいと確信していますが、このロジックに基づいて無数の指示を続ける前に知っておく必要があります. どうもありがとう。
assembly - アセンブリ - キャリー フラグ VS オーバーフロー フラグ
私は次のコードを持っています:
調べてみると、1回目はオーバーフローフラグとキャリーフラグがセットされ、2回目はオーバーフローのみがセットされます。
しかし、理由がわかりません:
- 符号なし数では、結果は 143 (8FH) となり、8 ビットの符号なし数 (255 より小さい) に適合します => キャリー フラグを設定しないでください。符号付き数では、結果は 127 です。8 ビットの符号付きに適合し、オーバーフローは設定されません。
どうしたの?ありがとう。
math - x86でのキャリー/オーバーフローと減算
x86でオーバーフローとキャリーフラグに頭を悩ませようとしています。
私が理解しているように、符号付き 2 の補数の加算では、フラグは 4 つの方法のいずれかでのみ生成できます (私の例は 4 ビットの数値です)。
- pos+pos = neg (オーバーフロー)
- 0111 + 0001 = 1000 (7 + 1 = -8)
- pos+neg = pos (キャリー)
- 0011 + 1110 = 0001 (3 + -2 = 1)
- neg+neg = neg (キャリー)
- 1111 + 1111 = 1110 (-1 + -1 = -2)
- neg+neg = pos (オーバーフロー & キャリー)
- 1000 + 1001 = 0001 (-8 + -7 = 1)
では、x86 アセンブリでは、A から B を減算すると、A と -B を加算した場合と同じフラグが生成されますか?