我刚刚用汇编语言写了一个非常基本的 Bootstrap ,现在正在尝试写一个内核。这是我目前所拥有的。
extern "C" void main() {
int addr = 0xb8000;
int i = 0x00;
for (int i = 0x00; i < 0xff; i += 0x11) {
*(char*)addr = 'A';
addr++;
*(char*)addr = i;
addr++;
}
return;
}
它真正做的只是显示一些颜色。它是通过写入视频存储器来实现的,对于QEMU
来说是0xb8000
。如果我想把这个“操作系统”闪存到USB上,然后在笔记本电脑上 Boot 它,我需要改变视频存储器的地址吗?有没有办法自动找到那个地址?
1条答案
按热度按时间s4n0splo1#
老实说,这应该很好,因为是。
0xB8000
是硬编码的地址,视频显示在文本模式。有没有地址空间布局随机化在这里进行,这是字面地址。如果你有DOSBOX你可以尝试一下,它应该工作的书面。