【问题标题】:What is the function of the "mov eax, cr3; mov cr3, eax" in x86 assembly code?x86汇编代码中“mov eax,cr3;mov cr3,eax”的作用是什么?
【发布时间】:2009-07-07 03:19:42
【问题描述】:

我正在反汇编一些代码,我遇到了:

mov eax, cr3
mov cr3, eax

这些线的作用是什么?

这是 x86 低级(BIOS/固件/引导加载程序之前)初始化代码。我们甚至还没有设置缓存。

【问题讨论】:

  • 我认为有一个比“令人愉悦”cr3 更专业的术语,但它看起来就是这样,是的。
  • +1 - 这是一个有趣的问题。
  • 我平时不喜欢人身攻击,但25岁就这么正经?轻点!
  • 想要原文的可以看一下编辑历史。我实际上喜欢“[为内容编辑]”,因为我的第一个想法并不是它实际上是(相对)温和的词。而且我很确定您不会对其他东西(例如 CR3)这样做,只对您自己这样做:-)
  • 我并不是说您编辑的原因是错误的,我是说您的编辑本可以更有用。我还说你应该停止担心,要快乐。但可惜这里不是讨论的地方,所以我不再按 F5。

标签: assembly x86


【解决方案1】:

它通过自己加载 cr3 来刷新 TLB(翻译后备缓冲区)。

英特尔甚至在他们的“英特尔 64 和 IA-32 架构软件开发手册第 3A 卷 - 系统编程指南”中提到了代码。

mov EAX,CR3  ; invalidate the TLB
mov CR3,EAX  ; by copying CR3 to itself

您可以在以下位置找到该手册以及更多方便的手册:

http://www.intel.com/products/processor/manuals/index.htm

【讨论】:

  • 直接做"mov cr3, cr3"有什么区别?
  • @Eliseo - 这不是法律指示。有不同的“从寄存器加载到控制寄存器”和“将控制寄存器加载到寄存器”指令。没有控制寄存器->控制寄存器mov指令。
猜你喜欢
  • 1970-01-01
  • 2014-10-28
  • 2017-05-05
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2012-10-10
  • 2016-05-29
  • 2012-12-10
相关资源
最近更新 更多