2016-04-22 7 views
1

オーバーフローフラグを設定/クリアするための簡単なコード(またはアルゴリズム)を書きたいと思います。 OFを設定するには、符号付きの値を使用できることがわかります。しかし、どうすればそれをクリアすることができますか?x86アセンブリでオーバーフローフラグを設定またはクリアするにはどうすればよいですか?

+0

オーバーフローを起こさない操作を実行しますか?例えば'mov ax、1; –

答えて

1

多くの解決策があります。

たとえば、test al, alは、レジスタの内容に影響を与えずにOFフラグをクリアします。


それとも、あなたは他のフラグに影響を与えたくない場合は、あなただけの直接*FLAGSレジスタを変更することができます。

pushfd     ; Push EFLAGS onto the stack 
and dword [esp], ~0x800 ; Clear bit 11 (OF) 
popfd     ; Pop the modified result back into EFLAGS 

編集:Peter Cordesごとtest al, alor al, alを変更し「勧告例えば、32ビットで、これは次のようになります。 (効果は同じですが、後者はパフォーマンス上の理由により優れています)

+2

'test al、al'は、レジスタの内容に応じてフラグを設定するより良いイディオムです。フラグだけを書くので、 'al'を含む依存関係の長さは増えません。しかし、 'pushf' /' popf'メソッドの場合+1です。 ( 'sahf' /' lahf'は 'OF'を含まないので)。 –

+0

'または'と 'test'に関する良い点。それに応じて私の答えを更新しました。ありがとう! – user1354557