Brokenthorn's Known Bugs
Zhang3(讨论 | 贡献)2022年3月12日 (六) 06:01的版本 (创建页面,内容为“Category:FAQBrokenthorn的系列教程是更好的一些OSDev教程。 它们教授更好的编码实践,并且非常深入。 像所有教程一样,其中也有一些错误。 以下是最常见的: == CR0.PE描述错误 == 在OSDev8中,CR0.PE(位0)被错误地描述为将处理器设置为32位模式。 设置CR0的位0不会将处理器置于32位模式。 对32位代码段执行远跳将使处理器处于32位模式。 跳远本身仍将以…”)
Brokenthorn的系列教程是更好的一些OSDev教程。 它们教授更好的编码实践,并且非常深入。 像所有教程一样,其中也有一些错误。 以下是最常见的:
CR0.PE描述错误
在OSDev8中,CR0.PE(位0)被错误地描述为将处理器设置为32位模式。 设置CR0的位0不会将处理器置于32位模式。 对32位代码段执行远跳将使处理器处于32位模式。 跳远本身仍将以16位模式执行。
使用内联ASM的IRET
在OSDev15中,提供的ISR处理程序使用内联asm从C函数iretd:
void int_handler_5 () {
_asm add esp, 12
_asm pushad
// do whatever...
_asm popad
_asm iretd
}
这会对所使用的调用约定进行假设,通常不是一个好主意。 可以在这里找到更好的选项。
缺少分号
在OSDevPE中,IMAGE_THUNK_DATA结构体中缺少分号
分页代码问题
在OSDev18中,分页代码存在一些问题。 它直接访问物理内存而不映射它。 你可以使用它作为基础,但实现递归分页。