2012-05-06 306 views
4

如何用GCC编译16位C代码?我正在尝试编写一个刚刚写入“Hello World!”的平面引导程序。到电脑并暂停。用GCC编译的16位C代码

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 
    } 
} 
+9

你不会有一个'main' - 你需要一个*自立*程序,你需要编写自己的链接脚本生成的东西,可以在启动时使用。查看[osdev](http://wiki.osdev.org/Expanded_Main_Page)了解一些教程。 –

+1

顺便说一句,我正在开发一个可以生成16位代码的C编译器。见[更小的C](https://github.com/alexfru/SmallerC)。对于这个问题中提出的小程序,它可能工作得很好。蛇测试应用程序/游戏是非常多的。看一看。 –

回答

6

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

利用开放WATCOM C/C++或古老的Turbo C++(V 1.01是免费提供在线)。

+0

那么-m16选项呢? –

+0

@ Mohamad-jaafar该功能可能适用于某些用途。 –

2

它可以编写16位引导装载程序,在C内核。您需要将.code16或.code16gcc放在文件的顶部,以告知编译器生成16位目标文件。

+2

gcc有一个'-m16'选项,所以你不需要自己添加它。 –

+0

请注意'-m16'选项只能从GCC 4.9开始提供。 – anol