【问题标题】:Looking for 16-bit c compiler for x86 [closed]寻找 x86 的 16 位 c 编译器 [关闭]
【发布时间】:2011-08-28 22:10:39
【问题描述】:

我正在将 uc/OS-II 从 DOS 移植到 x86(实模式)。我需要:

  1. 用于生成实模式 16 位 x86 程序集的编译器

  2. 将生成的程序集组装成目标文件的汇编程序

  3. 将目标文件链接在一起并输出可执行文件(原始二进制文件、COFF、PE 或 ELF 格式很好)

  4. 不调用任何 DOS 服务 (int 21h) 的标准库,仅依赖 BIOS 服务。

我想知道是否有任何工具链可以做到这一点。

【问题讨论】:

    标签: compiler-construction x86 real-mode


    【解决方案1】:

    查看FreeDOS 项目。他们有developer tools,包括编译器、汇编器和链接器。不过,您可能必须修改标准库,以便它使用 BIOS 调用而不是 int 21h。

    【讨论】:

      【解决方案2】:

      16 位编译器?这里提到了其中的几个:

      Is there a C compiler that targets the 8086?

      通常它们用于学术练习,所以如果你以教育机构为目标,你也可以找到很多例子:

      http://www.google.com.sg/search?q=site%3Aedu+C+compiler+8086

      【讨论】:

        【解决方案3】:

        在以前的工作中,我们有一个基于在实模式 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 非常不同。)

        【讨论】:

          【解决方案4】:

          查看任何引导加载程序项目,例如 GRUB。很明显,他们也需要你提到的一切。

          【讨论】:

          • 您好,据我所知。 Grub 在 x86 上的保护模式下运行
          • @user639642:它以实模式启动,我认为它稍后会设置保护模式,但它肯定以实模式启动(当 BIOS 将控制权转移到 MBR 时)。
          • 我看了一下 grub2 并构建了它。它使用 gcc 进行编译。据我所知,gcc 中没有 16 位实模式 x86 汇编支持。我猜grub2的实模式部分是用汇编写的。 C在保护模式下使用。
          猜你喜欢
          • 2010-09-18
          • 2013-03-27
          • 1970-01-01
          • 2020-06-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多