首页 文章

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

提问于
浏览
2

英特尔开发人员手册建议在切换到保护模式后,我们会在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

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

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

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

相关问题