Assembly 为什么在切换到保护模式时,MOV CR0和JMP指令必须来自标识映射的页面?

Assembly 为什么在切换到保护模式时,MOV CR0和JMP指令必须来自标识映射的页面?,assembly,x86,paging,osdev,protected-mode,Assembly,X86,Paging,Osdev,Protected Mode,为什么我们必须将mov cr0和jmp指令放入标识映射的页面 我一直在使用谷歌搜索这个问题,但我无法理解结果。启用受保护模式时(不启用分页);您不需要确保页面是标识映射的 当启用分页时(可能同时启用保护模式),CPU将尝试从mov cr0之后的(虚拟)地址获取mov cr0之后的下一条指令。处理此问题的最简单方法是标识页面,这样物理内存中mov cr0之后的指令也将是虚拟内存中mov cr0之后的指令。然而;这不是严格要求的。例如,如果您将mov cr0安排在页面的最后一个字节中(以便在启用页面

为什么我们必须将
mov cr0
jmp
指令放入标识映射的页面


我一直在使用谷歌搜索这个问题,但我无法理解结果。

启用受保护模式时(不启用分页);您不需要确保页面是标识映射的


当启用分页时(可能同时启用保护模式),CPU将尝试从
mov cr0
之后的(虚拟)地址获取
mov cr0
之后的下一条指令。处理此问题的最简单方法是标识页面,这样物理内存中
mov cr0
之后的指令也将是虚拟内存中
mov cr0
之后的指令。然而;这不是严格要求的。例如,如果您将
mov cr0
安排在页面的最后一个字节中(以便在启用页面后立即执行的指令将位于另一个页面的开头)包含
mov cr0
的页面不需要进行身份映射,下一页也不需要进行身份映射。

否则启用分页将有效地进行跳转(CS:IP突然意味着其他内容)。如果您有不同的代码在相应的CS:IP上执行一些有用的操作,那也可以。问题是,一旦您将PG(CR0中的页位)翻转为1,处理器必须在虚拟内存中获取下一条指令。如果启用PG位后的下一条指令的虚拟内存地址未进行标识映射,则处理器无法检索该地址,并且会出现故障。不要将[Solutiond]编辑到标题中。因此,已根据已接受的答案显示已回答或未回答状态。