まずは、EFLAGSのチェック

CPUID命令が使用可能かどうかは、EFLAGSの21ビット目が、変更可能かどうかで判定する。
というわけで、やってみる。

	; フラグのbit21をオンにする

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

	BTS	EAX, 21		; EAXレジスタの21bit目をテスト&セット

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

	; フラグのbit21がオンかチェック

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

	BTR	EAX, 21		; EAXレジスタの21bit目をテスト&リセット

BTSやBTRは、指定フラグの値をキャリーフラグに設定してから、
指定フラグをセットorリセットするので、
BRT実行後に、キャリーフラグがオンであれば、CPUID命令が使用可能という事になる。


しかし、フラグの扱いって面倒だ...
いや、そんな事を言ったら、80x86って面倒だ...
って、それを言っちゃ、身も蓋も... 苦笑