- 论坛徽章:
- 0
|
不会有问题的。
在置 CR0.PE = 1 后,far jmp 之前,processor 还是运行在 16 位代码
-------------------------------------------------------------------------
mov eax, cr0
bts eax, 0
mov cr0, eax
; 此处还是 16 位代码,还未进入真正的保护模式
; CS 还没未装入保护模式的 32 位 code segment selector & descriptor
; 所有 registers 没有更新
; 这和实模式下没什么区别,包括下面这条 far jmp 还是运行在伪实模式
jmp selector32: entery32
entry32:
; 此处才真正进入保护模式。
; 也仅仅是更新了 CS
; CR3 不会被刷新
------------------------------------------------------------------------------------------------
除非:
mov cr3, XXXXXXXX ; 更新 CR3
mov eax, cr0
or eax, 0x80000001 ; 同时开启 CR0.PE = 1 和 CR0.PG = 1
mov eax, cr0
; 开启保护模式的同时开启了 paging 模式
; 那么下面这条 far jmp 指令就要注意有没有相应的 physical address 被映射到
; 没有的话会发生 #PF 异常的
jmp selector32:entry32
entry32:
|
|