2

私はこのコードを持っています:

__asm jno no_oflow
overflow = 1;
__asm no_oflow:

次の素晴らしい警告が生成されます。

エラー C4235: 非標準の拡張子が使用されています: '__asm' キーワードはこのアーキテクチャではサポートされていません

その前に発生した減算演算のオーバーフローをチェックするために、このコードの等価/許容可能な代替は何ですか?

4

4 に答える 4

2

まず、以下を定義します。

#ifdef _M_IX86
typedef unsigned int READETYPE;
#else
typedef unsigned __int64 READETYPE;
#endif

extern "C"
{
READETYPE __readeflags();
}

#pragma intrinsic(__readeflags)

次に、次のようにeflagsレジスタを確認できます。

if ( (__readeflags() & 0x800))
{
    overflow = 1;
}
于 2009-12-10T10:08:04.880 に答える
1

上記のコードは、ある種の整数オーバーフロー/アンダーフローをキャッチしようとしていると思いますか? おそらく、この質問に対する答えが役立つでしょう:整数オーバーフローを検出する方法は?

于 2009-12-10T09:39:41.720 に答える
0

Microsoft が 64 ビットでのインライン アセンブリを禁止した理由はわかりません。ただし、別の .asm ファイルにアセンブリを記述し、それに対してプログラムをリンクすることはできます。

于 2009-12-10T12:54:39.187 に答える
0

以下は、すべてのプラットフォームで利用可能な組み込み関数のリストです。そこには適切なものがないように見えます。最も移植性の高い方法は、減算の前にオーバーフローが発生するかどうかを確認することだと思います。

于 2009-12-10T09:37:11.393 に答える