我正在开发一个x86引导程序并遇到了这个问题(我想这应该是非常简单的,但到目前为止我还没能解决):我想检测CPU主机的位数(例如,如果它只有16位,或支持32位或64位)。
我已经使用了CPUID指令,但它是用486引入的,因此无法检测仅16位与支持32位保护模式(或32位操作数大小)的386兼容CPU在带有前缀的实模式中。
答案 0 :(得分:1)
检查32位(参见http://www.rcollins.org/ddj/Sep96/Sep96.html):
pushf
pushf
上清除高4位(在实模式下运行时)popf
修改实模式中的高4位(但是所有4位应该具有相同的值 - 全部设置或全部清除)通过使用pushf
,popf
并修改堆栈上的数据,您可以检查是否可以修改高4位;如果是,它必须是32位CPU。
检查CPUID
:
cpuid
指令。