对于我的汇编语言类,我们使用DPMI编写DOS程序。不幸的是,我无法一直访问32位Windows机器。我确实在我使用的每台计算机上都安装了Debian虚拟机。
我安装了DOSBox和DOSEMU。有什么办法可以在Linux而不是DOS中汇编和编译程序吗?我正在使用nasm,所以我似乎没有任何问题得到它汇编DOS格式。但是,我在使用我的C代码运行它并获得DOS可执行文件(使用gcc或MinGW)时遇到了麻烦。
有没有办法做到这一点,或者我几乎要在DOS下安装所有工具?
答案 0 :(得分:8)
BCC处于debian状态,能够为8080到80386生成合适的代码。使用-Md
开关生成MS-DOS二进制文件。
答案 1 :(得分:7)
我甚至不确定你是否可以使用GCC编译DOS应用程序。很久以前有一个名为DJGPP的gcc编译器变体(或类似的东西)。我从来没有工作过。
这些天你可以为DOS交叉编译GCC的几率几乎为零。
我建议您尝试使用旧的Watcom编译器。它是一个原生的DOS编译器,它的DPMI实现也像DosBox下的一个魅力。与NASM编译的目标文件连接也不是问题(我这样做了几年)
今天,编译器已经成为开源的,并被称为OpenWatcom。
答案 2 :(得分:3)
最简单的方法可能是使用标准的DOS工具来完成任务。
DOSBOX是一个非常好的模拟器。
答案 3 :(得分:2)
DJGPP非常容易安装,至少只需要三个.ZIP需要:
BNU219B.ZIP
(汇编程序,链接程序,库管理程序)GCC441B.ZIP
(C编译器)DJDEV204.ZIP
(libc,headers)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编译它。