介紹
.com為 DOS可執行命令檔案(DOS Command File),一般小於64KB
區別
com和exe檔案的區別
以COM為擴展名的檔案的特點如下:
1.程式只能設定一個段,且不建立堆疊段;
2.程式的長度必須少於64K位元組;
3.程式必須預留100H空間,開始處是一條可執行指令;
4.程式被裝入的起始標號必須由END語句說明開始地址;
5.程式中的子程式必須具有進程屬性(NEAR);
6.如果COM檔案是由幾個不同的目標模組連結生成的,要求所有目標模組具有同一代碼段名和類別名(CLASS),且賦予公共屬性(PUBLIC),而主模組應具有100H的入口指針並優先連線。
EXE檔案的結構特點如下:
1.程式允許建立若干不同名的代碼段、數據段、堆疊段或附加段。
2.程式的長度僅受當前記憶體可用空間的限制。
3.程式的入口隨套用而定,只需起始標號與END語句說明的起始地址一致。
4.程式中的各個子程式的屬性隨段內或段間調用而定為NEAR或FAR。
5.連線生成EXE檔案的各個不同的目標模組內的代碼段,數據段或附加段可取同名或獨立命名。但要求只有主模組的END語句指出程式入口的起始標號,並至少有一個具有STACK屬性的堆疊段
檔案概要
.COM檔案包含程式的一個絕對映象----就是說,為了運行程式準確的處理器指令和記憶體中的數據,
MS-DOS通過直接把該映象從檔案拷貝到記憶體而載入.COM程式;它不作任何改變. 為載入一個.COM程式,MS-DOS首先試圖分配記憶體,因為.COM程式必須位於一個64K的段中,所以.COM檔案的大小不能超過65,024(64K減去用於PSP的256位元組和用於一個起始堆疊的至少256位元組).如果MS-DOS不能為程式,一個PSP,一個起始堆疊分配足夠記憶體,則分配嘗試失敗.否則,MS-DOS分配儘可能多的記憶體(直至所有保留記憶體),即使.COM程式本身不能大於64K.在試圖運行另一個程式或分配另外的記憶體之前,大部分.COM程式釋放任何不需要的記憶體.分配記憶體後,MS-DOS在該記憶體的頭256位元組建立一個PSP,如果PSP中的第一個FCB含有一個有效驅動器
標識符,則置AL為00h,否則為0FFh. MS-DOS 還置AH為00h或0FFh,這依賴於第二個FCB是否含有一個有效驅動器標識符. 建造PSP後,MS-DOS在PSP後立即開始(偏移100h)載入.COM檔案,它置SS,DS和ES為PSP的段地址,接著創建一個堆疊.為創建一個堆疊,MS-DOS置SP為0000h,若已分配了至少64K記憶體;否則,它置暫存器為比所分配的位元組總數大2的值.最後,它把0000h推進棧,這是為了保證與在早期MS-DOS版本上設計的程式的兼容性. MS-DOS通過把控制傳遞偏移100h處的指令而啟動程式.程式設計者必須保證.COM檔案的第一條指令是程式的入口點. 注意,因為程式是在偏移100h處載入,因此所有代碼和數據偏移也必須相對於100h.彙編語言程式設計者可通過置程式的初值為100h而保證這一點(例如通過在原程式的開始使用語句org 100h).