为什么使用非完全序列化指令时,用`mov ... CR0`改变`PG`后需要跳转一次?

问题描述 投票:0回答:1

英特尔® 64 和 IA-32 架构软件开发人员手册第 3A 卷 9.3 序列化指令中

当执行启用或禁用分页的指令时(即更改控制寄存器中的PG标志) CR0),该指令应该后跟跳转指令。跳转指令的目标指令是 使用 PG 标志的新设置(即启用或禁用分页)来获取,但跳转指令 其本身是使用之前的设置获取的。 Pentium 4、Intel Xeon 和 P6 系列处理器不需要 移动到寄存器 CR0 之后的跳转操作(因为在 Pentium 4 中使用 MOV 指令, Intel Xeon 或 P6 系列处理器写入 CR0 是完全序列化)。

“序列化指令”将在运行之前“序列化指令执行流”以避免重新排序。

问:

  1. 与分页相关的特殊序列化指令(即

    mov

    一个CR0
    寄存器操作数
    )之后的“跳转指令”的目的是什么?是否意味着刷新页表或其他?

  2. 完全序列化”意味着什么,因此它不需要遵循“序列化指令”的跳转?

serialization x86 paging virtual-memory
1个回答
0
投票
取指令实际上就是读取内存,把数据当作代码。

如果您继续获取 PG=0 的指令,则意味着代码不会经过翻译,IP 将继续“扁平”(不翻译)。

在jmp/序列化指令之后,指令将转到新路径并使用“新”翻译作为从中获取的正确代码。

© www.soinside.com 2019 - 2024. All rights reserved.