我正在开发一个嵌入式系统项目,并且遇到了编译器以编程方式嵌入 Paradigm C++ IDE 的问题。我希望能够自动化构建。
处理器是 AMD186ES。我没有使用操作系统 - 只是裸机的东西。我需要从 C++ 生成实模式 16 位 8086 机器代码。
我的谷歌搜索表明 G++ 可以构建这样的代码。
我的问题是:
可以配置 g++ 来构建此机器代码吗?
是否有其他 C++ 编译器也可以做到这一点?
我正在开发一个嵌入式系统项目,并且遇到了编译器以编程方式嵌入 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
因为引导代码通常0x7c00
由 BIOS 加载。
这个谷歌搜索显示了一系列用于将 gcc 设置为交叉编译器的链接。要使其针对标准 ELF 二进制文件以外的其他内容,您可以使用输出。 此链接讨论排除标准库和自定义输出格式。您可能需要做一些摆弄才能使其正常工作。
作为替代方案,openwatcom.org有一个 Watcom C 编译器的开源版本,它可能也可以做你想做的事情。
GCC 4.3 有一个补丁:New back end ia16: 16-bit Intel x86
这是它的更新。请注意,它可能不太好用,例如,更新后的帖子说:“现在支持构造函数和析构函数,但由于某种原因,它们只适用于 elks 配置。”
这个 Docker 容器有一个构建:https ://registry.hub.docker.com/u/ysangkok/ia16-gcc-rask
我还没有设法制作 DOS 二进制文件:如何组装 GAS 程序集并将其与 Open Watcom C 库链接?
看看bcc,它是一个 16 位 x86 C 编译器。例如,它也有Debian 软件包。
根据 2014 年的最新版本是Dev86。
不确定,但我认为旧版本的 borland c++ 能够做到这一点。你可以下载版本 5.5 t :祝你 好运
80186 免费 C 编译器:
http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2005-09/msg01063.html
我已经很久没有看过 Paradigm 的东西了(它们还在吗?)——你确定它们没有编译器的命令行等效项吗?我记得它们是建立在 Borland 的编译器工具链之上的……所以也许 Borland 编译器的旧副本可以解决问题?
-- 啊,再看远一点,我发现Paradigm 还在(www.devtools.com)销售X86 工具。(一定是摇钱树!)
他们的专业产品包括脚本......根据您计划做的工作量,咬紧牙关购买他们的全部产品可能是值得的......
祝你好运。