Kernel 在VirtualBox中运行内核

Kernel 在VirtualBox中运行内核,kernel,virtualbox,bootloader,osdev,Kernel,Virtualbox,Bootloader,Osdev,我有一个引导加载程序和一个内核都是用汇编编写的 现在我对这些文件有两个问题。由于引导加载程序的大小是512B,我能够在VirtualBox中成功运行引导加载程序的.img文件 但是: 内核的大小为580B,VirtualBox软盘驱动器不接受它。 我该如何摆脱这一切?在VirtualBox中运行内核。 如何将控制权从引导加载程序转移到内核部分? 我在Windows 7环境中。1-使用MISO将其设置为ISO映像 miso my.iso -ab my.img 您必须使用“复制”将它们复制到一个

我有一个引导加载程序和一个内核都是用汇编编写的

现在我对这些文件有两个问题。由于引导加载程序的大小是512B,我能够在VirtualBox中成功运行引导加载程序的.img文件

但是:

内核的大小为580B,VirtualBox软盘驱动器不接受它。 我该如何摆脱这一切?在VirtualBox中运行内核。 如何将控制权从引导加载程序转移到内核部分?
我在Windows 7环境中。

1-使用MISO将其设置为ISO映像

 miso my.iso -ab my.img
您必须使用“复制”将它们复制到一个img文件中

2-我不完全理解,但我会尽我所能帮助你。 我认为您需要从内核调用引导加载程序内部的一些代码部分。 正如你所知,你必须知道你的代码的内存地址,你想调用哪个,或者你可以使用.inc文件来调用这部分代码。如果你想让内核能够在运行时访问引导加载程序的内存段,就像我的第一个建议,你必须知道你想调用它的代码的内存地址,就像:

[Bits 16]
[ORG 0x7c00]
start:
...
times 256-($-$$) db 0
blbla:;I know that is in the [0x7d00]
jmp $
times 256-($-$$) db 0
dw 0xAA55

请随时向我提问:afcultraos@gmail.com对于第一部分,在内核代码末尾添加一行-

第8个相等扇区的编号 乘以512*没有扇区的扇区数db 0

更改数字以根据扇区固定大小

第二,您可以使用中断13h将内核加载到内存中

正在加载内核: mov bx,0x1000;在哪里加载内核 mov-dl,128;硬盘驱动器号通常为128,软盘驱动器号通常为0 mov-dh,0;head_no-开始时为0 mov-ah,0x02;BIOS中的读扇区功能 mov-al,0x12 mov-cx,0x0002;要读取的扇区数 int 13h;BIOS中断-仅在实模式下使用

jc加载内核;如果出现错误,请重试
jmp0x1000;然后你可以直接跳转到内核代码

有人能在这里回复我吗?请!软盘映像需要是扇区大小的倍数,即512字节。而且,只是一个预先警告,只有前512字节会被加载到内存中;您必须编写自己的代码来加载软盘映像的其余部分。