在JMP FAR F000:FFF0后会检查[0040:0072]该字的值——
0000:相当于按RESET键。
1234:跳过内存检测,也就是所谓的热启动,相当于按CTRL+ALT+DEL。
5678:挂起/正常模式转换(可能对DOS无效),不检测内存、不POST、内存内容不变。
9ABC:厂家检测用。
ABCD:不停地循环POST。下面是MS给出的例程——
; CODE:
以上的重启仅在实模式有效。
===============================================
想在保护模式也有效的话,可以向键盘口写"系统复位"命令(当然要在RING0下)
; CODE:
0000:相当于按RESET键。
1234:跳过内存检测,也就是所谓的热启动,相当于按CTRL+ALT+DEL。
5678:挂起/正常模式转换(可能对DOS无效),不检测内存、不POST、内存内容不变。
9ABC:厂家检测用。
ABCD:不停地循环POST。下面是MS给出的例程——
; Assemble options needed: none
.MODEL small
.CODE
Start:
mov ax, @data ; Load ds with data segment
mov ds, ax
mov ax, 40h ; These three lines cause a memory
mov es, ax ; test NOT to be performed. To
mov WORD PTR es:[72h], 1234h ; do a memory test, remove them.
jmp DWORD PTR b_vec ; Jump to the reboot address
.DATA
b_vec DW 00000h ; Offset of reboot vector
DW 0FFFFh ; Segment of reboot vector
.STACK
END Start
.MODEL small
.CODE
Start:
mov ax, @data ; Load ds with data segment
mov ds, ax
mov ax, 40h ; These three lines cause a memory
mov es, ax ; test NOT to be performed. To
mov WORD PTR es:[72h], 1234h ; do a memory test, remove them.
jmp DWORD PTR b_vec ; Jump to the reboot address
.DATA
b_vec DW 00000h ; Offset of reboot vector
DW 0FFFFh ; Segment of reboot vector
.STACK
END Start
以上的重启仅在实模式有效。
===============================================
想在保护模式也有效的话,可以向键盘口写"系统复位"命令(当然要在RING0下)
cli
WaitRdy: ;8042控制器忙
in al,64H ;读8042状态字节
test al,00000010B
jnz WaitRdy
mov al,0FEH ;8042 pin=0为系统复位
out 64H,al ;重启
WaitRdy: ;8042控制器忙
in al,64H ;读8042状态字节
test al,00000010B
jnz WaitRdy
mov al,0FEH ;8042 pin=0为系统复位
out 64H,al ;重启