在我的汇编语言课程中,我们使用 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。

http://www.openwatcom.org/index.php/Main_Page

其他提示

BCC 是Debian中,并且能够产生体面代码为8080到的80386使用-Md开关,以产生一个MS-DOS二进制。

大概去你最简单的方法是使用标准的DOS工具来完成任务。

DOSBOX 是一个很好的仿真器。

DJGPP 的安装极其简单,最少只需要三个 .ZIP:

  1. BNU219B.ZIP (汇编器、链接器、库管理员)
  2. GCC441B.ZIP (C 编译器)
  3. 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 自行编译。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top