2007年12月15日 星期六

合謂.com和.exe它們有何功能???它們之間的差異在哪呢???

現在會問這個大多是寫組合語言的人

這是討論區上看來比較完整的說法



COM 檔案是為了與 CP/M 相容而制定的
它的 Absolute Memory Image 內容直接載入記憶體執行
大小不能超過一個 SEGMENT 也就是大約 64K(正確數字是 65278 Bytes)
沒有系統配置的任何形式表格 也沒有重定位址
執行期間 系統先把 0000 推入 Stack 之中
系統會將所有可用記憶體配置給它
所有的 Segment 暫存器都會指向同一個區域
結束的方式也很少使用 AH=4Ch,INT 21h 執
而通常是以 Near RETURN 或 INT 20h 結束


EXE 程式有許多家族
標準的 DOS .EXE 有一個表頭 大小為 512Bytes 的倍數
程式碼大小並不受限 因為可以同時使用多個 SEGMENT 之故
這種古老的 .EXE 檔案因為表頭的前兩位元組辨識為 MZ
所以又稱為 MZ 型式 EXE 檔


第二種 .EXE 是利用程式寫作技巧產生的 Overlay 檔
基於記憶體不足 因此就發展了將程式碼分裝
根據需要動態配置記憶體載入執行的技巧
其中 Borland 制定了一種 .EXE 檔
只要在編譯期間下給編譯器適當的參數 即可自動產生 Overlay


第三種是結合 .SYS 性質的 .EXE 檔
它可以在命令列下執行 也可以在 CONFIG 中掛入
而且兩種執行方式的意義都不同
最有名的例子就是 EMM386.EXE


第四種是 PE 格式
這是 Windows 下的標準格式
它的特色是可以塞下各式各樣的東西
通常跟在表頭之後的會是一段 DOS 的程式碼
告訴你本程式只能在 Windows 下執行
可是只要變更一下編譯時期的參數
這一段也是可以改成其他的 DOS 程式碼
然後可以塞下一些資源 如 ICON 等等
這也就是有些小軟體沒有 ICO 檔卻有 ICON 的原因

沒有留言: