X86处理器主要有四种操作模式:
- 保护模式
- 虚拟8086模式
- 实地址模式
- 系统管理模式
一、保护模式:保护模式是CPU的原生状态,在这种模式下,所有的指令和特性都是可用的,分配给程序独立的内存区域叫做段,而CPU会阻止程序使用自身段范围之外的内存。
二、虚拟8086模式:保护模式下,处理器可以在一个安全的环境中直接执行是地址模式软件,如果一个程序崩溃了或是试图向系统内存区域写数据,都不会影响到同一时间内执行的其他程序。现代操作系统可以同时执行多个独立的虚拟8086会话。WIN系统下一个CMD命令所运行的MS-DOS程序就是一个独立的虚拟8086模式的应用,总的来说虚拟8086模式就是运行在保护模式下的实地址模式。
三、实地址模式:实地址模式就是早期的Intel处理器的编程环境,但是增加了一些其他的特性,如切换到其他模式的功能。当程序需要直接访问系统内存和硬件的时候,就是这种模式。
四、系统管理模式:这种模式会向操作系统提供实现诸如电源管理和系统安全等功能的机制,这些功能是由计算机制造商实现的,是为了一个特定的系统设置而定制的处理器。
小结:
现代MASM汇编都是基于保护模式下编程,WINDOWS对其权限做了一些限制。相对的也提供了一些便捷的调用功能。
地址空间
在32位保护模式下,一个任务或程序最大可寻址4GB的线性地址空间。从P6处理器开始,一种被称为扩展物理寻址的技术可以使得可以被寻址的物理内存增加到了64GB。而实地址模式下只能寻址1MB。
32位通用寄存器
8个通用寄存器:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI
6个16位段寄存器:CS,ES,SS,FS,DS,GS
1个标志位寄存器:EFLAGS
1指令指针寄存器:EIP
- 通用寄存器EAX,EBX,ECX,EDX 各自都有其高8位寄存和低8位寄存器。
如:EAX的高8位寄存器为AH,低8位为AL以此类推。 - 其他通用寄存器ESI,EDI,EBP,ESP只能用32位或16位名称来访问。
如:32位名称ESI,16位名称SI,以此类推。
特殊用法:某些通用寄存器有特殊用法。
- 乘除指令默认使用EAX,通常被称为扩展累加寄存器。
- ESP用于寻址堆栈数据,极少用于一般运算和数据传输,通常称为扩展堆栈指针寄存器。
- ESI和EDI用于高速存储器传输指令。通常称为扩展源变址寄存器和扩展目的寄存器。
- EBP通常是高级语言用来表示堆栈中函数参数和局部变量的引用。除了高级编程,他不用于一般算术运算和数据传输。通常称为扩展帧指针寄存器。
- 16位段寄存器表示预先分配的区域的基址,这个内存区域称为段,保护模式中,段寄存器中存放的是段描述符指针。一些段中存放代码。其他段存放数据,还有一个堆栈段存放的是局部变量和函数参数。
- cs是代码段寄存器
- ds是数据段寄存器
- ss是堆栈段寄存器
- es是扩展段寄存器
- fs是标志段寄存器
- gs是全局段寄存器
- EIP指令指针寄存器包含下一条将要执行的指令地址。
- EFLAGS标志位寄存器器包含了独立的二进制位,用于控制CPU的操作或是反应一些CPU的操作结果。有些指令会影响这些二进制位。每个二进制位都代表不同含义。
EFLAGS
- 控制标志位:控制位控制CPU的操作。如检测溢出时执行中断,或别的操作(方向标志位和中断标志位)。
- 状态标志位:
- 进位标志位CF:发生进位为1,无进位为0
- 溢出标志位OF:发生溢出为1,无溢出为0
- 符号标志位SF:算数或逻辑操作结果为负时为1
- 零标志位ZF:算数或逻操作结果为0时为1
- 辅助进位标志位AC:算数操作在8位操作数中产生了位3向位4进位时为1
- 奇偶校验标志位PF:结果的最低有效位包含偶数个1时为1。
其他寄存器不列举了。都是浮点或单指令多数据,多指令多数据用到的寄存器。用于并行计算或是浮点计算。