我正在编写引导加载程序并坚持使用一个 545 字节的文件,我不知道如何加载。如果它是一个 512 字节的文件存储在第 2 扇区,它可以很容易地加载到内存中。但这对我来说似乎有点奇怪。
我该怎么做呢?
我正在编写引导加载程序并坚持使用一个 545 字节的文件,我不知道如何加载。如果它是一个 512 字节的文件存储在第 2 扇区,它可以很容易地加载到内存中。但这对我来说似乎有点奇怪。
我该怎么做呢?
关于您删除的问题,如何在 16 位中嵌入 C 和汇编?:
创建一个调用简单“内核”的“引导加载程序”并不一定很困难……但这也不是您可以在一个问题中回答的问题。
第一个问题是——问:你的目标平台是什么?
听起来像 - 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()”。
建议:
尝试完成本教程(网络上有许多类似的示例):