进入保护模式后,为什么预取队列无效?

时间:2016-10-10 18:16:04

标签: assembly x86

英特尔开发人员手册建议在切换到保护模式后,我们会在MOV CR0指令更改执行流程并立即执行处理器后立即执行JMP或CALL指令。其目的是使预取队列无效,如第9章第9.10.2节START.ASM Listing第174-186行中的代码示例所示:

174 ; enter protected mode
175 MOV EBX,CR0
176 OR EBX,PE_BIT
177 MOV CR0,EBX
178
179 ; clear prefetch queue
180 JMP CLEAR_LABEL
181 CLEAR_LABEL:
182
183 ; make DS and ES address 4G of linear memory
184 MOV CX,LINEAR_SEL
185 MOV DS,CX
186 MOV ES,CX

为什么我们需要执行此类操作?代码是否在队列中保持不变,因为像这样的短暂跳转根本不会改变任何标志或段,除非使预取队列中的当前数据无效以再次重新加载相同的东西?

1 个答案:

答案 0 :(得分:0)

所以,我找到了目的:根据表9-5描述了STARTUP.ASM中的主要初始化步骤:

  

跳转到清除实模式指令队列

实际上,仅用于重新加载指令队列,因此早期的reala模式指令被替换为保护模式指令。