這是一個經典的 DOS 時代組語範例:常駐記憶體 (TSR) 程式,攔截計時器中斷 (INT 1Ch) 在螢幕右上角即時顯示時鐘。雖然 DOS 已成歷史,但其中的中斷鏈結、視訊記憶體直接操作、TSR 終止並常駐 (INT 27h) 等技術,對理解底層硬體控制作業系統原理仍具教學價值。
INT 27h 終止並常駐 (TSR)。SIDT 取得 IDT 基址(保護模式),本程式為實模式直接操作 0:0070h (INT 1Ch)。B000:0000、彩色 B800:0000,透過 CRT 狀態埠 (0x3BA/0x3DA) 同步垂直回掃。INT 27h 以 DX 指定常駐記憶體末端(含程式碼、資料、PSP)。CODESEG SEGMENT PARA
ASSUME CS:CODESEG, DS:CGROUP
ORG 100h
CLK PROC FAR
JMP SETUP
INTRPT LABEL DWORD
INT_IP DW 0
INT_CS DW 0
TICKS DW 0
SCR_OFF DB 0,0
CRT_PORT DW 0
TIME DB 8 DUP(':',0Bh)
CLK_INT:
PUSH AX, CX, DI, SI, DS, ES
PUSHF
CALL CS:[INTRPT] ; 呼叫原 INT 1Ch
; ... 更新 TICKS,每 20 滴答呼叫 UPDATE ...
; ... 等待垂直回掃,將 TIME 寫入 ES:[DI] (視訊記憶體) ...
POP ES, DS, SI, DI, CX, AX
IRET
UPDATE PROC NEAR
; 從 0040h:006Ch 讀取 BIOS 計時器,轉換為 時:分 AM/PM 存入 TIME
RET
UPDATE ENDP
SETUP:
; 取得舊 INT 1Ch 向量存入 INTRPT
; 偵測視訊模式設定 CRT_PORT、SCR_OFF
CALL UPDATE
MOV DX, OFFSET SETUP ; 常駐區塊結束位址
INT 27h ; TSR
CODESEG ENDS
END CLK
SetTimer)、GDI/DirectX 繪圖、系統通知區圖示實現。研讀此類古早程式碼可訓練:
雖不再實用,但為作業系統、嵌入式系統、逆向工程基礎訓練的優良教材。