计算机组成的一些总结(5)X86体系结构
X86体系结构
8086,内部的通用寄存器为16位,对外有16根数据线和20根地址线,可以访问的存储单元数量为2的20次方,1MByte ,CPU发到存储器的地址为物理地址,8086的物理地址采用了“段加偏移”的方式,8086作为微处理器,在一个芯片上集成了原先由多个部件组成的CPU的功能。
80286,地址总线扩展到24位,可寻址地址总线扩展到24位,可寻址16MB的内存空间,引入了保护模式(不足每个段仍为64KB,严重限制软件规模),为保持兼容,保留了8086的工作模式,被称为“实模式”,
(实模式,又称“实地址模式”,运行在实模式下的X86微处理器像一个更快的8086,所有X86处理器在加电或复位后首先进入实模式,在实模式中会运行系统初始化程序,为进入保护模式做好准备。个人计算机在启动之后,运行的BIOS指令就是运行在实模式下的)
80386,是X86系列中第一款32位微处理器,支持32位的算术和逻辑运算,提供32位的通用寄存器,地址总线扩展到32位,可寻址4GB的内存空间,改进了保护模式(段范围可达4GB),增加了“虚拟8086模式”,可以同时模拟多个8086微处理器。
(保护模式,可简写为“pmode”,80386及以上的微处理器的主要工作模式是保护模式,支持多任务,可以访问4GB的物理存储空间,引入了虚拟存储器的概念,可以对存储空间进行更好的管理,保护模式让操作系统加强了对应用软件的控制,使得系统运行更安全高效)
系统启动后,会首先进入实模式,在初始化完成后,通过设置CPU中的控制寄存器,进入保护模式,操作系统和运用程序都运行在保护模式下,如果需要运行兼容8086的程序,可以在保护模式下切换虚拟8086模式, 如果发生中断或者异常,就会回到保护模式处理,处理完成后,返回到虚拟8086模式,不管在哪一种模式,经过复位后,都会从实模式开始启动。
AMD Opteron(2003年)
Opteron是X86扩展到64位的第一款微处理器, 兼容32位X86程序,且不降低性能。
X86体系结构从16位到64位
1.寄存器模型的变化,8086在通用寄存器中,前四个为数据寄存器(AX,BX,CX,DX),均为16位寄存器(每个16位寄存器都可以分为两个8位寄存器使用,大多数算术运算和逻辑运算指令都会使用到这些数据寄存器,用于临时保存数据,除存放通用数据外,各有专用的用途) 。SP,BP,SI,DI指针和变址寄存器,为16位寄存器,SP和BP用于堆栈操作,SI和DI用于串操作。FLAGS标志寄存器包含若干标志位,标志分为状态标志和控制标志,状态标志用于反映CPU的工作状态(执行加法运算时是否产生进位,运算结果是否为零),控制标志对CPU的运行起特定控制作用(如以单步方式还是连续方式运行,是否允许相应外部中断请求),8086的标志位实际使用了9个bit,bit0 CF进位标志是状态标志,还有三个控制标志。
IA-32的寄存器模型,通用寄存器在原有的基础上增加了高16位,扩展成了32位,例如原来的AX扩展成32位为EAX,程序中EAX是32位寄存器,也可以使用AX访问16位,使用AH或AL访问特定的8位, 指令指针寄存器和标志寄存器也扩展成32位,但是段寄存器的长度没有扩展,而是增加了两个16位的段寄存器。
X86-64的寄存器模型,将大多数寄存器扩展了64位,例如EAX扩展了高32位后成为了RAX,不但可以使用64位的RAX寄存器,同时也可以使用EAX,AX。段寄存器没有扩展,X86-64还增加了8个64位的通用寄存器,命名为R8-R15。
2.存储器寻址,8086依靠指令指针寄存器(IP,Instruction Pointer)进行寻址,IP寄存器中保存了一个内存地址,指向当前需要取出的指令,当CPU从内存中取出一个指令后,IP会自动增加,指向下一个指令的地址,程序员不能直接对IP进行存取操作,可以通过编写转移指令、过程调用/返回指令等改变IP寄存器的内容,8086是16位的,IP寄存器可以访问到的内存空间是2^16=65536字节单元,8086对外有20位地址线,寻址范围2^20=1M字节,8086的段寄存器和其它寄存器联合生产存储地址,CS(Code Segment)代码段寄存器,DS(Data Segment)数据段寄存器,ES(Extra Segment)附加段寄存器,SS(Stack Segment)堆栈段寄存器。8086的物理地址生产,编写程序时给出的地址称为偏移地址,又称偏移量,是16位的,而段寄存器中存放了段基值,段基值(16位)+偏移量(16位)是逻辑地址,段基值在计算时首先被左移4位,然后和偏移量相加,得到20位的物理地址,这就是从逻辑地址生成物理地址的过程,二进制的左移4位相当于十进制的乘以16,所以物理地址=段基值*16+偏移量。用这样的方式8086对存储器进行分段式的管理,1M字节的存储空间分成许多逻辑段,每段最长64K字节,可以用16位地址进行寻址,编程时使用逻辑地址,如果将程序在存储器中变换位置,程序中编写的偏移地址都不需要改动,只需要修改段寄存器的内容就可以了,而且不同的逻辑段可以有重叠的,这位高效的利用存储器的空间提供了便利。
IA-32的存储器寻址,16位的IP寄存器扩展成了32位的EIP寄存器,实模式下使用CS:IP,保护模式下CS:EIP,EIP寄存器的寻址能力2^32=4G字节单元,80386对外32位地址线寻址范围2^32=4G字节单元,EIP寄存器有能力访问到外部存储器的每一个字节单元,在保护模式下IA-32采用与之前形式上一致的寻址模式,保护模式下,段基址不在CS中,而是在内存中。CPU中,CS段寄存器不再保存段基值,而是指向描述符的地址,CS只有16位,无法在4G空间中寻址,所以CPU中增加了一个寄存器GDTR(全局描述符表的地址寄存器) ,GDTR中保存了全局描述符表(GDT)的起始地址,CS段寄存器中保存了相对于起始地址的偏移量,CPU在取指令时先将GDTR中保存的地址取出,并与CS寄存器中的内容相加,得到一个内存地址,用这个地址访问存储器,获得了描述符对应的8个字节,再将其中的基地址部分提取出来,与EIP寄存器中保存的偏移地址相加,就得到了真正要访问的地址,在描述符中描述了段的长度(段界限),对段的内容是否能读写(权限), CPU通过这些信息可以由硬件来判断当前执行的指令是否符合这个段的要求,从而起到了保护的作用。
X86-64,描述符中没有了段基址和段界限,很多字节被固定设置为0,描述符中只有访问权限字节和若干控制位,所有的代码段都从地址0开始。
Intel 8086 -- 1978年
Intel 80286 --1982年
Intel 80386--1985年
Intel Pentium--1992年10月发布的第五代微处理器,该产品在1993年3月正式推向市场
Intel PentiumPro--1995年11月
Intel Core 2--2006年7月
Intel Core i7--2008年