我有这个项目:使用现代编译器将 C/C++ 程序编译为 CP/M-86 可执行文件(CMD 文件)。目标架构是 16 位 x86。你可能会认为我疯了,但我这样做是为了好玩,并且总体上了解 CP/M-86 和低级 x86 编程。
我对 x86 汇编程序编程知之甚少,但我做了一个“Hello World”示例,我可以使用 ASM86 和 GENCMD 生成 CMD 文件。它有效。ASM86 是一个用于 CP/M-86 的汇编程序,它将生成一个 H86 文件,即(据我所知)英特尔十六进制代码。GENCMD 读取这个 HEX 文件并创建 CMD 可执行文件。CMD 是 DOS 和 Windows 中已知的 EXE 可执行文件的 CP/M-86 等价物。
我有一个“现代”工具,它将编译和链接 16 位 x86 NASM 代码并输出一个可以在我的 CP/M-86 机器上运行的工作 CMD——完全在我的 Linux 机器上构建。但是,我需要一个 C/C++ 编译器来创建这个兼容的 NASM 代码。或者可能是某种可以轻松转换为 CMD 的平面二进制文件。
第二件事是系统调用。我可能可以使用内联汇编制作类似打印的功能并对其进行测试。现在我只想编译这个程序,它什么都不做(希望不做任何系统调用?):
int main()
{
return 0;
}
CP/M-86 确实存在 C 编译器,但这些编译器非常非常陈旧,几乎无法使用。特别是如果我想做 C++,就像我真的想做的那样。因此,必须使用现代编译器(如 gcc 或 llvm-clang 或类似的东西)来完成。
最后的手段可能是编译一个 16 位 DOS 兼容的 EXE,然后进行一些系统调用转换……但这有点作弊,而且仍然相当耗时。
我怎样才能达到我的目标?提前致谢。任何建议表示赞赏:-)