【发布时间】:2014-02-18 12:31:44
【问题描述】:
我指的是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 的值执行一些垃圾代码吗?还是我缺少什么?
【问题讨论】:
标签: assembly operating-system bootloader osdev protected-mode