80x86 汇编语言编程:EXE2COM


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

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

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

  BAT:称为批处理文件;
  COM:称为命令文件;
  EXE:称为可执行文件。

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

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

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

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

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

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

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

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

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

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

编写 COM 程序文件,要从汇编语言编程入手,借助与微软的 MASM、LINK 生成 EXE 文件之后, 再用转换程序 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 的全部操作过程。

80x86 汇编语言编程:EXE2COM - 非著名博主 - 电子信息之一角

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

那么,就用 A 命令编程,在 010A 处,写入 COM  程序 结束所用的指令 INT 20。


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

而本程序,是从 0100 到 001D,长度是 1E。画红线的代码就是 $,后面是一串无用的    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 的程序时,必然需要这种纯粹的程序代码。

有兴趣的网友,可以试试看。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值