我有這個項目:用現代編譯器將C/C++程序編譯爲CP/M-86可執行文件(CMD文件)。目標架構是16位x86。你可能會認爲我很瘋狂,但我爲了好玩而學習了CP/M-86和低級x86編程。我該如何編譯C/C++到CP/M-86可執行文件(CMD)
我對x86彙編程序編程知之甚少,但我做了一個「Hello World」示例,可以使用ASM86和GENCMD生成CMD文件。它的工作原理。 ASM86是CP/M-86的彙編程序,它將生成一個H86文件,也就是(據我所知)Intel Hex Code。 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;
}
C編譯器確實存在CP/M-86,但這些都是非常,非常舊的和幾乎不可用的。特別是如果我想要做C++,就像我真正想要的那樣。所以,它必須用像gcc或llvm-clang之類的現代編譯器或類似的東西來完成。
最後的手段可能是編譯一個16位DOS兼容EXE,然後做一些系統調用翻譯......但這將是一種作弊,仍然相當耗時。
我該如何達到目標?提前致謝。任何建議表示讚賞:-)
[Watcom](http://www.openwatcom.org/index.php/Main_Page)仍然保留並支持生成16位可執行文件,可能需要檢查它。 –
有C子集編譯成非常小的處理器。麻省理工學院的媒體實驗室使用了其中一些。 – Jiminion
你真的是指CP/M x86還是DOS? CP/M已經死了很多年了。 –