どのように私はVS2008の64ビットビルドでintristicで__asm jno no_oflowを交換するのですか?

StackOverflow https://stackoverflow.com/questions/1879768

質問

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

__asm jno no_oflow
overflow = 1;
__asm no_oflow:

これは、この素敵な警告を生成します:

  

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

このコードは、その前に起こった減算演算のオーバーフローをチェックするための等価/許容交換をでしょうか?

役に立ちましたか?

解決

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

#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;
}

他のヒント

私は上記のコードは、整数オーバーフロー/アンダーフローのいくつかの並べ替えをキャッチしようとしていると仮定しますか?たぶん、この質問に対する答えは役立ちます:整数オーバーフローを検出するために、どのように<? />

ここでは、すべてのプラットフォームで利用可能な組み込み関数の一覧のです。そこに、適切なものは何もありません見えます。私はほとんどのポータブルな方法は、それがオーバーフローにつながるかどうかを減算する前に確認することだろうと思います。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top