我正在开发一个嵌入式系统项目,并遇到了编译器以编程方式嵌入到 Paradigm C++ IDE 中的问题。我希望能够自动化构建。
处理器为AMD186ES。我不使用操作系统——只是裸机的东西。 我需要从 C++ 生成实模式 16 位 8086 机器代码。
我的谷歌搜索表明 G++ 可以构建这样的代码。
我的问题是:
可以配置 g++ 来构建此机器代码吗?
还有其他 C++ 编译器也可以做到这一点吗?
您最好的选择可能是OpenWatcom,它包含一个 C++ 编译器。 早在 90 年代初到中期,我相信这是最好的 C/C++ 编译器。 它是几年前开源的。
我目前正在使用 gnu
as
(binutils 的一部分和用于 gcc 的汇编器),并且我已经成功地使用以下内容组装了 16 位汇编代码:
as <file>
ld --oformat binary -Ttext 0x0 -e start <file>
我的程序集文件开头为:
.code16
.globl start
.text
start:
因为它的纯二进制省略了行,
.globl start
start:
只会产生警告,即使平面二进制文件不需要入口点。
我通过艰难的方式学到的东西;
-Ttext 0x0
很关键,否则
.text
段会被推到16位寻址范围之外(不要问我为什么)
我个人还在学习汇编,所以这只是我的方法,不一定是最好的方法。
编辑:如果您正在编写引导代码,则应该更改
-Ttext 0x0
到
-Ttext 0x7c00
这将使您的内存地址偏移
0x7c00
,因为引导代码通常由 BIOS 在 0x7c00
处加载。
这个谷歌搜索显示了一系列用于将 gcc 设置为交叉编译器的链接。 要让它瞄准标准 ELF 二进制文件以外的目标,您可以 frig 输出。 此链接讨论排除标准库和自定义输出格式。 您可能需要做一些摆弄才能使其正常工作。
作为替代方案,openwatcom.org 有一个开源版本的 Watcom C 编译器,它也可能能够执行您想要的操作。
看一下 bcc,它是一个 16 位 x86 C 编译器。例如,还有 Debian 软件包。
有 GCC 4.3 的补丁: 新后端 ia16:16 位 Intel x86
并且这是它的更新。请注意,它可能不能很好地工作,例如,更新后的帖子说:“现在支持构造函数和析构函数,但由于某种原因它们 仅适用于 Elks 配置。”
这个 Docker 容器有一个构建版本:https://registry.hub.docker.com/u/ysangkok/ia16-gcc-rask
我还没有设法制作 DOS 二进制文件:如何组装 GAS 程序集并将其与 Open Watcom C 库链接?
2014 年最新的是 Dev86。
不确定,但我认为旧版本的 borland c++ 能够做到这一点。 您可以下载 5.5 t 版本:这里 祝你好运
自从我查看 Paradigm 的东西以来已经很长一段时间了(它们还在吗?)——你确定它们没有编译器的等效命令行吗? 我记得它们是建立在 Borland 编译器工具链之上的……所以也许旧版的 Borland 编译器可以解决这个问题?
-- 啊,再进一步看,我发现 Paradigm 仍然在(www.devtools.com)销售 X86 工具。 (一定是摇钱树!)
他们的专业产品包括脚本编写...根据您计划要做的工作量,硬着头皮购买他们的全套产品可能是值得的...
祝你好运。