最近在dos下写一个pc104串口扩展卡应用程序时发现,我的程序在正确初始化后三键重启后直接就可以使用,而在RESET重启后就得重新初始化,不知这两种方式重启有什么异同?
------解决方案--------------------------------------------------------
三键重启是dos调用int19完成的,就是磁盘重启。直接读取磁盘的启动扇区放置到0000:7C00位置,跳转至该位置执行,没有硬件检测及初始化等步骤。而串口扩展卡的中断以及中断服务在三键重启后没有被破坏,而且硬件已经初始化,所以可以使用。
------解决方案--------------------------------------------------------
三键重启会先跳到f000:e05b位置执行RAM中保留的BIOS,为接下来的重新启动添加相关的标记,之后令CPU和CHIPSET等设备RESET,正式从ROM中执行BIOS开机代码,在开机过程中BIOS会检测是否有热启动的标记,若有跳过内存检测,至于PCI方面应该也会有PCI RESET信号发出,至于具体为什么没有初始化,可能和设备本身对于系统状态的检测有关吧。