14.4 进入和离开实地址模式

RESET引脚被触发后将进入实地址模式。即使系统要进入保护模式下运行,程序的在刚开始时也要临时运行在实地址模式下,这时可以为进入保护模式做一些初始化。

14.4.1 切换到保护模式

离开实地址模式的唯一方法就是切换到保护模式。当用MOV指令将CR0的PE(保护使能)置位后,处理器进入保护模式。(为了和80286兼容,也可以使用LMSW指令来设置PE位。)

关于切换到保护模式的其他描述参见第十章“初始化”。

14.5 切换回实地址模式

处理器可以通过使用MOV指令复位CR0的PE位来重新回到实地址模式。然而,如果想这么做,必须按照下面的方法:

1.如果开启了页管理,按照下面的步骤做:

  • 变换线性地址,使它对等映射;即,线性地址等于物理地址。
  • 清除CR0的PG位。
  • 将CR3清零来清空页缓存。

2.段变换上限值为64K(FFFFH)。实地址模式下CS的上限值需要这样设置。

3.载入段寄存器SS, DS, ES, FS和GS。选择符指向的描述符包含下面的值,适用于实地址模式:

  • Limit = 64K (FFFFH)
  • Byte granular (G = 0)
  • Expand up (E = 0)
  • Writable (W = 1)
  • Present (P = 1)
  • Base = any value

4.关中断。CLI关闭INTR中断。NMIs可以通过外围电路来关闭。

5.清PE位。

6.用长跳转JMP跳转到将要执行的实地址模式代码。该动作会刷新指令队列并给予CS寄存器合适的访问权限。

7.使用LIDT来载入实地址模式下中断表的基地址和上限值。

8.开中断。

9. 载入实地址模式需要的寄存器。