第3章 IA-32微处理器指令系统简介
- 格式:ppt
- 大小:2.12 MB
- 文档页数:2
IA-32 Intel®架构软件开发人员手册 卷3:系统编程指南(中文版-部分)前言现在开放源代码逐渐成为趋势的环境下,获取高水平的源代码的途径越来越容易,尤其是涉及操作系统的源代码,受到越来越多的有志于研究底层的开发人员的青睐。
然而操作系统(内核)源代码具有规模大、专业性强、涉及的知识面广的特点,大部分首次接触内核源代码的人感觉不少部分尤其是与硬件平台相关部分(任务切换、内存管理等方面)难以理解,而这些难以理解的部分却又往往是操作系统的核心部分。
对于造成操作系统代码难以理解的原因有多个方面,主有对操作系统若干理论、概念理解不深,这可以通过阅读操作系统相关书籍来弥补。
目前比较经典的操作系统书籍有多种,各有各的特色,有纯理论的,也有理论与实践相结合的。
“工欲善其事,必先利其器”在开始探究操作系统源代码之前,仔细深入的研究这些基本概念、基本理论是十分必要的。
然而这些还是不够的,除了理解操作系统概念理论之外,对于操作系统运行的硬件的了解也是非常必要的。
而目前缺乏x86平台权威资料,流行的教材都讲的比较基础,而与操作系统设计与开发方面相关的信息,讲得普遍比较少甚至少有涉及,而intel官方出的三卷手册就目前来讲是最全面、最权威的x86平台资料了,由于是官方版本是英文版,所以在很大程度上限制了它的流行,即使平时查阅相关资料时,也大都只是参考它的部分章节而对其全貌仍未了解。
这三卷各有特色,其中卷3主要是指针对与操作系统设计方面并鉴于目前情况,产生了首先将手册之卷3翻译为中文的念头,但是由于它篇幅很大(PDF版本有780页之巨)仅个人力量很难完成,所以借助于网络平台,召集大家共同分担完成,在此也非常感谢赵博士为大家提供了那么好的交流平台。
目前已经分配的翻译任务如下:第1章关于本手册第2章 系统架构概况 我(lijshu)基本已经译完,就是目前这个文件:-) 第3章 保护模式下的内存管理由sportsman 负责翻译第4章 保护机制 由sportsman 负责翻译第5章 中断和异常处理由wykr3879 负责翻译第6章 任务管理 由wykr3879 负责翻译第7章 多处理器管理由Timeless 负责翻译第8章高级可编程中断控制器由beyond 负责翻译第9章处理器管理与初使化由极速时空 负责翻译第10章 内存高速缓冲存储器控制 由engumen负责翻译其余的部分还没有落实,希望有兴趣、有精力的参加进来,让我们共同完成这个项目!由于翻译是一件非常不容易的工作,尤其是达到“信、达、雅”的地步更就难了,译稿只能尽最大能力保持准确把握原文的意思,但是由于每个人能力及对原文的理解不同,因此对于译稿肯定有很多有待商榷的地方,甚至是错误的地方,因此请大家指出来,便于进一步修改、完善译稿,以供大家飨用。
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设备请求数据,称为缓存命中。
IA-32指令简表IA-32指令共有10个部分:一般用途指令、x87浮点运算处理单元指令、x87浮点运算处理单元和SIMD状态管理指令、MMX指令、SSE指令、SSE2指令、SSE3指令、系统指令、64位模式指令、虚拟机扩展。
下表显示了各IA-32构架CPU支持各部分指令的情况:1. 一般用途指令一般用途指令执行基本的数据移动、算术运算、逻辑运算、程序流程和字符串操作,这些操作通常被程序员用来写运行于IA-32处理器上的应用程序和系统程序。
这些指令可以操作在内存中、通用寄存器中和标志寄存器中的数据,也可以是存储于内存、通用寄存器和段寄存器中的地址信息。
现代微机原理与接口技术·2·附录B IA-32指令简表·3·现代微机原理与接口技术·4·附录B IA-32指令简表·5··6·现代微机原理与接口技术2. x87浮点运算处理单元指令附录B IA-32指令简表·7·现代微机原理与接口技术·8·3. x87浮点运算处理单元和SIMD 状态管理指令以下为两个基于IA-32结构Pentium II 系列处理器的状态管理指令:4. MMX 指令四项扩展指令集被引入IA-32结构,使得IA-32处理器能够执行SIMD 操作。
这四项扩展分别是MMX 技术、SSE 指令、SSE2指令和SSE3指令。
MMX 指令可处理存储于内存、MMX 寄存器和通用寄存器中的打包的字节、字、双字或四字的整数操作数。
MMX 指令只能在支持附录B IA-32指令简表·9·现代微机原理与接口技术·10·5. SSE指令SSE指令代表了和MMX技术一起介绍的SIMD执行模式的一个扩展。
SSE指令只能在支持SSE的IA-32处理器上执行。
SSE指令可分为四个部分:5.1 SSE SIMD单精度浮点指令这些指令可以处理存储于MMX寄存器和内存中的打包的分等级单精度浮点数据。