如何在Debian上编译DOS程序?

时间:2009-03-15 14:15:45

标签: c assembly debian nasm dos

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

我安装了DOSBox和DOSEMU。有什么办法可以在Linux而不是DOS中汇编和编译程序吗?我正在使用nasm,所以我似乎没有任何问题得到它汇编DOS格式。但是,我在使用我的C代码运行它并获得DOS可执行文件(使用gcc或MinGW)时遇到了麻烦。

有没有办法做到这一点,或者我几乎要在DOS下安装所有工具?

4 个答案:

答案 0 :(得分:8)

BCC处于debian状态,能够为8080到80386生成合适的代码。使用-Md开关生成MS-DOS二进制文件。

答案 1 :(得分:7)

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

这些天你可以为DOS交叉编译GCC的几率几乎为零。

我建议您尝试使用旧的Watcom编译器。它是一个原生的DOS编译器,它的DPMI实现也像DosBox下的一个魅力。与NASM编译的目标文件连接也不是问题(我这样做了几年)

今天,编译器已经成为开源的,并被称为OpenWatcom。

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

DJGPP非常容易安装,至少只需要三个.ZIP需要:

  1. BNU219B.ZIP(汇编程序,链接程序,库管理程序)
  2. GCC441B.ZIP(C编译器)
  3. DJDEV204.ZIP(libc,headers)
  4. 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的网站有RPMs。

    但是,如果您需要100%16位代码,则必须使用其他内容(例如OpenWatcom)。 OpenWatcom也支持Linux(beta !!)主机和目标(没有共享库,但是,IIRC),但你可能必须自己用GCC编译它。