14.4 进入和离开实地址模式
优质
小牛编辑
143浏览
2023-12-01
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. 载入实地址模式需要的寄存器。