地球人都知道较新的处理器支持sysenter/sysexit指令以代替老的Int 2e/iretd指令。
新指令避免的2次查表,速度得到提升。那么如何知道自己的cpu是否支持新指令呢?
答案是使用cpuid指令,该指令返回值放在ecx和edx中,其中edx包含了SEP位(SysEnter/SysExit Present,
第11位),该位表示了是否支持sysenter/sysexit指令,快速写出识别代码:
DWORD medx,mecx; medx=mecx=0; __asm__ __volatile__("cpuid;mov %%edx,%0;mov %%ecx,%1"::"m"(medx),"m"(mecx)); printf("%08x %08x\n",medx,mecx); if(medx&(1<<11)) puts("fast int---sysenter!");