【发布时间】:2011-10-06 22:14:54
【问题描述】:
我不知道如何为 16 位实模式编译我的 C 内核。我尝试了各种编译器,但都没有运气。我的引导加载程序只是将原始扇区从软盘(我的内核就在磁盘上的第一个扇区之后)加载到物理内存地址 1000h:0000h 然后跳转到它。如何编译我的 C 内核以在 16 位实模式下工作?
我的基本内核:
void OSmain()
{
unsigned char *videoram = (unsigned char *) 0xb8000;
videoram[0] = 65; /* character 'A' */
videoram[1] = 0x07; /* forground, background color. */
while( 0 )
{
}
}
我尝试过的编译器是 GCC、tinyCC 和 DMC。我的目标是获得一个可以跳转以开始执行的平面二进制文件。
【问题讨论】:
-
运气与此无关。您尝试过哪些编译器,结果如何?您是否能够让编译器生成所需的汇编代码?使用代码启动时没有得到预期的结果吗?
-
Digital Mars 编译器应该仍支持 16 位目标,但我不确定编译器/链接器必须具备何种能力来解析固定段地址或创建与位置无关的代码。尽管如此,它可能值得一看:digitalmars.com/features.html
-
对于 dmc 编译器,16 位 C 代码的示例编译/链接命令是什么?我阅读了一些文档,但我仍然有点不确定应该为编译器和链接器使用哪些开关......
标签: c compiler-construction kernel 16-bit real-mode