虚幻模式

编辑
本词条由“匿名用户” 建档。
在x86计算中,虚幻模式、大实模式、巨型实模式、扁平实模式或巫毒模式是实模式的一种变体,其中一个或多个段描述符已加载非标准值,如32位限制允许访问整个内存。与其名称相反,它不是x86处理器可以运行的单独寻址模式。它用于80286和更高版本的x86处理器。 出于效率原因,80286和所有更高版本的x86处理器在计算有效内存地址时使用存储在其内部段描述符缓存中的基地址、大小和其他属性,即使在...

虚幻模式

编辑

在x86计算中,虚幻模式、大实模式、巨型实模式、扁平实模式或巫毒模式是实模式的一种变体,其中一个或多个段描述符已加载非标准值,如32位限制允许访问整个内存。与其名称相反,它不是x86处理器可以运行的单独寻址模式。它用于80286和更高版本的x86处理器。

概述

编辑

出于效率原因,80286和所有更高版本的x86处理器在计算有效内存地址时使用存储在其内部段描述符缓存中的基地址、大小和其他属性,即使在实模式下也是如此。因此,对内部段描述符的修改允许在实模式下更改段的某些属性,例如可寻址内存的大小。这种技术被广泛使用,并得到所有英特尔处理器的支持。

HIMEM.SYS使用此功能来寻址扩展内存,除非将DOS切换为在与虚幻模式不兼容的虚拟8086模式下运行。

极少数使用虚幻模式的游戏之一(如果不是xxx的话)是《创世纪VII》。

BIOS代码使用虚幻模式,因为这是现代英特尔处理器的初始模式。此外,英特尔386SL和更高版本处理器中的系统管理模式(SMM)将处理器置于巨大的实模式。

虚模式下的程序可以调用为实模式(BIOS、DOS内核和驱动程序)编程的16位代码,而无需任何thunking。这使得虚幻模式驱动程序比DPMI驱动程序更简单。然而,虚幻模式与Windows3.x/9x/NT和OS/2等保护模式操作系统不兼容。

大实模式有一个1MB的代码段和一个4GB的数据段。

一些引导加载程序(例如LILO)使用虚幻模式访问最多4GB的内存。

启用虚幻模式

编辑

要将80386或更高版本的微处理器置于虚模式,程序必须首先进入保护模式,在GDT或LDT中找到或创建平面描述符,使用相应的保护模式选择器加载一些数据段寄存器,然后切换回真实模式。返回实模式后,处理器将继续使用在保护模式下建立的缓存描述符,从而允许从实模式访问4GiB的扩展内存。

80286微处理器只能在未记录的指令LOADALL的帮助下进入虚幻模式,以修改隐藏段基址寄存器以指向1MiB以上的源或目标内存位置

从80386开始,实模式程序可以使用带有地址大小覆盖前缀的32位寄存器。这允许程序使用像DS:这样的地址。在普通实模式下,如果EBX超过0xFFFF,则会发生故障。在虚幻模式下,允许访问。

虚幻模式

虚幻模式的变种

编辑

如上所述,虚幻模式通常涉及使用一个或多个数据选择器来更有效地寻址内存中的数据。这是常见的做法,通常称为平面实模式或大实模式。巨大的实模式是一种变体,其中代码段也扩展到4GiB。

此外,通过从32位属性(D位)设置为1的描述符加载代码选择器(CS)来获得虚幻模式的特殊情况。这种很少使用的变体具有一些优点,主要是因为它可以避免在16位代码段中使用32位寻址时通常需要的操作数大小覆盖前缀,但设置起来更加困难。由于实模式中断不会自动保留扩展指令指针(EIP)的高16位,因此代码需要适合代码段的低位部分,或者能够以某种方式保留和恢复EIP的高位。此外,如果要调用使用16位代码的BIOS或DOS中断函数,则需要进行模式切换来来回切换D位。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/136232/

(0)
词条目录
  1. 虚幻模式
  2. 概述
  3. 启用虚幻模式
  4. 虚幻模式的变种

轻触这里

关闭目录

目录