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