从实模式到保护模式的跳转指令是怎么取到的?
好多类似的代码:
lgdt GdtPtr //加载 GDTR
cli //关中断
//打开地址线A20
//准备切换到保护模式
mov eax, cr0
or eax, 1
mov cr0, eax
//真正进入保护模式,根据GDR中注册的信息,跳转到段基址0x7d00,偏移量为0的地方(pm32.c中main函数内存地址)
jmp dword SelectorSode32:0x0
执行mov cr0, eax命令之后,已经是保护模式了,此时,按实模式的解释方式cs:ip即cs*16+ip-->jmp dword SelectorSode32:0x0
但这时已经是保护模式了,此时的cs:ip为什么还是指向jmp命令呢?如果不是,那就根本执行不了jmp命令,也就乱了。
我的疑问:
mov cr0,eax是在实模式下执行的,当把这个命令取到指令缓冲寄存器的时候,ip下移,这时cs:ip指向jmp命令,接着执行
mov cr0,eax命令,此后,取指令的模式已经变了,已经从cs的投影寄存器取信息了,为什么还是取到jmp命令?