10

对于我的汇编语言课,我们正在使用 DPMI 编写 DOS 程序。不幸的是,我一直无法访问 32 位 Windows 机器。我确实在我使用的每台计算机上都安装了 Debian 虚拟机。

我已经安装了 DOSBox 和 DOSEMU。有什么方法可以在 Linux 而不是 DOS 中组装和编译程序?我正在使用 nasm,所以在 DOS 格式下组装它似乎没有任何问题。但是,我无法使用我的 C 代码通过编译器运行它并获得 DOS 可执行文件(使用 gcc 或 MinGW)。

有什么方法可以做到这一点,还是我几乎必须在 DOS 下安装所有工具?

4

4 回答 4

8

我什至不确定您是否可以使用 GCC 编译 DOS 应用程序。很久以前有一个 gcc 编译器变体,称为 DJGPP(或类似的东西)。我从来没有让它工作。

如今,您可以为 DOS 交叉编译 GCC 的机会几乎为零。

我建议你试试旧的 Watcom 编译器。它是一个原生的 DOS 编译器,它的 DPMI 实现在 DosBox 下也能像魅力一样工作。与 NASM 编译的目标文件接口也不是问题(我做了几年)

今天,该编译器已开源并称为 OpenWatcom。

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

于 2009-03-15T14:29:31.363 回答
8

BCC在 debian 中,能够为 8080 到 80386 生成体面的代码。使用该-Md开关生成 MS-DOS 二进制文件。

于 2009-10-02T20:04:22.453 回答
4

可能对您来说最简单的方法是使用标准的 DOS 工具来完成任务。

DOSBOX是一个非常好的模拟器。

于 2009-03-15T15:10:23.217 回答
4

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)。OpenWatcom 也支持 Linux(测试版!!)主机和目标(虽然没有共享库,IIRC),但您可能必须自己使用 GCC 编译它。

于 2009-12-13T09:25:03.477 回答