我指的是Broken Thorn的操作系统开发教程。我目前正处于执行第二阶段引导加载程序以加载 GDT 并进入保护模式的阶段。
我了解 GDT 的工作原理以及如何进入保护模式。但是,我的困惑是加载cr0寄存器后执行的第一条指令:
jmp 08h:Stage3 ; far jump to fix CS. Remember that the code selector is 0x8!
此时,CS 尚未加载指向代码描述符的选择器值,我们已经处于保护模式。此 CS 值可能与用于执行实模式指令的值不同,因此添加 IP 的值也会导致地址与jmp. 那么这不会导致基于 CS 的值执行一些垃圾代码吗?还是我缺少什么?