寻找 16 位 x86 编译器
-
03-07-2019 - |
题
我正在开发一个嵌入式系统项目,并遇到了编译器以编程方式嵌入到 Paradigm C++ IDE 中的问题。我希望能够自动化构建。
处理器是AMD186ES。我不使用操作系统——只是裸机的东西。我需要从 C++ 生成实模式 16 位 8086 机器代码。
我的谷歌搜索表明 G++ 可以构建这样的代码。
我的问题是:
可以配置 g++ 来构建此机器代码吗?
还有其他 C++ 编译器也可以做到这一点吗?
解决方案
我目前正在使用gnu 作为
(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 0x7c00
到
<*>这将通过 0x7c00
来抵消您的内存地址,因为引导代码通常由BIOS加载到 0x7c00
。
其他提示
您最好的选择可能是 OpenWatcom ,其中包括C ++编译器。早在90年代中期,我相信这是最好的C / C ++编译器。几年前它是开源的。
这个谷歌搜索显示了一系列链接,用于将gcc设置为交叉编译器。为了使它能够定位除标准ELF二进制文件以外的其他东西,您可以对输出进行frig。 此链接讨论了排除标准库和自定义输出格式。你可能不得不做一些摆弄工作。
作为替代方案 openwatcom.org 有一个开源版的Watcom C编译器,也可以做你想做的事。
2014年的最新信息是 Dev86 。
GCC 4.3有一个补丁: 新的后端ia16:16位Intel x86
此处有更新。请注意,它可能不能很好地工作,例如,更新的帖子说:“现在支持构造函数和析构函数,但由于某种原因,它们 仅适用于elks配置。“
这个Docker容器有一个版本: https:// registry.hub.docker.com/u/ysangkok/ia16-gcc-rask
我还没有设法制作DOS二进制文件:如何组装GAS组件并将其与Open Watcom C库链接?
不确定,但我认为旧版本的borland c ++能够做到这一点。 你可以下载5.5版本:这里 祝你好运
自从我看过Paradigm的东西已经很久了(它们还在吗?) - 你确定它们没有编译器的命令行等价物吗?我的回忆是它们是建立在Borland的编译器工具链之上的......所以也许Borland编译器的旧版本可以解决这个问题?
- 啊,看起来更进一步,我发现Paradigm仍在(www.devtools.com)销售X86工具。 (必须是摇钱树!)
他们的专业产品包括脚本......根据您计划的工作量,可能值得咬紧牙关并购买他们的全部产品......
祝你好运。