我正在编写引导加载程序,遇到了一个545字节的文件,我不知道如何加载。如果它是存储在第二个扇区中的512字节文件,则可以很容易地将其加载到内存中。但这对我来说似乎有点奇怪。
我该怎么做?
关于您删除的问题,我如何在16位中嵌入C和Assembly?:
-
创建一个";bootloader";它调用一个简单的";内核";不一定很难。。。但这也不是一行字就能回答的问题。
-
第一个问题是——问:你的目标平台是什么?
这听起来像-A:从FAT(或FAT32)引导介质加载的Intel x86 CPU。
-
第二个问题=Q:你的";开发工作站";?您是否在Windows上编译/组装代码并创建启动映像?在Linux上"还有什么"?让我们假设";linux";。出于多种原因;好的选择";。
-
正如其他人所指出的,这个C程序是而不是对于您的";内核":
main.c=>
#include<stdio.h>
int main(int argc, char *argv[]) {
printf("Hello world!!!");
return 0;
}
您需要链接到C运行库("CRTL")中;printf()";。
您还需要预先调用crt0.obj;main()";。
即使您这样做了,您选择的CRTL和crt0.obj也可能与16位真实模式不兼容。
即使你涵盖了1)、2)和3),你仍然需要一个操作系统(例如DOS、Linux或Windows)才能真正执行";printf()";。
建议:
试着学习本教程(网上有很多类似的例子):
在汇编和C中编写引导加载程序-第1部分
在汇编和C中编写引导加载程序-第2部分