FASTREBOOT V1.0 是一個極精簡的 TSR 程式,安裝後常駐記憶體,攔截鍵盤中斷(INT 09h),偵測 Ctrl+F10 組合鍵,觸發軟體重啟(INT 19h)。全程不足 80 行,展示了「鍵盤中斷鉤掛、掃描碼識別、鍵盤控制器命令、TSR 常駐」核心流程。
STI ; 開啟中斷
PUSH AX, ES
XOR AX, AX
MOV ES, AX ; ES=0000h (BIOS 資料區)
IN AL, 60h ; 讀取鍵盤控制器輸出緩衝區 (掃描碼)
TEST AL, 80h ; Bit7=1 為釋放碼 → 忽略
JNZ EXIT1
TEST BYTE PTR ES:[417h], 4 ; 檢查 Ctrl 鍵旗標 (Bit 2)
JZ EXIT1
CMP AL, 68h ; F10 掃描碼 = 68h (按下)
JNZ EXIT1
; 符合 Ctrl+F10 → 執行重啟序列
PUSH 所有通用暫存器
IN AL, 61h ; 讀取鍵盤控制器埠 B
OR AL, 80h ; 置位 Bit7 (禁止鍵盤)
OUT 61h, AL
MOV AL, 20h ; EOI 給主 8259A
OUT 20h, AL
CALL MY ; MY: INT 19h 重啟
POP 所有暫存器
EXIT1:
POP ES, AX
JMP CS:INT9 ; 轉交原 INT 09h
CLI 關中斷 → INT 21h/3509h 取得原 INT 09h 向量'DZ'(本程式特徵碼),防重複安裝INT 21h/2509h 設定新向量指向 NEW_INTSTI 開中斷 → INT 21h/09h 顯示提示訊息INT 27h TSR 常駐(保留至 INIT 標籤)68h,釋放碼 = E8h(Bit7=1)。程式僅檢查按下碼。OUT 20h, 20h 通知主中斷控制器中斷處理完畢,否則系統掛起。| 特性 | CTRLADEL | FASTREBOOT |
|---|---|---|
| 攔截目標 | Ctrl+Alt+Del (防重啟) | Ctrl+F10 (觸發重啟) |
| 旗標檢查 | BIOS 417h Bit2+3 | BIOS 417h Bit2 |
| 掃描碼檢查 | 無 (依 BIOS 旗標) | 60h 端口讀 68h |
| 執行動作 | 清除 Alt 旗標欺騙 BIOS | 鎖鍵盤 + EOI + INT 19h |
| 防重複標記 | INT 0CDh 指向版權字串 | 原 INT 09h 前綴 'DZ' |
雖然現代 OS 透過 ACPI 電源管理(ResetSystem / Reboot)處理重啟,但「鍵盤掃描碼攔截 → 組合鍵判斷 → 硬體序列觸發」模式廣泛應用於:BIOS 熱鍵、伺服器管理控制器 (BMC) 按鍵處理、嵌入式韌體復原模式進入。FASTREBOOT 是此類邏輯的最小系統實現。