2012-03-15 25 views
-2

可能性の重複:
about assembly CF(Carry) and OF(Overflow) flagキャリーフラグが設定されていません。 x86 ASM

私はキャリーが2つの符号なしダブルワードを追加した後に発生するかどうかを確認しようとしています。このような

 add edx, eax   ; edx will hold the numeric value 
     wait     ; not really needed 
     jc bad     ; jmp to bad if carry bit is set 
     jo bad     ; jmp to bad if overflow bit is set (Yes for signed) 

しかし、どちらもオーバーフローフラグやキャリーフラグは、それに応じて設定されています。テスト目的のために、私は追加が32ビットregには大きすぎる値になることを確かめます。 (追加した後、値が折り返されます)

2つの数値を加算するとオーバーフローが発生するかどうかを確認しますか?

+1

add命令を実行する前のedxとeaxの値は何ですか?それらが両方とも0であれば、いいえ、キャリーもオーバーフローも設定されないと思われます。 –

+0

@Mike、私はedxとeaxの値が十分に大きく、 "オーバーフロー"またはキャリーするのに十分な大きさであることを確認することに注意します。ただし、キャリーフラグは設定されません。 – Dacto

+2

'wait'を削除します。次に、[この回答](http://stackoverflow.com/a/8037485/968261)に、整数の加算と減算の例とキャリーとオーバーフローの設定方法を設定します。ほとんどの場合、数字が小さすぎてCF = 1またはOF = 1にならない可能性があります。また、あなたはedxやeaxに必要なデータがロードされていないか、あるいは他のコードバグのためにオーバーフローと非オーバーフローの区別ができません。あなたのコードについて詳しく教えてください。 –

答えて

1

符号付き加算および減算にはオーバーフローが使用されます。

符号なし加算と減算については、キャリーフラグだけを見てください。

+0

私の質問では、キャリーフラグも適切に設定されていないことに注意してください。 – Dacto

関連する問題