32位x86处理器架构
包括了intel IA-32系列成员和所有32位AMD处理器。
1 操作模式
x86处理器有三个主要模式分别是:保护模式,实地址模式和系统管理模式以及一个保护模式的特殊模式的子模式:虚拟8086模式。
引入一个定义:程序在运行被分配的内存称之为段。
1.1 实地址模式(Real-Address Mode)
处理器最纯正的模式,可以访问任何段内存。是最初intel处理器的编程环境,可以切换到其它模式
1.2 保护模式(Protected Mode)
保护模式也就是处理器的原生状态,可以采用所有指令和特征。程序在运行被分配的内存称为段,但是处理器不允许程序使用除了段以外的其它内存。相当于对实地址模式起了一个保护作用,只能操作当前程序。
1.3 虚拟8086模式(Virtual-8086 Mode)
是在保护模式下直接执行实地址模式的软件。如MS-DOS程序。相当于在保护模式下执行实地址模式的软件来模拟实地址模式操作。
1.4 系统管理模式(System Management Mode)
2 基本执行环境
2.1 地址空间
2.2
寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,存放n位二进制代码的寄存器,需用n个触发器来构成。
寄存器直接位于CPU内的高速存储位置,访问速度快,远高于传统存储器。
寄存器总总览(包含了8个通用寄存器,6个16位段寄存器,一个状态处理器EFLAGS和一个指令指针寄存器)
32位 | 16位 | 高8位 | 低8位 |
EAX | AX | AH | AL |
EBX | BX | BH | BL |
ECX | CX | CH | CL |
EDX | DX | DH | DL |
32位 | 16位 |
ESI | SI |
EDI | DI |
EBP | BP |
ESP | SP |
某些通用寄存器有特殊用法
寄存器 | 用法 |
EAX | 加减乘除默认用EAX,常被称为累加寄存器 |
ECX |
CPU通常把ECX作为循环计数器 |
ESP | 用于寻址堆栈数据 |
ESI和EDI | 用于高速存储器传输指令 |
EBP | 高级语言通过EBP来引用堆栈中的函数参数和局部变量 |
2.2.2段寄存器
16位段寄存器表示预先分配的内存区域基址
保护模式中:
段寄存器中存放的是段描述符表指针,还有一个堆栈段存放的是局部变量和函数参数
2.2.3 指令指针
指针指令寄存器(EIP)包含下一条将要执行的指令的地址。
2.2.4 EFLAGS寄存器
EFLAGS(flags)寄存器用来控制CPU和反应CPU的操作。
2.2.5 控制标志位
控制标志位控制CPU的操作
2.2.5 状态标志位
状态标志位反映CPU执行的算术和逻辑操作结果。包括:溢出位、符号位、零标志位、辅助进位标志位、奇偶标志位和进位标志位。
进位标志位CF | 无符号运算太大是需要设置 |
溢出标志位OF | 有符号运算过大过小都需要设置 |
符号标志位SF | 产生负结果的时候需要设置 |
零标志位ZF | 结果为零时需要设置 |
辅助进位标志位AC | 产生进位的时候需要设置 |
奇偶效验标志位PF | 最低有效字节包含偶数个1时设置,否则清楚。通常用来错误检测检查数据是否被修改和损坏 |
3 MMX寄存器
8个64位寄存器支持SIMD(单指令,多数据)的特殊寄存器。MMX指令对MMX寄存器的数据值进行并行操作
4 XMM寄存器
x86包括了8个128位XMM寄存器,用于SIMD流扩展指令集
ST(0) |
ST(1) |
ST(2) |
ST(3) |
ST(4) |
ST(5) |
ST(6) |
ST(7) |
48位指针寄存器:FPU指令指针和FPU数据指针
16位控制寄存器:标识寄存器,控制寄存器和状态寄存器
保护模式中
处理器可以同时运行多个程序,每个进程分配总共的4GB内存。每个进行有自己的运行空间,禁止访问其他进程地址。