首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

利用标志位置位检测CPU型号的原理是什么?该怎么处理

2012-03-07 
利用标志位置位检测CPU型号的原理是什么?Assembly code 386+ ?pushfpopaxmovdx,ax保存原FLAGS寄存器的原

利用标志位置位检测CPU型号的原理是什么?

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在实现上有细微差别

热点排行