複製鏈接
請複製以下鏈接發送給好友

com

(DOS可執行命令文件)

鎖定
.com為DOS可執行命令文件(DOS Command File),一般小於64KB
外文名
com
可執行命令
DOS
大    小
小於64KB
區    別
程序只能設置一個段

comcom和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文件概要

.COM文件包含程序的一個絕對映象——就是説,為了運行程序準確的處理器指令和內存中的數據,MS-DOS通過直接把該映象從文件拷貝到內存而加載.COM程序;它不作任何改變。
為加載一個.COM程序,MS-DOS首先試圖分配內存,因為.COM程序必須位於一個64K的段中,所以.COM文件的大小不能超過65024(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)。