7. 处理器的特性

EAX=01h号功能将获得处理器的基本信息,它是CPUID中一个重要的功能号,eax寄存器返回处理器的Model、Family、Stepping等信息。在ebx寄存器中:ebx[15:8]返回CLFLUSH line size,这个值乘8就可以得到Cache line的size(!!!),ebx[23:16]返回逻辑处理器最大可寻址的数目

实验4-5:查看CPU的cache line size和Maximum logic processor

实验的完整源码在\topic04\ex4-5\setup.asm文件里,下面是在VMware里的运行结果。

7. 处理器的特性

在VMware中笔者设置processor core的数目为4个,上面显示的logic processor是4个,ebx[15:8]的值是0x08,所以它的cache line size是64(0x40)字节(!!!)。

在ecx和edx寄存器中返回CPU支持的种类繁多的特性,下面分别是ecx和edx寄存器返回值所对应的功能。

7. 处理器的特性

7. 处理器的特性

这些特性是处理器硬件物理上所支持的功能,利用CPUID指令可以检测处理器所支持的特性。

可是CPUID.EAX=01H在ECX和EDX返回的某些特性是由软件设置的。还有部分特性受到MSR(Model Specific Register)的设置影响。

例如:ECX寄存器的bit 27是OSXSAVE标志位,这个标志位并不是硬件特性,是由软件设置而来的,在OS里为了开启AVX指令使用环境,OS最终会设置CR4的Bit 18位CR4.OSXSAVE=1,处理器会根据这个位来置CPUID(EAX=01h):ECX[27]标志,也就是上面的ECX[OSXSAVE]标志位。软件使用AVX指令前会读取这个标志位,确认OS已经准备好AVX指令的执行环境。

检测CPU是否支持AVX指令的是Bit 28 AVX标志位,而Bit 26位是XSAVE标志位,它用于检测CPU是否支持XSAVE/XRSTOR、XSETBV/XGETBV指令和XCR0。