如何编译c/c++到ms-dos .com程序

How to compile c/c++ to ms-dos .com programs?

本文关键字:c++ ms-dos com 程序 何编译 编译      更新时间:2023-10-16

我使用Code::Blocks with GNU GCC Compiler。我的问题是:有没有办法编译c/c++代码ms-dos 16位(。com)可执行格式?
我试图设置构建选项并在网上搜索编译器参数,但我找不到任何东西。

您当然可以将C和/或(一种古老的方言)c++编译为16位的MS-DOS .com文件。使用Code::Blocks的编译器/链接器几乎肯定不能这样做。

特别是,至少据我所知,gcc甚至从未尝试为16位分段内存环境生成代码。至少有一个gcc到DOS扩展程序(DJGPP)的端口,但它生成。exe文件,而不是。com文件,并且它使用专有的DOS扩展程序。它最初使用的是一个旧版本的gcc,但已经更新为一个更新得多的gcc版本。

如果你真的需要生成一个。com文件,有相当多的选择,但所有的编译器都很老了,所以特别是关于c++,他们接受的语言是相当有限的。

针对MS-DOS的工具链。

警告:正如已经指出的,所有这些都是非常旧的。一般来说,他们接受的C语言是相当一致的,但只适用于相当小的程序(在代码和数据大小方面——必要的:.com文件基本上被限制在数据和代码的总和为64kb)。他们所接受的c++与任何接近现代的c++之间的差异要深刻得多(例如,有些根本不支持模板)。这里提到的一致性都是相对于当时的其他编译器的;按照现代标准,它们的一致性都很糟糕。

  1. 微软:只在相当短的时间内为MS-DOS出售c++编译器——他们进入市场有点晚,而且很早就退出了市场,转而使用只生产32位Windows可执行文件的编译器。
  2. Borland:微软镜像。更好的一致性,更差的优化,可能是最后一个放弃MS-DOS市场。他们最近的几个MS-DOS编译器甚至支持c++模板(在当时相当新)。Watcom:为数不多的仍然可以免费下载,但没有商业支持的软件之一。当它是新的,它通常被认为是最好的可用的一致性和优化之一。它显然是最近更新的(至少在某种程度上),但我没有使用最近的版本,所以我不能真正评论这些更新。
  3. Metaware:当时是一个相当昂贵的选择。我从未使用过它,但我非常尊敬的一些人认为它是你能得到的最好的编译器。主要针对嵌入式系统。
  4. Datalight/Zortech/Symantec/Digital Mars:另一个仍然是官方可用的。有一小群忠实的追随者。我尝试了一段时间,但从来没有找到一个令人信服的理由来更喜欢它。Digital Mars仍然维护着这个编译器,所以它是为数不多的仍然得到相当定期更新的编译器之一。

当时也有相当多的,但这些可能占当时市场的90%以上。

您要找的是exe2bin。这是DOS自带的一个实用程序,用于将。exe格式的目标代码转换为。com格式(代码和数据在一个64K段中)。它随DOS和一些编译器/汇编器而来。