- Assembly code
; 386+ ? pushf pop ax mov dx,ax ;保存原FLAGS寄存器的原第14位-NT标志位 xor ax,0x4000 push ax popf ;取反原FLAGS寄存器第14位-NT标志位 pushf pop ax and ax,0x4000 ;取出取反后恢复到FLAGS寄存器的第14位-NT标志位 and dx,0x4000 ;取出原FLAGS寄存器的第14位-NT标志位 cmp ax,dx ;相减 jnz cpufine ;不相等(置位成功)说明是386+的CPU mov si,not386 ;相等(置位失败)说明是8086或者8088或者80286的CPU(16位处理器) call print jmp $ cpufine: ... ...
看这段代码可以判断是通过第十四位标志位来检测CPU型号,思路是对该位置位,看置位是否成功。
第十四位标志位NT(嵌套任务标志位)是在80386以后的CPU才增加的一个位,在之前的CPU中虽然存在这个位,但是没有定义,
我是不是可以理解为,对于实际存在但是Intel没有定义的标志位寄存器置位是不是总是不能成功呢?
或者说这些位的值永远是固定的0或者1??
------解决方案--------------------------------------------------------
差不多是这样,不同CPU在实现上有细微差别