在 IBM PC 及相容機中,除了開機冷啟動,還有熱啟動(Ctrl+Alt+Del)與 RESET 硬體重啟。兩者共同點是跳轉至 BIOS 入口點(FFFF:0000),差異在於啟動時是否檢測記憶體:熱啟動略過檢測,RESET 重啟則完整檢測。關鍵在於 BIOS 資料區 0040:0072 的重啟標誌字:1234H 表示略過記憶體檢測,其他值則執行完整檢測。
CODE1 SEGMENT AT 0FFFFH
ASSUME CS:CODE1
ADDR LABEL FAR ; BIOS 入口點 FFFF:0000
CODE1 ENDS
CODE SEGMENT
ORG 100H ; COM 檔案入口偏移
ASSUME CS:CODE, DS:CODE, ES:CODE
START:
JMP FAR PTR ADDR ; 遠跳轉至 FFFF:0000
CODE ENDS
END START
直接遠跳轉至 BIOS 入口,不修改重啟標誌字,BIOS 將按預設流程執行完整記憶體檢測。
CODE1 SEGMENT AT 0FFFFH
ASSUME CS:CODE1
ADDR LABEL FAR
CODE1 ENDS
CODE SEGMENT
ORG 100H
ASSUME CS:CODE, DS:CODE, ES:CODE
START:
MOV AX, 0040H ; BIOS 資料區段址
MOV DS, AX
MOV AX, 1234H ; 熱啟動標誌
MOV SI, 0072H ; 標誌字偏移
MOV [SI], AX ; 寫入 1234H
JMP FAR PTR ADDR ; 跳轉 BIOS 入口
CODE ENDS
END START
先將 0040:0072 設為 1234H,再跳轉 BIOS。BIOS 檢測到此標誌,略過記憶體檢測,直接進入系統啟動流程,實現熱啟動效果。
.OBJ → .EXEEXE2BIN 或連結器選項轉換為 .COM 檔案RESET.COM 或 BOOT.COMAT 0FFFFH 定義絕對地址段,對應 BIOS ROM 起始位址LABEL FAR 產生遠指標標號,供 JMP FAR PTR 使用ORG 100H 留出 PSP 空間這兩個微小程式展示了底層硬體控制的核心機制,也是理解 PC 啟動流程的經典教材。