X86 が Real Mode / Protected Mode / Long Mode のいずれで動作しているかを確認するために、下記のバイナリコードを利用しています。事前に RAX を 0 にしておけば、HLT 時の RAX の値で動作モードを判別できます。もっとよいバイナリコードがあれば知りたいです。
利用しているバイナリコード
33 C0 48 83 E8 01 F4
Real Mode (8086) では次のように解釈されます。
33 C0 XOR AX, AX
48 DEC AX
83 E8 01 SUB AX, 1
F4 HLT
Result: AX = -2 (FFFEh)
Protected Mode (i386) では次のように解釈されます。
33 C0 XOR EAX, EAX
48 DEC EAX
83 E8 01 SUB EAX, 1
F4 HLT
Result: EAX = -2 (FFFFFFFEh)
Long Mode (amd64) では次のように解釈されます。
33 C0 XOR EAX, EAX
48 83 E8 01 SUB RAX, 1
F4 HLT
Result: RAX = -1 (FFFFFFFFFFFFFFFFh)
ご覧のように、動作モードによってバイナリコードの解釈が変化することを利用しています。特に 48h の解釈が 8086 / i386 では DEC 、amd64 では REX.W と変化するところが味噌でした。