オーバーフローについて。
Posted: 2006年4月22日(土) 12:33
ABで、直前の計算(加算)でオーバーフローしたかどうかを判断する関数ってありましたっけ?
コード: 全て選択
' Constants of Status Flags
Const EFLAGS_CF = &H1 ' Carry Flag 加算(減算)で桁上がり(桁借り)が発生
Const EFLAGS_PF = &H4 ' Parity Flag 最下位バイトのパリティ
Const EFLAGS_AF = &H10 ' Adjust Flag 調整フラグ(BCD 命令で使用)
Const EFLAGS_ZF = &H40 ' Zero Flag 計算結果がゼロ
Const EFLAGS_SF = &H80 ' Sign Flag 計算結果の符号
Const EFLAGS_OF = &H800 ' Overflow Flag オーバーフローが発生
Dim __gf = &HC3589C As DWord
Dim __sf = &HE1FF9D59 As DWord
Dim GetEFLAGS As *Function() As DWord
Dim SetEFLAGS As *Sub(ByVal NewValue As DWord)
GetEFLAGS = VarPtr(__gf)
SetEFLAGS = VarPtr(__sf)
コード: 全て選択
c = a + b
' 計算の直後に使用すること
If GetEFLAGS() And EFLAGS_OF Then
MessageBox(NULL, "オーバーフローが発生", "テスト", MB_OK)
End If