明明白白用DEBUG清除CMOS密码
今天一位朋友因要更改CMOS设置而又忘记了密码来找我,这种小儿科的问题自然是难不到我。坐到朋友的电脑前,首先进入系统,在命令行状态下运行DEBUG命令后输入如下命令
-o 70 xx(回车)
-o 71 xx(回车)
-q (回车)
重新启动计算机后顺利进入CMOS,不用再输入密码。
命令说明:
1、其中xx为00到99之间的任意数值;
2、横线(-)为DEBUG命令提示符;
3、-后面为字母O,为DEBUG的O命令,而不是数字零;
其命令格式为,-O 端口号 一字节数据 (表示要将一字节的数据输出(写入)到指定端口)
4、q为DEBUG命令中的退出命令;
5、70和71分别表示端口号,必须配对使用,且先后顺序不能变动。
6、进行如上操作后,重新启动计算机,如果进行CMOS设置时仍有密码,说明cmos中的数据没有被破坏,此时可再运行DEBUG,使用类似的O命令,不过应将70和71后面的数据变化一下。
正准备起身走的时候,朋友发话了(这位朋友也是位好学之人哪),为什么输入这这些命令之后就行了呢?非要我给他解释一番,这下可把我给难住了,虽然很早就从一些报刊和网站上看过用DEBUG清除CMOS密码的方法,也实践了很多回了,但一直都不清楚具体的原因,且也没有从哪里看到过介绍其关于原理方面的文章,于是答应朋友回来后查资料并给他答复。
回来后查阅相关资料,终于从一本老古董的DOS书刊上找到了,弄明白了为什么以上操作可以清除CMOS密码,现在写出来与大家分享。
CMOS的寻址规则是:CMOS中有静态的RAM,其容量上百至千字节,从0开始编地址,它不是内存的一部分,要访问时必须进过端口进行,其端口号为70和71。要通过这两个端口访问CMOS中上百字节的数据,不可能直接访问(访问包括读和写)。因此设计者规定访问CMOS的办法是:先向端口70写入需要访问的CMOS中RAM的单元地址,再通过端口71进行访问。
破坏的原理是:系统BIOS自检时要检查CMOS中的数据是否有效,有效的标准是计算CMOS中所有数据的字节累加和是否为0,为0表示有效,不为0,则表示CMOS中的所有数据无效,正常的CMOS设置程序在改变CMOS中的值后都要计算CMOS中的字节累加和是否为0,如果不为0,则自动进行调整使之为0。破坏的办法是直接写入一随机数到CMOS的某一单元中,而不调整字节和,只要写入的数据与原有数据不同,则下次重新启动时CMOS的字节累加和肯定不为0,因而其中的数据(包括密码数据)将无效,从而达到破坏CMOS密码的目的。
提示:如果是错误的CMOS设置导致系统无法工作且有进入CMOS和进入系统密码,则比较有效的办法就是放电了。