本文展示一個完整的 80386 保護模式程式,演示外部中斷(時鐘中斷 IRQ0,向量 08H)與軟中斷/陷阱門(向量 0FEH)的協同處理。程式在螢幕左上角以倒計時顯示秒數,時間歸零後結束返回實模式。
程式包含以下核心元件:
為簡化演示,未重設 8259A 中斷控制器向量。08H 與雙重錯誤異常共用向量,但程式屏蔽所有外部中斷除時鐘外,且確保不觸發雙重錯誤,故無衝突。
時鐘中斷透過中斷門進入,不發生任務切換,但必須手動保存/恢復通用暫存器、段暫存器(EAX, DS, FS, GS 等),並在結束時發送 EOI (End of Interrupt, 20H) 給主 8259A。
時鐘處理程序透過 INT 0FEH 呼叫顯示程序。陷阱門不屏蔽中斷,類似實模式下的 BIOS INT 10H。顯示程序直接操作視訊記憶體(B800:0000),高效且無閃爍。
其餘 254 個 IDT 項目指向同一處理程序:顯示藍底白字 ! 並死循環。演示邏輯保證不會觸發。
所有處理程序均在特權級 0 執行,簡化堆疊切換邏輯。
SIDT:儲存當前 IDTR 到偽描述符 NORVIDTR,以便返回實模式時恢復LIDT:載入新建立的 IDT 偽描述符 VIDTR原始碼採用 TASM 理想模式語法,包含巨集定義(386SCD.INC)、段定義(GDT, IDT, 各代碼/資料段)、初始化流程(InitGDT, InitIDT)、模式切換(CR0.PE=1)、主迴圈與清理返回。完整程式碼見原文,此處不再贅述。
此範例完整展示了保護模式下:
是學習 x86 系統程式設計、作業系統核心機制的優秀教材。