TSR(Terminate and Stay Resident)程序加載後常駐內存,滿足條件(熱鍵、定時器、硬件中斷)彈出執行。常見形式:SideKick彈出工具、日曆、網絡服務、中文系統(CCDOS/UCDOS)、病毒程序。其調度機制即中斷系統:
INT 08H(時鐘)、INT 09H(鍵盤)、INT 13H(磁盤)、INT 14H(串口)INT 16H(鍵盤服務)、INT 1CH(定時器)、INT 21H(DOS)中斷向量表位於 0000:0000,256項×4字節。中斷發生時CPU自動:壓入標誌、CS、IP → CLI → 跳轉向量指向的處理程序。IRET 恢復現場返回。
多任務OS依賴可重入代碼與PV操作保護臨界資源。DOS為單任務系統,整體不可重入:內部數據區非棧分配,中斷嵌套調用DOS會破壞前台數據。
可重入例程:僅使用寄存器/參數,無靜態變量。中斷嵌套再入不影響結果。
不可重入例程:使用靜態變量 Temp。中斷嵌套修改 Temp 導致外層返回錯誤結果。解決:將變量放入堆疊(PUSH BP / SUB SP,2 / MOV BP,SP)。
33H/50H/51H/62H/64H 使用用戶堆疊,始終可重入。INT 21H。59H 讀取、5D0AH 恢復。TSR激活前必須保存/恢復,否則前台讀到錯誤信息。INT 13H/0BH/0CH 等。進入時設置標誌,TSR檢測到標誌則放棄調用。INT 10H/25H/26H 同理設置進入標誌。INT 1BH/23H/24H (Ctrl-Break、Ctrl-C、致命錯誤)。5D06H/5D0BH 可使DOS任意時刻可重入,但關鍵區(INT 2AH 進入、81H/82H 退出)內不可修改SDA。TSR分暫駐部分(安裝/檢測/刪除)與常駐部分(中斷處理程序)。核心步驟:
INT 21H/35H)INT 21H/25H)INT 21H/31H 終止並常駐INT 21H/4CH 釋放內存 → 恢復寄存器無條件刪除需監控所有TSR對IVT、MCB、設備驅動鏈的修改。
ASCIZ、BPD、CDS、DPB、DPL、DTA、FAT、FCB、IFS、JFT、NCB、PSP、SDA、SFT 等關鍵數據結構縮寫及含義對照表。