Intel IA-32处理器结构与原理
- 格式:ppt
- 大小:657.50 KB
- 文档页数:60
intelIA-32架构简介intel IA-32架构简介IA32的cpu操作模式1保护模式:这个模式是cpu的native状态.它可以在一个保护的多任务的环境中直接执行"real-address mode"的8086的软件.这个特性叫做virtual-8086模式.这个模式也就是cpu的一般工作模式.因为这个模式基本上打开了cpu的所有特性.2 real-address模式:这个模式它实现了一个8086处理器的环境的扩展.换句话说,可以说是模拟了一个8086的程序环境.计算机在重启或者开机的时候就处于这个模式,因此每次开机需要操作系统来切换到保护模式.这个模式中很多cpu的特性都是被关闭的.3 system management 模式(SMM)这个模式提供给操作系统一个执行平台指定的功能,提供了一个透明的架构.比如系统安全或者电源管理.当进入到smm中后,cpu保存当前的运行上下文,然后跳转到一个完全隔离的地址空间.然后smm指定的代码会被执行.当从smm返回时,处理器会返回刚才保存的状态.IA-64的cpu操作模式:IA-64加了一个模式就是IA-32e.这个模式包含下面两种子模式.1 compatibility 模式这个模式主要是用来不重新编译32位或者16位的程序,而能直接在64位处理器上运行.2 64位模式这个模式他所要求的环境必须是64位的操作系统,以及64位的应用程序.这个模式下能存取64位的线性地址空间.一个64位的操作系统既能在64位模式运行64位的应用程序,也能在兼容模式下运行32位程序(不重新编译).执行环境:1 地址空间IA-32 最大有4GB 线性地址空间,以及64GB物理地址空间内存存取是虚拟为一个栈来进行的.内存模型,也就是程序用来存取内存的方式:1 flat memory模型在这个模型下,内存看起来就是单独的持续的地址空间.这个空间叫做线性地址空间.代码,数据以及栈都是保存在这个地址空间内.2 segments内存模型.这个模型下,内存看起来就是由一些不连续的地址空间组成的,这些地址空间就称为段.数据,代码,以及栈包含在不同的段里面.要在一个段里面寻址,则程序必须生成一个逻辑地址.逻辑地址由一个段选择符和一个位移组成.在内部,所有的段都被映射为线性地址,因此要存取一个内存位置,处理器必须翻译逻辑地址到线性地址.3 Real-address mode memory model这个模式主要是针对8086处理器的.下面这张图表示了3种内存模型:寄存器:下面这张图表示了IA-32架构的所有寄存器:段选择符必须保存到段寄存器中.一共6个段寄存器.分别代表不同的段.cs,ss,分别代表代码段以及栈段.剩下的都是数据段寄存器.General-Purpose Registers有8个,分别是EAX, EBX, ECX, EDX, ESI, EDI, EBP, 和 ESP.ebp和esp为帧指针和栈指针.数据类型:1 byte,words,doublewords,quadwords以及doublequadwords.分别是8位,16位,32位,64位,128位.这里要注意doublequadwords只有在拥有sse扩展的处理器才存在.下面这张图表示了所有的数值类型:存取words,doublewords,quadwords以及doublequadwords 的地址最好都要自然对齐,一般是4字节或者8字节对齐.如果是一次没有对齐的内存存取,则处理器将会请求两次内存存取,才能取到对应的内存数据.还有一些指令操作doublequadwords时也要求对齐.如果是非对齐的存储的话,会产生一个general-protection exception (#GP).而他一般是16字节对齐.IA-32的浮点是符合IEEE 754的标准的.具体格式可以看下面的表:2 指针类型.near pointer和far pointerfar pointer是一个逻辑地址由段选择符和位移组成:还有一些类型比如String,BCD等,这里都没有介绍,详细的请去看intel的官方手册.函数调用:主要是4条指令 CALL,RET,ENTER以及LEAVE.栈只不过是在内存中虚拟出来的一块类似数组的区域(或者说是段)而已,段寄存器SS保存有栈的地址.使用PUSH和POP指令来操作数据的压栈,入栈.这里要注意栈是向下增长的.下图就是栈的结构:初始化和确立一个栈为当前栈,也就是栈的切换需要下面几个步骤:1 建立一个stack段.2 load这个段选择符到SS寄存器.这里能使用MOVE,POP或者LSS.3 load栈指针到ESP寄存器.栈的对齐:栈的地址(其实也就是栈的段描述符)必须是16位或者32位对齐.依赖于段的宽度.因此我们经常可以看到汇编中这一句:and $0xfffffff0,%esp这句也就是对其的语句。
Intel处理器已停产现有产品IA-32/x64指令系统概述•x86是Intel开发的一类处理器体系结构的泛称–包括Intel 8086、80286、i386和i486等,因此其架构被称为“x86”–由于数字并不能作为注册商标,因此,后来使用了可注册的名称,如Pentium、PentiumPro、Core 2、Core i7等–现在Intel把32位x86架构的名称x86-32改称为IA-32–IA是Intel Architecture的缩写•由AMD首先提出了一个兼容IA-32指令集的64位版本–扩充了指令及寄存器长度和个数等,更新了参数传送方式–AMD称其为AMD64,Intel称其为Intl64(不同于IA-64)–命名为“x86-64” ,有时也简称为x64IA-32的体系结构是怎样的呢?寄存器个数及各自功能?寄存器宽度?存储空间大小?编址单位?指令格式?指令条数?指令操作功能?寻址方式?数据类型?小端/大端?标志寄存器各位含义?PC位数?I/O端口编址方式?……控制器CPU PC 输入设备输出设备MAR MDR A L U 标志寄存器IR 地址数据控制GPRs 01存储器01234控制器A L U 标志寄存器地址数据控制GPRs 017ffffffff80483d680483d580483d405589e5EIP bfff0000MDR IR MAR beeefffc IA-32的体系结构是怎样的呢?8个GPR(0~7),一个EFLAGs,PC为EIP 可寻址空间4GB(编号为0~0xFFFFFFFF)指令格式变长,操作码变长,指令由若干字段(OP、Mod、SIB等)组成……计算机中数据的存储•计算机中的数据存放在哪里?寄存器文件通用寄存器组GPRs 存储器指令中需给出的信息:操作性质(操作码)源操作数1 或/和源操作数2 (立即数、寄存器编号、存储地址)目的操作数地址(寄存器编号、存储地址)存储地址的描述与操作数的数据结构有关!相当于宿舍书架相当于图书馆书架IA-32支持的数据类型及格式IA-32架构由16位架构发展而来,因此,虽然字长为32位或更大,但一个字为16位,长度后缀为w;32位为双字,长度后缀为l long double实际长度为80位,但分配96位=12B(按4B对齐)IA-32的寄存器组织IA-32的寄存器组织反映了体系结构发展的轨迹,字长不断扩充,指令保持兼容ST(0) ~ ST(7)是80位,MM0 ~MM7使用其低64位80286/386•6个条件标志8086IA-32的寻址方式•寻址方式–如何根据指令给定信息得到操作数或操作数地址•操作数所在的位置–指令中:立即寻址–寄存器中:寄存器寻址–存储单元中(属于存储器操作数,按字节编址):其他寻址方式•存储器操作数的寻址方式与微处理器的工作模式有关–两种工作模式:实地址模式和保护模式•实地址模式(基本用不到)–为与8086/8088兼容而设,加电或复位时–寻址空间为1MB,20位地址:(CS)<<4+(IP)•保护模式(需要掌握)–加电后进入,采用虚拟存储管理,多任务情况下隔离、保护–80286以上微处理器的工作模式–寻址空间为232B,32位线性地址分段(段基址+段内偏移量)保护模式下的寻址方式•SR段寄存器(间接)确定操作数所在段的段基址•有效地址给出操作数在所在段的偏移地址•寻址过程涉及到“分段虚拟管理方式”,将在第6章讨论存储器操作数跳转目标指令地址SKIPIA-32的寄存器组织返回寻址方式int x;float a[100];short b[4][4];char c;double d[10];a[i]的地址如何计算?104+i×4i=99时,104+99×4=500 b[i][j]的地址如何计算?504+i×8+j×2i=3、j=2时,504+24+4=532 d[i]的地址如何计算?544+i×8i=9时,544+9×8=616b31b0xa[0]a[99]b[0][1]100104b[0][0]b[3][3]b[3][2]c500504532536544d[0]d[9]616Linux系统:double型变量按4B边界对齐windows系统:double型变量按8B边界对齐各变量应采用什么寻址方式?x、c:位移/ 基址a[i]:104+i×4,比例变址+位移d[i]:544+i×8,比例变址+位移b[i][j]:504+i×8+j×2,基址+比例变址+位移int x ;float a[100];short b[4][4];char c;double d[10];b31b0xa[0]a[99]b[0][1]100104b[0][0]b[3][3]b[3][2]c500504532536544d[0]d[9]616将b[i][j]取到AX中的指令可以是:“movw 504(%ebp ,%esi ,2), %ax”其中,i×8在EBP中,j在ESI中,2为比例因子位移量和立即数都可以是:1B/2B/4BSIB 中基址B和变址I都可是8个GRS中任一个;SS给出比例因子操作码:opcode; W:与机器模式(16 / 32位)一起确定寄存器位数(AL / AX / EAX); D:操作方向(确定源和目标)寻址方式(ModRM字节):mod、r/m、reg/op三个字段与w字段和机器模式(16/32)一起确定操作数所在的寄存器编号或有效地址计算方式IA-32机器指令格式8d 04 02 leal (%edx,%eax,1), %eax 1000 110100 000 10000 000 010存储器操作数总结•IA-32是典型的CISC(复杂指令集计算机)风格ISA–8个通用寄存器(8位、16位、32位)–2个专用寄存器:EIP(PC)、标志寄存器EFLAGS –6个段寄存器(间接给出段基址)–存储器地址空间为4GB,按字节编址,小端方式–寻址方式•立即、寄存器、存储器(SR :[B]+[I]*s+A )•相对寻址–变长指令字、变长操作码•汇编语言格式–Intel格式汇编–AT&T格式汇编(本课程使用)段基址+有效地址(偏移量)8(%edx,%eax,4)。
IA-32处理器体系结构第一节、微机的基本结构一、CPU主要单元CPU(Central processor unit)由以下几个部分组成:1)控制单元,负责总线操作,指令调度,数据访问调度等2)算术逻辑单元,负责对输入数据进行处理3)寄存器,存储用于CPU执行计算、地址访问、指令指针、标志位等的数据4)时钟,发送时钟脉冲,以便执行指令操作,时钟脉冲时间称为一个时钟周期二、BUS总线CPU通过总线和外部设备执行通信1)控制总线用于传输IO指令2)地址总线用于指示IO地址3)根据指令和地址,IO设备通过数据总线读/写数据三、CPU基本结构图示1)从内存中取出指令2)取数据:寄存器、内存操作数3)解指令4)执行5)输入操作数到算术逻辑单元6)更新标志寄存器,数据输出到寄存器或内存第二节、内核处理机制一、Pipelining 使用多级流水线当前流水线单元处理一条操作指令并移入下一个环节时,当前单元马上接受上游传递的任务指令,而不是等待所有处理单元完成时,称为多级流水线技术(Pipelining)。
k级流水线处理一条指令的周期是k,n条指令的周期是k + (n - 1),一条指令执行k个时钟周期,二条指令需要k + 1个时钟周期,前一条指令执行完毕,跟随的指令处于流水线的最下游,n条指令的执行周期依此类推。
二、Super scalar 超标量体系结构当某级流水线处理指令需要1个以上时钟周期,则上游指令必须进入等待,使用多条流水线以便在同一级流水线的同一个时钟周期处理多条指令。
三、内存读取因为IO设备、CPU指令执行、系统总线之间的不同步,CPU执行单元等待操作数从内存中取出称为等待状态。
读内存数据的周期分解:1)将内存地址放入数据总线2)设定读标志为低位,以通知存储器准备数据3)存储器响应读标志,在指定地址取出数据放置到数据总线4)数据被CPU获取,恢复读标志的高位状态四、Cache memory CPU高速缓存利用CPU内置的一级、二级缓存,提高CPU指令访问内存操作数的效率,当请求的内存操作数位于L1或L2缓存时,CPU就无需从慢得多的RAM设备请求数据,称为缓存命中。