CPUID这个汇编指令到底有什么用。先谈谈01子功能。
最近在翻览intel公司的CPU开发白皮书,对CPUID这个指令做了一下了解。
CPUID这个指令就像一个功能函数一样,只要CPU的寄存器EAX有数据,它会在执行CPUID指令后返回到EAX,EBX,ECX,EDX不同的值。
原文可能没学过英文的人看不太懂。
我现在会陆续把功能号反映出来。
现在贴一个当CPU寄存器EAX值是1时CPUID这个指令返回的结果。
; EAX=01H 返回 ; EAX CPU 版本类型,家族,模式,单步ID ; EBX 0-7 字节,索引 ; 8-15 字节,CLFUSH 行尺寸(值 8 = 1字节缓存行尺寸) ; 16-23 字节,物理包内的逻辑处理地址ID的最大数 ; 24-31 字节,初始化APIC ID ; ECX SSE3 SSE3扩展功能 ; PCLMULQDQ 多比较 ; DTES64 64位DS区域 ; MONITOR 支持MONITOR/MWAIT ; DS-CPL CPL 调试记录 ; VMX 虚拟机扩展 ; SMX 保护模式扩展 ; EST 加强型Intel SeedStep 技术 ; TM2 终端监控2 ; SSSE3 SSSE3扩展 ; CNXT-ID L1目录ID ; SDBG 调试 ; FMA 多存地址 ; CMPXCHG16B ; xTPR 升级控制 ; [第16位保留] ; PDCM Perf/调试MSR ; PCID 处理器定义 ; DCA cache 目录访问 ; SSE4_1 ; SSE4_2 ; x2APIC ; MOVBE ; POPCNT ; TSC-Deadline 支持 APIC计时器在TSC deadline值上的 one-shot 操作 ; AES AESIN 扩展指令 ; XSAVE 支持 XSAVE/XRSTOR 外部处理指令 XSETBV/XGETBV和XCR0指令 ; OSXSAVE 支持CR4.0SXSAVE[bit 8]开启 用XSETBV/XGETBV访问XCR0管理XSAVE/XRSTOR ; AVX ; F16C ; RDRAND ; val = 0 ; EDX FPU-x87 FPU浮点运算器 ; VME 加强虚8086模式 包含CR4.VME控制特性,CR4.PVI为TSS保护模式虚拟中断,软中断除外,软件图片和EFLAGS.VIF,EFLAGS.VIP标志 ; DE 调试扩展 CR4.DE 控制I/O断点,选择访问DR4和DR5 ; PSE 页面扩展 大页面4M支持,包含CR4.PSE控制特性 选择保留CR3,PDEs,PTEs ; TSC 时间计数 RDTSC 指令支持 包含CR4.TSD私有控制 ; MSP RDMSR 和 WRMSR支持 ; PAE 物理地址扩展 32位 2M扩展4M ; MCE 机器异常检查 ; CX8 CMPXCHG8B ; APIC APIC芯片 处理器的高级中断控制,物理地址环FFFE0000h到FFFE0FFFh ; [第10位保留] ; SEP SYSENTER/SYSEXIT ; MTRR 内存环寄存器组 ; PGE PTE全局位 和 TLB有关 ; MCA 机器ARC检查 MCG_CAP特性 ; CMOV 移动比较指令 CPUID.FPU支持 FCOMI/FCMOV支持 ; PAT 页面属性表 和 MTRRs有关 ; PSE-36 页面尺寸扩展 4M页面地址,物理内存4G以上 13-20位页面目录进入,可以升到 40位 ; PSN 处理器序列数 ; CLFSH CLFSH指令 CLFLUSH指令 ; [第20位保留] ; DS 调试记录 和 BTS PEBS有关 ; ACPI 终端监示和时钟控制 ; MMX MMX技术 ; FXSR FXSAVE/FXRSTOR ; SSE SSE扩展 ; SSE2 ; SS Self Snoop ; HTT 多线程 ; TM 终端监示 ; [第30位保留] ; PBE Pend. Brk.EN 使用FERR#/PBE#在STPCLK#内 IA32_MISC_ENABLE MSR开启
以上是汇编语言的注释,当EAX等于1时的注释,ECX和EDX返回的是一个数,展开成32位,然后每一位就表示一个功能。
这些功能都是CPU的扩展功能。