Unit CPUid; Interface Type TCpuType = (cpu8086, cpu286, cpu386, cpu486, cpuPentium); Function CpuType : TCpuType; Function CpuTypeString : String; Implementation Uses SysUtils; Function CpuType : TCpuType; ASSEMBLER; Asm // 8086 CPU 检测 push ds pushf pop bx mov ax, 0fffh and ax, bx push ax popf pushf pop ax and ax, 0f000h cmp ax, 0f000h mov ax, cpu8086 je @@End_CpuType // 80286 CPU检测 or bx, 0f000h push bx popf pushf pop ax and ax, 0f000h mov ax, cpu286 jz @@End_CpuType // 386 CPU 检测 db 66h pushf db 66h pop ax db 66h mov cx, ax db 66h xor ax, 0h dw 0004h db 66h push ax db 66h popf db 66h pushf db 66h pop ax db 66h xor ax, cx mov ax, cpu386 je @@End_CpuType // 486 CPU 检测 db 66h pushf db 66h pop ax db 66h mov cx, ax db 66h xor ax, 0h dw 0020h db 66h push ax db 66h popf db 66h pushf db 66h pop ax db 66h xor ax, cx mov ax, cpu486 je @@End_CpuType // Pentium CPU 检测 db 66h mov ax, 1 dw 0 db 66h db 0Fh db 0a2h db 66h and ax, 0F00H dw 0 db 66h shr ax, 8 sub ax, 1 @@End_CpuType: pop ds End; Function CpuTypeString : String; Var Kind : TCpuType; Begin Kind := CpuType; Case Kind Of cpu8086 : Result := '8086'; cpu286 : Result := '286'; cpu386 : Result := '386'; cpu486 : Result := '486'; cpuPentium : Result := 'Pentium'; Else Result := Format ('P%d', [Ord (kind)]); End; End; End.