IA-32 CPU有三种模式:
其切换路径如下:
---引用自intel官方手册
1.实地址模式
处理器可以支持1MB的物理寻址空间。地址空间被划分为段,每个段(16 bits)最大长度为64KB;段的基址由16-bit段寄存器指定,16bit基址向左偏移,偏移位由0填充形成
20bit的段基址;
base 1111 1111 1010 0000 0000
offset + 0000 0000 1010 1010
------------------------------------------
= 1111 1111 1010 1010 1010
(1)可用的通用寄存器:
16 bits:AX, BX, CX, DX, SP, BP, SI, and DI
32 bits:(EAX, EBX, ECX, EDX, ESP, EBP, ESI, and EDI)
(2)段寄存器
CS、 DS、 SS、 ES (FS GS也可以指定使用):16bits
(3)16-bit IP寄存器:指令指针寄存器,是EIP的低16位
(4)16-bit FLAG寄存器:包含状态和控制标记;EFLAG低16位
(5)一个栈被用来处理call函数调用、中断、异常处理。
栈是由SS寄存器指定其地址,栈指针(SP)包含了一个相对于栈段的偏移值;
当call指令执行时,CPU讲CS、IP(EIP的低16位)压入栈,当ret指令执行时,弹出CS、IP;
当中断或者异常产生时,CPU push the EIP, CS, and EFLAGS (low-order 16-bits only)
registers进栈. 返回时,CPU从栈中弹出指令指针、CS和EFLAG 的保存值到 the EIP, CS, andEFLAGS registers.(6)单独的中断向量表(IVT)。中断向量表(每一个表项4字节)在实地址模式中用来处理中断、异常,而中断描述符表(IDT-每一个表项8bytes)被用在保护模式下;
2 保护模式
实模式和保护模式最大的区别在于,处理虚拟8086模式下的8086仿真器使用一些保护模式下的服务,比如保护模式下的中断、异常处理和页机制。
2.1 使能8086虚模式
只有当EFLAG中的VM标记被置位的时候处理器才能运行在虚模式下。只有一下两个条件才能触发:
a.处理器被切换到一个新的处于保护模式下的任务时
b.通过iret指令返回(一个虚模式的任务:可以理解为从实模式下返回成虚模式)
2.2 分页机制
见下篇