第2章 IA-32结构微处理器 退出 2.1 IA-32结构的概要历史 2.2 IA-32 PROCESSOR的功能结构
2.1 IA-32结构的概要历史 IA-32结构的发展历史。 8086 80386 Intel 386处理器是IA-32结构系列中的第一个32位处理器。 80486
奔腾(Pentium) P6系列处理器 奔腾II 奔腾III Intel Pentium4处理器 Intel Pentium 4处理器是最新的IA-32处理器,并是第一个基于Intel NetBurst微结构的处理器。
2.2 IA-32 PROCESSOR的功能结构 8086(8088)CPU从功能上来说分成两大部分:总线接口单元BIU(Bus Interface Unit)和执行单元EU(Execution Unit)。 BIU负责8086CPU与存储器之间的信息传送。 EU部分负责指令的执行。
80386由6个能并行操作的功能部件组成,即总线接口部件、代码预取部件、指令译码部件、存储器管理部件、指令执行与控制部件。这些部件按流水线结构设计,指令的预取、译码、执行等步骤由各自的处理部件并行处理。这样,可同时处理多条指令,提高微处理器的处理速度。 80486是功能上的另一次飞跃,它把386微处理器、X87FPU和片上的Cache集成在一起,从功能上形成了IA-32微处理器结构
2.3 IA-32结构微处理器的指令系统的发展 IA-32结构微处理器的指令主要由两部分组成:即8086的微处理器指令和X87 FPU的协处理器指令。 IA-32结构微处理器指令系统在以下几个方面有重大发展。 1.奔腾MMX引入的指令 2.SSE指令 3.SSE2指令
2.4 IA-32结构微处理器的性能发展 2.4.1 IA-32的流水线结构简介 1.流水线与并行执行技术 为了提高计算机访问存储器和执行指令的速度,可以使一些需要计算机处理的多项操作在时间上重叠进行,甚至设计出多个功能相同或相近的部件同时对其进行处理,这种技术就是流水线与并行执行技术。
2.推测执行技术 推测执行技术(或称为预测执行技术)主要是为了充分发挥流水线与并行执行技术和后面将要介绍的超顺序执行技术而采取的一种先进的微处理器执行技术。 3.超顺序执行技术 超顺序执行技术是一种新型的计算机执行技术,这种技术突破传统的计算机顺序执行过程,尽计算机各部件所能,最大限度地利用计算机中各物理与逻辑资源,以最快地执行指令。
2.4.2 Cache 将主存储器中急需执行或处理的很小一部分代码或数据调入Cache中,然后,微处理器直接与这种高速的Cache进行指令调入和数据交换,这样,就比访问主存储器快得多,基本能够实现与微处理器的同步。 当微处理器要从主存储器中读取指令或数据时,首先检查要访问的内容是否在Cache中,若在,则从Cache中读;只有在Cache中不包含要访问的内容时,才访问主存储器,同时更新Cache中的内容。
在微处理器执行程序的过程中,任何时候微处理器所访问的只是存储器的一小部分或区域固定的存储器片断,Cache若将该区间中的内容调入,使微处理器直接访问Cache,而不直接访问主存储器,则可快速获得这部分的内容,再加上Cache中内容的填入可与微处理器的运行同时进行。因此,Cache的作用是显而易见的。典型情况下,微处理器所需指令和数据在Cache中的概率高达95%以上。
2.5 IA-32结构微处理器的执行环境 2.5.1 操作模式 IA-32结构支持三种操作模式:保护模式、实地址模式和系统管理模式。操作模式确定哪些指令和结构特性是可以访问的。
2.5.2 基本执行环境概要 地址空间。在IA-32处理器上运行的任一任务或程序能寻址多至4 G(232)字节的线性地址空间(80386以上的处理器,8086只有20条地址线,只能寻址1 M字节)和多至64 G(236)字节的物理存储器(奔腾pro以上的处理器)。 基本程序执行寄存器。八个通用寄存器、六个段寄存器、标志寄存器EFLAGS和EIP(指令指针)寄存器组成了执行通用指令的基本执行环境。这些指令执行字节、字和双字整型数的基本整数算术运算,处理程序流程控制,在位和字节串上操作并寻址存储器(这些就是8086处理器的操作)。
X87 FPU寄存器。八个80位的X87 FPU数据寄存器,X87 FPU控制寄存器、状态寄存器、X87 FPU指令指针寄存器、X87 FPU操作数(数据)指针寄存器、X87 FPU标记寄存器和X87 FPU操作码寄存器,提供执行环境以操作单精度、双精度和双扩展精度浮点数,字、双字和四字整数以及二进制编码的十进制(BCD)值。 MMX寄存器。八个MMX寄存器支持在64位包装的字节、字和双字整数上执行单指令多数据(SIMD)操作。
XMM寄存器。八个XMM数据寄存器和MXCSR寄存器支持在128位包装的单精度和双精度浮点值和128位包装的字节、字、双字和四字整数上执行 SIMD操作。 堆栈(stack)。为支持过程或子程序调用并在过程或子程序之间传递参数,堆栈和堆栈管理资源包含在基本执行环境中。堆栈定位在内存中。 I/O端口。IA-32结构支持数据在处理器和输入输出(I/O)端口之间的传送。
2.5.3 存储器组织 处理器在它的总线上寻址的存储器称为物理存储器。物理存储器按字节序列组织。每个字节赋予一个唯一的地址,称为物理地址。 1.实地址方式存储器组织 IA-32结构微处理器中的实地址方式是为了与8086(8088)兼容而设置的,所以IA-32结构微处理器的实地址方式从存储器组织来看与8086(8088)的存储器组织是一样的。 8086有20条地址引线,它的直接寻址能力为220=1M字节。
8086内部的ALU能进行16位运算,有关地址的寄存器如SP、IP,以及BP、SI、DI等也都是16位的,因而8086对地址的运算也只能是16位。对于8086来说,各种寻址方式,寻找操作数的范围最多只能是64K字节。所以,整个1M字节存储器以64K为范围分为若干段。在寻址一个具体物理单元时,必须要由一个基地址再加上由SP或IP或BP或SI或DI等可由CPU处理的16位偏移量来形成实际的20位物理地址。这个基地址就是由8088中的段寄存器,即代码段寄存器CS、堆栈段寄存器SS、数据段寄存器DS以及附加段寄存器ES中的一个来形成的。在形成20位物理地址时,段寄存器中的16位数会自动左移4位,然后与16位偏移量相加,如图2-16所示。
2.分段模式存储器结构 IA-32结构微处理器的基本存储模式是分段式存储模式。与8086类似,程序中给出的地址由两部分组成,即段基地址(一个段的起始地址)和段内偏移量。段基地址由段寄存器的值确定,而段内偏移是由指令的寻址方式确定。 3.平面存储模式 平面存储模式实质上是分段存储模式的一种特例。当所有段寄存器的值相等且全指向线性地址0(所有段的段基地址都为0),即所有段都重合于同一个线性地址空间。
2.5.4 基本的程序执行寄存器 处理器为了通用系统和应用程序编程提供了16个基本程序执行寄存器,如图2-20所示。
1.通用寄存器 EAX—操作数和结果数据的累加器。 EBX—在DS段中数据的指针。 ECX—串和循环操作的计数器。 EDX—I/O指针。 ESI—指向DS寄存器段中的数据指针、串操作的源指针。 EDI—指向ES寄存器段中的数据(目标)的指针、串操作的目标指针。 ESP—堆栈指针(在SS段中)。 EBP—堆栈上数据指针(在SS段中)。
如在图2-21中所示,通用寄存器的低16位直接映射至8086处理器中能找到的寄存器组并用寄存器名AX、BX、CX、DX、BP、SP、SI和DI引用。这些16位寄存器中的前四个即AX、BX、CX和DX又可以分别作为AH、BH、CH和DH(高字节)以及AL、BL、CL和DL(低字节)8位寄存器引用。
SP是堆栈指针,它与段寄存器SS一起确定在堆栈操作时,堆栈在内存中的位置。用BP(Base Pointer Register)寻址堆栈操作数时,也是寻址堆栈段。SI(Source Index Register)和DI(Destination Index Register)常用于串操作。 2.段寄存器 段寄存器(CS、DS、SS、ES、FS和GS——在8086处理器中没有FS和GS这两个段寄存器)保存16位段选择子。一个段选择子是标志内存中一个段的特殊指针。为访问在内存中的具体段,此段的段选择子必须存在于适当的段寄存器中。
3.EFLAGS寄存器 32位EFLAGS寄存器包含一组状态标志、一个控制标志和一组系统标志。 当IA-32结构发展时,新的标志加至EFLAGS寄存器,但已存在的标志的位置和功能保持不变。 (1)状态标志 状态标志的功能如下: ① 进位标志CF(Carry Flag) ② 辅助进位标志AF(Auxitiary Carry Flag)
③ 溢出标志OF(Overflow Flag) ④ 符号标志SF(Sign Flag) ⑤ 奇偶标志PF(Parity Flag) ⑥ 零标志ZF(Zero Fiag)
(2)控制标志 EFLAGS寄存器的控制标志(位8,10,21)指示程序和机器运行的状况。控制标志的功能如下: ① 方向标志D(Direction Flag) ② 中断允许标志IF(Interrupt-enable Flag) ③ 追踪标志TF(Trace Flag) (3)系统标志和IOPL字段 在EFLAGS寄存器中的系统标志和IOPL字段控制操作系统或执行操作。它们不能被应用程序修改。
4.指令指针 指令指针(EIP)寄存器包含下一条要执行的指令在当前码段中的偏移。通常,它是顺序增加的,从一条指令边界至下一条指令,但在执行JMP、Jcc、CALL、RET和IRET等指令时,它可以向前或向后移动若干条指令。 8086的指令指针IP是EIP的低16位。由于在8086中地址指针是16位的,故指令指针也是16位的。其功能相同。