精華區beta Programming 關於我們 聯絡資訊
※ 引述《FreeF1y.bbs@ptt.cc (ㄝ夫嗄一一ㄝ夫歪)》之銘言: > ※ 引述《bert.bbs@bbs.csie.ncu.edu.tw (哇哩咧...)》之銘言: > : TSR 不結束程式的話怎麼能叫做 TSR? > 可能我不太了解DOS的運作方式吧!? > 我知道TSR的運作原理是把原本的Interrupt Vector Table取代掉 > 然後再把自己留在記憶體中 > 關於留在記憶體的方法,我查到的資料是說 > DOS裡面有一個指標,負責標示出可用的記憶體的開頭 > 然後每次程式Load進來就從那個位置開始存 > 而TSR常駐記憶體的方法就是把標示可用記憶體的指標往後移 > 使得程式的前半段留在記憶體中 > 這是原始網頁 > http://0rz.net/1c1pJ > 而我的問題是 > 這樣的機制,為什麼一定要程式結束才能完成? > 只是移動一個指標而已,應該不用一定要結束程式吧 > 所以我的問題應該是說 > 「有什麼方法可以把程式常駐在記憶體之後不結束的呢?」 > 所以請不要再跟我說因為它叫TSR所以一定要結束.. > 以上 > 如果我的觀念有任何錯誤,還煩請指正 > 這部分我只是個初學者,不好意思 TSR 的東西從 Windows 崛起以後就已經忘的差不多了... 我試著回答看看 TSR 不一定把原本的中斷服務常式 (ISR) 替換掉, 大多是用串接方式以維持 原來的 ISR 可以正常動作, 除了以 AH = 31h, int 21h 結束之外, 還可用 int 20h 結束, 但 int 27h 僅適用於 .com 格式, 而原 po 可能誤以為 AH=31h int 21h 結束就結束了整個程式了 (是這樣的嗎) TSR 是讓某些可用的程式留在記憶體中而可隨時 (依需求) 叫用執行, 而在 DOS 的規範下只能允許單工作業, 要如何在一個程式執行下還能呼叫其他程式的功能, 就是 TSR 的作用了, DOS 不比 Windows, 對於多工只能用 TSR 方式模擬出來 ( 這樣說也許有些怪怪的), 另外在 DOS 下僅能有小小的 640KB 的主記憶體, 記憶 體的使用可是點點位元都是金啊... 不必要的程式碼用玩了就好收起來了, 不需 佔著記憶體的空間, 所以那些初始化的東西也沒必要在 TSR 活著的時候留下來的 不論是 int 27h 或者 AH=31h, int 21h 都是把要留在記憶體裡有用的程式碼留 下來, 其他的就還給系統吧... TSR 的那個 T 就是代表著 "終結" (Terminate) 啊, 不結束要作啥? 別把 AH=4Ch, int 21h 跟 AH=31h, int 21h 搞混了... 有關 TSR 的東西可看看以前的旗標的 TSR 程式設計專題研究/施威銘研究室.徐英傑著 以及 386/486 時代所出的一些軟體保護、破解的書, 或者當時旗標出的病毒徹底研究 的那一本, 應該可以給原 po 解很多疑惑的 以上所述, 僅是憑著印象, 觀念或敘述有錯的話請各位指教 -- Origin: 幽谷˙反地球聯邦組織 aeug.twbbs.org Author: hdk202-178-130-150.cm.dynamic.apol.com.tw 發表