Pisze w MASM32 program identyfikujący CPU, ale najnowszy MASM32 nie wspiera instrukcji CPUID na procesorach ponizej 586, chociaż na wielu 486 ten opcode jest zaimplementowany. Rozwiązałem to w taki sposób:
include \masm32\include\masm32rt.inc
.486
iCPUID macro ;chodzi o to makro, zawiera ono heksadecymalna wartość CPUID
db 0FH, 0A2H
endm
.data?
.data
.code
start:
pushfd
pop eax
mov ecx, eax
xor eax, 200000h
push eax
popfd
pushfd
pop eax
;mov ecx, eax ;PUNKT TESTOWY
xor eax, ecx ;sprawdzenie czy da się ustawić ID flag
jne koniec
xor eax, eax
iCPUID ;tutaj jest to makro wykorzystane
koniec:
invoke ExitProcess, 0
end start
Pytanie brzmi: czy to rozwiązanie nie spowoduje Invalid opcode exception, skoro procesor nie mogący zmienić ID flagi zostanie wyrzucony na koniec kodu - czy to jest w jakiś sposób niebezpieczne? A także czy jest sens pisania takiego program na 486. Podobno prawie wszystkie obecne systemy operacyjne nie da się zainstalować na komputery z tak starymi procesorami.