面倒なので、フラグチェックを、サブルーチン化してみる。

;
; EFLAGSの指定ビットをチェックする
;   ECX=チェックビット
;   指定ビットが変更可能であればCF=1
;
checkflg:
	PUSH	EAX			; EAXレジスタの内容を退避
	PUSH	EBX			; EBXレジスタの内容を退避

	; 指定ビットをテスト&反転
	PUSHFD				; フラグレジスタの内容を退避
	POP	EAX			; フラグレジスタの内容をEAXレジスタに転写

	BTC	EAX, ECX		; EAXレジスタのECXレジスタで指定されるビットを反転

	PUSH	EAX			; EAXレジスタの内容を退避
	POPFD				; EAXレジスタの内容をフラグレジスタに転写

	; 再度、指定ビットをテスト&反転
	PUSHFD				; フラグレジスタの内容を退避
	POP	EBX			; フラグレジスタの内容をEBXレジスタに転写

	BTR	EBX, ECX		; EBXレジスタのECXレジスタで指定されるビットを反転

	PUSH	EBX			; EBXレジスタの内容を退避
	POPFD				; EBXレジスタの内容をフラグレジスタに転写

	; 指定ビットが変更不可能であれば、そもそも、フラグの値は変わらない
	; 指定ビットが変更可能であれば、二回の反転で、元に戻る
	; EAXには、指定ビットが反転した内容が格納される。
	; EBXには、指定ビットが変更可能であれば、元の値の内容が格納される。
	; もし、指定ビットが変更不可能であれば、EAXと同じ内容が格納される。
	; よって、EAXとEBXの排他的論理和を求めて、
	; 0である場合、変更出来なかったと判断できる。

	CLC				; 一度キャリーフラグをクリアする
	XOR	EAX, EBX		; EAXとEBXの排他的論理和を求める
	JZ	checkflgfin		; 0であれば終了
	STC				; そうでなければ、キャリーフラグオン

checkflgfin:
	POP	EBX
	POP	EAX

	RET

これで任意のフラグをチェック出来るようになった。