在 DOS 系统中,有三种程序文件,扩展名分别是:EXE、COM、BAT。

在 DOS 提示符后面,键入程序名(不用键入.扩展名)再回车,DOS 即可执行该程序。

各扩展名,分别代表一类程序。

  BAT:称为批处理文件;

  COM:称为命令文件;

  EXE:称为可执行文件。

其中 EXE 文件的功能最为强大。

而 COM 文件则是短小精悍,调入内存并开始执行,其速度,要比 EXE 文件的速度更快。

但是,随着计算机硬件的档次,持续不断的提高,COM 文件的速度优势,已经不明显。

并且,现在广泛使用的是 Windows 操作系统,需要编写的,都是大程序。

而 EXE 文件形式,比 COM 形式,更适合编写大程序。

因此,现在,几乎是 EXE 文件独霸天下,几乎就看不到 COM 文件的存在了。

----------------------------------

前面说过:COM 文件,相比 EXE 文件,还是有一点点优势的。

所以,现在还是有人,想要编写出 COM 文件,感受一下。

但是,现在的教学环境,几乎就没有任何人、或书籍,再介绍 COM 文件的编写方法了。

再用转换程序 EXE2BIN 转换成 COM 文件。

说起来,很简单,只是用一个步骤,转换一下,COM 文件就出来了。

但是,实行起来,可是很罗嗦的。

首先,转换程序 EXE2BIN.COM 就很不好找。

即使找到了,也不能用。因为这个软件,它认 DOS 的版本。

做而论道手头就有 DOS 3.2 版本的 EXE2BIN 程序。

在 DOS 3.2 操作系统中,好用;在 DOS 5.0 中,就不好用。

目前使用的 DOS,都是在 Windows 中的提示符窗口,比早期的纯 DOS,版本提高了不知多少倍。

现在,可上哪儿去找装有 DOS 3.2 的老机器呢?

----------------------------------

其实,借助于 DEBUG 软件,也可以把 EXE 文件,转换成 COM 文件。

这种转换,要用手工操作,也并不太麻烦,仅仅需要一点知识,一点技巧而已。

为了转换成 COM 文件,有必要了解一下 COM 文件的格式,共有 3 个要点:

    1.整个程序,只能有一个段,即:代码、数据、堆栈,共用一个段。

    2.写程序时,要从 0100H 开始编写。

    3.程序结束,返回 DOS,指令是 INT  20H。

  (实践证明,用 MOV  AH, 4CH / INT  21H 来结束程序,也可以。)

好了,现在用汇编语言编写一个 EXE 程序,全部代码如下:

;-------------------------------------

ASSUME   CS:CODE, DS:CODE

CODE   SEGMENT

    ORG   0100H      ;必须从 0100H 开始编程

START:

    PUSH  CS

    POP   DS         ;数据段和代码段共用

    LEA   DX, MSG1

    MOV   AH, 9      ;显示字符串

    INT   21H

EXIT:

    MOV   AH, 4CH    ;机器码是:B4 4C

    INT   21H        ;程序结束,机器码是:CD 21

    MSG1  DB  'Hello  world ! $'

          DB  'AAAAAAAAA'  ;随便写的,醒目用

CODE   ENDS

    END   START

;-------------------------------------

程序中,有用的代码是从 0100H 到 $ 为止。后面的 A,将用于查找尾部。

这个源程序,经过编译、连接,即可生成可执行程序文件 MM.EXE。

下图就是执行程序 MM.EXE,然后,再转换成命令文件 ZZZ.COM 的全部操作过程。

在图中可以看到,代码是从 0100 开始,画黄线的代码,就是结束程序的指令。

程序 结束所用的指令 INT 20。

再下面的,是寄存器的信息,其中 BX CX 是文件长度 0000 0127。

  A 。

因此,用 R 命令修改 CX 为 1E。

然后,用 N 命令,为 COM 文件命名。

然后,用 W 命令,把 COM 文件存盘。生成了 ZZZ.COM,共存入了 1E 个字节。

最后,用 Q 命令,退出 DEBUG。

转换完毕。

----------------------------------

下面,在 DOS 提示符后,键入 ZZZ 回车,即执行了命令文件 ZZZ.COM。

可以看到,ZZZ.COM 和 MM.EXE 的功能,完全相同,都是显示 Hello  world ! 。

----------------------------------

重新进入 DEBUG,并打开 ZZZ.COM,可以看到,和原来的 EXE 文件内容相同。

但是,命令文件的代码,要精练许多。

特别是当你编写 BIOS 的程序时,必然需要这种纯粹的程序代码。

有兴趣的网友,可以试试看。