如何在 Debian 上编译 DOS 程序?
题
在我的汇编语言课程中,我们使用 DPMI 编写 DOS 程序。不幸的是,我无法一直使用 32 位 Windows 机器。我在我使用的几乎每台计算机上都安装了 Debian 虚拟机。
我已经安装了 DOSBox 和 DOSEMU。有什么办法可以在Linux而不是DOS下汇编和编译程序吗?我使用的是 nasm,所以以 DOS 格式组装它似乎没有任何问题。但是,我在使用 C 代码通过编译器运行它并获取 DOS 可执行文件(使用 gcc 或 MinGW)时遇到问题。
有什么方法可以做到这一点,还是我几乎必须在 DOS 下安装所有工具?
解决方案
我甚至不知道你是否可以使用GCC编译DOS应用程序。很久很久以前,有一个gcc编译器,变种,叫DJGPP(或类似的东西)。我从来没有得到它虽然工作。
这可以跨编译GCC用于DOS这些天的几率几乎为零。
我建议你给老WATCOM编译器一试。这是一个原生DOS编译器,它的DPMI实施也就像DOSBox中下的魅力。与NASM编译的对象文件接口是也不是问题(我做了几年)
今天编译器已经取得开源和称为OpenWatcom。
其他提示
BCC 是Debian中,并且能够产生体面代码为8080到的80386使用-Md
开关,以产生一个MS-DOS二进制。
大概去你最简单的方法是使用标准的DOS工具来完成任务。
DOSBOX 是一个很好的仿真器。
DJGPP 的安装极其简单,最少只需要三个 .ZIP:
BNU219B.ZIP
(汇编器、链接器、库管理员)GCC441B.ZIP
(C 编译器)DJDEV204.ZIP
(libc、标头)
http://www.delorie.com/djgpp/getting.html
unzip *.zip -d c:\djgpp &&
set DJGPP=c:\djgpp\djgpp.env &&
path c:\djgpp\bin;%PATH%
gcc myfile.c -o myfile.exe
要生成 DOS 兼容的输出,您必须使用 DOSEMU 中 DOS 托管的编译器(不是 DOSBox!!太慢而且有问题,仅适用于游戏)或使用 Linux 托管的交叉编译器(DJ 的网站有相应的 RPM)。
然而,如果你想要 100% 16 位代码,你将不得不使用其他东西(例如开放沃特康)。OpenWatcom 也支持 Linux(测试版!!)主机和目标(尽管没有共享库,IIRC),但您可能必须使用 GCC 自行编译。