2010-09-15 15 views
11

MS-DOS採取什麼步驟將COM或EXE文件加載到內存中?網上還有關於這種情況的參考資料嗎?我能想到的最好的可能是指的是dosbox源碼。DOS如何將程序加載到內存中?

+0

問帕特森,DOS的原作者:HTTP:// dosmandrivel。 blogspot.com/ – vulkanino 2010-09-15 07:56:10

回答

17

當要求command.com執行一個.com或.exe文件時,它會調用中斷服務21h/AH = 4B,即EXEC服務。它是由調用程序:

  • 建立一個DOS EXEC參數塊(見http://www.delorie.com/djgpp/doc/rbinter/it/90/15.html) (包括對環境變量的信息,命令行參數,燃料電池汽車和返回寄存器值)
  • 騰出所有存儲器調用程序沒有使用
  • 設置調用參數寄存器
    • 啊= 4BH( 'EXEC' 服務類型)
    • 人= 00H( '負載和執行' 功能)
    • DS:DX - >節目名稱
    • ES:BX - > PTR給exec參數塊
  • 呼叫中斷21H
  • 上返回復位堆棧指針和測試錯誤。

當中斷21H是所謂的(這裏的地方對我來說變得朦朧):

  • 頁對齊的內存塊被分配
  • 文件的擴展名被忽略,而不是DOS將檢查第一兩個字節 簽名文件「MZ」或「ZM」如果是EXE,並且沒有簽名。

爲EXE:

爲COM:

  • 拷貝整個。COM文件到存儲器
  • 設置寄存器值
    • AL,AH盤符狀態
    • CS,DS,ES,SS - > PSP段
    • SP =最後一個字的偏移在第一個64K段
    • 可用
  • 跳轉到IP = 100H

計劃現在應該執行。


注:

在微軟的知識庫文檔「優先級的定位可執行文件的命令」,它提到的 使用的「MS-DOS EXEC函數(中斷21H服務4BH)」用於執行.COM和.exe文件 http://support.microsoft.com/kb/35284

所以我們可以看看拉爾夫·布朗的中斷名單上中間體21/AH = 4BH

和使用的一個示例:

and dos exe頭格式:

(這是基於了一些google搜索,所以請隨意添加建議)

相關問題