我正在尝试在c函数中启用分页,其中我使用内联汇编来设置cr3和cr0寄存器。但是,寄存器没有设置,我不知道为什么。我的c程序也在qemu上运行,我不知道如何调试它。这是我的代码:
void vmm_on(void) {
__asm__("mov 0x200000, %eax\n\t"
"mov %eax, %cr3\n\t"
"mov %cr0, %eax\n\t"
"or %eax, 0x80000000\n\t"
"mov %eax, %cr0");
}
答案 0 :(得分:2)
我认为(从你的代码片段),你得到了cr0和cr3错误的目的。为了正确设置分页,你必须做一些事情。首先,你要正确设置页面表,即。页面目录,页面表,页面框架。然后,你要让cr3指向那个页面目录地址,CPU将通过cr3找到页面目录的地址。在正确设置表之后,您必须启用cr0寄存器的“分页”位。有关详细信息,请参阅this page。