2、PORT 92h
从EISA系统之后,系统控制端口定义了一位用来快速重启的寄存器,就是在PORT 92h的Bit0,这种方式最终结果是和KBC一样的,HOST会拉CPU的INIT#以让系统重启。但这种方式不通过KBC,所以速度更快一点,代码如下:
- in al, 92h
- IODELAY
- or al, 1
- out 92h, al
- hlt
3、Reset Control Register(Port CF9h)
用此方法控制Reset,各Chip极有可能各芯片产商的做法会不同。
这里大家可以认识几种Reset的名词: Platform Reset, PCI Reset, System Reset, Reset CPU.我们来看Intel的文档,如下图:
大家注意看,如果System Reset bit位为1,那么如果Reset CPU bit从0变为1时,系统就会产生Platform Reset(包括产生PCI、FWH、SIO、LPC、MCH Reset),即称为Hard Reset;如System Reset bit位为0,那么系统就会产生Soft Reset,即:和KBC/PORT 92h Bit0一样,下拉CPU INIT# 16个PCI Clock。
因此你可以用下如代码Hard Reset:
- mov al, 6
- mov dx, 0CF9h
- out dx, al
- jmp $
也可以用如下代码“关机”(看你的机器的做法,也就是对SLP_S3#,SLP_S4#,SLP_S5#的处理):
- mov al, 0Eh
- mov dx, 0CF9h
- out dx, al
- jmp $
4、Ctrl+Alt+Del
这种方法“基本”是在“DOS”下有效,教课书上常称为"热启"。键盘中断会hook住你的按键,Hook就是BIOS的INT 09h软中断,当你按下这三个键时,就相当于Far jmp到 F000:FFF0处。用如下代码在DOS可实现热启动。
OK,你对系统重启是否又清楚了一些呢?
本帖最后由 paulhyde 于 2014-9-15 08:55 编辑