我正在将 uc/OS-II 从 DOS 移植到 x86(实模式)。我需要:
生成实模式 16 位 x86 程序集的编译器
将生成的程序集组装成目标文件的汇编程序
将目标文件链接在一起并输出可执行文件的链接器(原始二进制文件、COFF、PE 或 ELF 格式都可以)
一个不调用任何 DOS 服务的标准库(
int 21h
),只依赖于 BIOS 服务。
我想知道是否有任何工具链可以做到这一点。
我正在将 uc/OS-II 从 DOS 移植到 x86(实模式)。我需要:
生成实模式 16 位 x86 程序集的编译器
将生成的程序集组装成目标文件的汇编程序
将目标文件链接在一起并输出可执行文件的链接器(原始二进制文件、COFF、PE 或 ELF 格式都可以)
一个不调用任何 DOS 服务的标准库(int 21h
),只依赖于 BIOS 服务。
我想知道是否有任何工具链可以做到这一点。
16位编译器?这里提到了其中的几个:
通常它们用于学术练习,所以如果你针对教育机构,你也可以找到很多例子:
http://www.google.com.sg/search?q=site%3Aedu+C+compiler+8086
在以前的工作中,我们有一个基于在实模式 x86 平台上运行的 uc/OS 的项目。我们使用 TopSpeed C 而不是更知名的 Borland 或 Microsoft 编译器,因为 TopSpeed C 是当时唯一可用且可行的编译器volatile
。在构建 uc/OS 时您非常需要它。Turbo C 和 Microsoft C(我也认为它的 QuickC)都错误编译了对volatile
变量的访问 - 通常将值缓存在寄存器中和类似的损坏中。
不过,您很难掌握 TopSpeed C。而且它的汇编语法是……独一无二的。(我认为它基于 Modula-2 或其他东西;它最终与您可能熟悉 100 倍的 MASM/TASM/nasm 非常不同。)
查看任何引导加载程序项目,例如 GRUB。很明显,他们也需要你提到的一切。