【问题标题】:16-bit C code compiled with GCC使用 GCC 编译的 16 位 C 代码
【发布时间】:2012-05-15 13:24:24
【问题描述】:

如何使用 GCC 编译 16 位 C 代码?我正在尝试编写一个只写“Hello World!”的平面引导加载程序。到计算机并停止。

int main(int argc, char** argv)
{
    char* value = "Hello World!";
    __asm
    {
        mov si, value
    loop:
        lodsb
        cmp al, 0
    halt:
        je halt
        mov bx, 0x0007 ; Black BG, White TXT
        mov ah, 0x0E   ; Teletype output
        int 0x10
        jmp loop
    }
 }

【问题讨论】:

  • 你不会有main——你需要一个独立的程序,你需要编写你自己的链接器脚本来生成可以使用的东西在启动时。查看osdev 获取一些教程。
  • 顺便说一句,我正在开发一个可以生成 16 位代码的 C 编译器。见Smaller C。对于问题中提出的小程序,它可能工作得很好。 Snake 测试应用程序/游戏就是这样。看看吧。

标签: c gcc compilation 16-bit


【解决方案1】:

你没有。你不能。 GCC 不生成 16 位 x86 代码。

使用 Open Watcom C/C++ 或古老的 Turbo C++(1.01 版可在线免费获得)。

【讨论】:

  • -m16 选项怎么样?
  • 是的,你可以。编译时使用 .code16gcc 属性或使用 -m16 选项。
【解决方案2】:

可以在 c 中编写 16 位 boot-loader 内核。您需要将 .code16 或 .code16gcc 放在文件顶部,以告诉编译器生成 16 位目标文件。

【讨论】:

  • gcc 有一个-m16 选项,所以你不需要自己添加。
  • 请注意,-m16 选项仅适用于 GCC 4.9 及更高版本。
猜你喜欢
  • 2014-09-09
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多