Download presentation
Presentation is loading. Please wait.
1
第2章 Intel IA-32/Intel 64处理器 结构与原理
2
2.1 提高处理器的性能 2.1.1 问题的分析 衡量CPU的性能指标可以是单位时间CPU完成的指令数,其计算公式如下:
CPU性能 = CPU的主频×IPC 也可用CPU完成应用程序所需的总时间。其计算公式如下:: IPC:每时钟执行的指令条数。 CPI:每指令平均时钟数 思考:根据公式要提高CPU性能,可采用什么办法? CPU时间 = 程序的指令数×CPI 时钟频率 根据公式要提高CPU性能,可采用什么办法? 答:根据公式,要提高处理器性能,要么提高主频,要么提高每时钟的指令数
3
要提高主频→减少每个流水级的执行周期→减小每个流水级的任务量→将任务再分解→增加流水线深度
如何提高主频: 要提高主频→减少每个流水级的执行周期→减小每个流水级的任务量→将任务再分解→增加流水线深度 IA-32的流水线级数 型号 Pentium P6架构 Pentium 4 Core Nehalem 流水级数 5 12-13 20~31 14 16 主频MHz 66 200 2000~3600 2667 思考:流水线级数变多后,有没有副作用? 流水线级数变多后,有没有副作用? 答:有,当分支预测出现错误,清空流水线重新载入新的指令的代价变大。另外,功耗也随之变大
4
思考:从图上可以得到哪些结论? 20多年来,主频翻了近300倍、功耗翻了30多倍
随着主频上升,功耗上升迅速,拐点在Pentium处,Pentium 4达到最大 因此,要想处理器要想获得高性能,还是得从每时钟指令数下手,提高处理器的并行性,而这一并行性包括指令级并行性(Instruction-Level parallelism, 简称ILP)、数据级并行性(Data-Level Parallelism,简称DLP)和线程级并行性(Thread-Level Parallelism, 简称TLP)。 思考:从图上可以得到哪些结论?
5
2.1.2 提高处理器指令级并行性的技术 1.指令间的相关性
提高处理器指令级并行性的技术 如果各指令之间不存在相关性,那么它们在流水线中是可以并行执行的,这种指令间潜在的重叠就是指令级并行(Thread-Level Parallelism, ILP)。 1.指令间的相关性 (1)结构相关 所谓结构相关(也称为名相关)是指不同指令同时存取相同的寄存器或存储器,但这些指令间不存在数据流。 在冯·诺依曼存储结构中,数据和程序放在同一存储器,如果此时一条指令要读或写数据,而刚好取指单元要取指令,就出现结构相关
6
1.指令间的相关性 (2)数据相关 某条指令的操作数依赖前一条或前几条指令的运行结果,这就是所谓的数据相关。
① 写后读相关(RAW,Read After Write) A=B+C D=3*A // 在数据A上写后读 ② 读后写相关(WAR,Write After Read) A=B+C B=D*2 // 在数据B上读后写 ② 写后写相关(WAW,Write After Write) A=B+C A=D*2 // 在数据A上写后写 思考:C语言里的 i+=a 包含了哪些数据相关? 答:i+=2翻译成汇编是 mov ax, i add ax, 2 mov i, ax 可见这三条语句间存在写后读,读后写相关(注意ADD AX,2是先读AX中的数去运算,然后才是将结果写入AX 思考:C语言里的 i+=2 包含了哪些数据相关?
7
1.指令间的相关性 (3)控制相关 控制相关可以看作是对指令指针寄存器的RAW相关问题。
取指阶段需要读指令指针寄存器,而分支语句会在执行阶段计算出新的转移地址写入指令指针寄存器,于是当分支条件满足的时候,就出现下条指令读指令指针寄存器(取指阶段)早于分支语句写该寄存器(执行阶段)的情况。
8
2.超标量技术 所谓超标量是指处理器中含有多条流水线,每个时钟能够译码、发射、执行多条指令。显然,超标量技术提高了处理器的IPC,也进而减少了理想流水线CPI。在超标量流水线中,并行执行的流水线条数称为超标度。从Pentium到Ivy Bridge处理器的超标度为2~4。 I1 IF ID OF EX WB 思考:超标度为几? I2 IF ID OF EX WB I3 IF ID OF EX WB I4 IF ID OF EX WB 超标度为几? 答: 3 I5 IF ID OF EX WB I6 IF ID OF EX WB I7 IF ID OF EX WB I8 IF ID OF EX WB I9 IF ID OF EX WB
9
3. 动态执行技术的使用(P6架构开始) 乱序执行技术 乱序可解决什么问题? R=F-7 R=F-7 Q=D-E Q=D-E P=A*2
为了提高指令流的执行效率,乱序执行核心分析多条指令的数据相关性和资源可用性,然后在不损失数据完整性的前提下,采用能充分发挥多个处理部件并行工作的指令顺序来执行。这个指令顺序可能和原始程序的不一样。 乱序可解决什么问题? 非乱序执行演示 乱序执行演示 R=F-7 R=F-7 执行方向 执行方向 Q=D-E Q=D-E P=A*2 P=A*2 A=B+C A=B+C 四条指令,乱序节省了一个时钟周期 乱序能解决流水线中的数据相关问题 流水1 流水2 流水1 流水2
10
3. 动态执行技术的使用(P6架构开始) 分支预测 预测分支未来的方向,为处理器预先译码分支之后的指令提供依据 静态分支预测 动态分支预测
预测无条件转移指令发生分支 预测向前分支的条件转移指令不发生转移 预测向后分支的条件转移指令发生转移 动态分支预测 使用分支目标缓冲器BTB记录分支转移历史信息 BTB中缓存了先前执行过的分支语句的指令地址BIA,分支跳转的目的地址BTA,以及分支历史记录 取指时,同时检索L1 Cache和BTB 如最终分支结果与预测相符,则避免了流水线的停顿 如最终分支结果与预测不符合,那么将刷新BTB的有关记录,并进行分支误预测的恢复操作
11
3. 动态执行技术的使用(P6架构开始) 推测执行 寄存器重命名 在分支预测基础上,推测分支路径,并按推测执行。
一旦证实分支预测正确,已提前建立的“预测结果”立即变成“最终结果”并及时修改机器的状态。 寄存器重命名 如果两条指令只是寄存器名字相重,实际数据并不相关,可以对其中一条指令的换寄存器来解决。 寄存器重命名技术是在指令被译码成微代码时将IA指令使用的IA通用寄存器映射成微代码使用的内部寄存器。 用这种办法可以解决寄存器结构相关的问题。 这里总结一下流水线、超标量、分支预测以及乱序执行等都是为了提高指令级并行(ILP)
12
写后读 写后写 4. 分离Cache与指令配对 数据-代码分离式L1 Cache,符合MESI协议。 指令配对 下面两条指令是否可配对?
配对指令是可以同时进不同流水线的指令 配对的指令必须是简单指令 两条指令之间不可存在“写后读”或“写后写”这样的寄存器相关性 一条指令不能同时既包含位移量又包含立即数 带前缀(Jcc指令的OF除外)的指令只能出现在U流水中,因为Pentium的V流水只执行简单指令 浮点运算指令不能和任何指令配对(FCXH除外) 这里总结一下流水线、超标量、分支预测以及乱序执行等都是为了提高指令级并行(ILP) 下面两条指令是否可配对? MOV AX, 200 MOV CX, AX MOV AX, 200 MOV AX, 412 写后读 写后写
13
2.1.3 提高处理器数据级并行性的技术 1.多媒体SIMD指令扩展技术 不使用 SIMD指令 使用 SIMD指令
提高处理器数据级并行性的技术 1.多媒体SIMD指令扩展技术 for (int i=0;i<=MAX;i++) c[i]=a[i]+b[i]; 不使用 SIMD指令 128-bit Registers A[0] B[0] C[0] + A[1] B[1] C[1] not used 使用 SIMD指令 128-bit Registers A[3] A[2] B[3] B[2] C[3] C[2] + A[1] A[0] B[1] B[0] C[1] C[0] SIMD 单指令流多数据流 按照常规,该循环要循环MAX次,使用SSE3优化后,一个循环可以同时算4个数据,这样只要循环MAX/4次就可以了
14
4x doubles 8x floats 2x dqword 2x doubles 4x floats 1x dqword
AVX**** 1x dqword SSE4*** 16x bytes 8x words SSE** SSE2 SSE3 4x dwords 2x qwords 8x bytes 4x words MMX* 2x dwords 这个图如何看: MMX技术使用8个MMX寄存器,1个64位MMX寄存器封装1个QWord或2个dword 或4个word或8个byte的数据同时进行计算 SSE/SSE2/SSE3技术使用8个MMX寄存器,1个64位MMX寄存器封装1个QWord或2个dword 或4个word或8个byte的数据同时进行计算, 还可以使用16个XMM寄存器(8个SSE的,还有8个是64位模式扩展的),每个128位的XMM寄存器可以 封装1个DQWord或2个Qword或4个dword或8个word或16个byte或2个双精度浮点数据同时进行计算 SSE4使用使用16个XMM寄存器(8个原有的,还有8个是64位模式扩展的),每个128位的XMM寄存器可以 AVX技术可以使用16个XMM寄存器,每个128位的XMM寄存器可以封装1个DQWord或2个Qword或4个dword或8个word 或16个byte或2个双精度浮点数据同时进行计算; 还可以用16个YMM寄存器,每个256位的YMM可以封装2个DQWord或8个单精度浮点数或4个双精度浮点数同时进行计算。 57条MMX指令操作8个64位长的MMX寄存器内的紧缩字节(8个字节打包成一个64位长的数据)、字或双字整型数上执行SIMD 70条SSE指令处理在8个128位的XMM寄存器中的单精度浮点数和在MMX寄存器中的紧缩整数。高速缓存控制指令通过增加主存到Cache和处理器到主存的数据流,改善存储性能,SIMD浮点指令使处理器能同时执行4个浮点操作。 144条SSE2指令处理在XMM寄存器中的紧缩双精度浮点数和在MMX与XMM寄存器中的紧缩整数。 13条SSE3指令增强SSE, SSE2和x87FPU数学能力的性能。 54条SSE4指令主要増强了媒体、图像和3D工作的性能 AVX指令是在128位的SIMD指令的基础上通过VEX前缀扩展来获得的。使得Intel处理器具有256位向量处理能力。 1x qwords * MMX使用的是64位的 x87 浮点寄存器作为MMX寄存器; **SSE, SSE2和SSE3使用了新的128位的XMM 寄存器;也可用MMX寄存器 ***SSE4使用了新的128位的XMM寄存器,但是不使用MMX寄存器 ****AVX使用了新的256位的YMM 寄存器;也可用XMM寄存器,但是不使用MMX寄存器
15
2.融合图形处理单元GPU GPU在浮点运算、并行计算等计算方面可以提供数十倍乃至于上百倍于CPU的性能
图形核心具有12个新设计的EU(执行单元),它们包含更大的寄存器文件,用以提高并行性和复杂着色的执行效率 EU改进了并行分支技术来提高面对深度嵌套条件下的并行化的效率 图形核心无论在媒体处理还是3D方面因为提供了大量的固定功能的硬件支持,使得在相同的热能耗下,性能得以显著的提升。
16
2.1.4 提高处理器线程级并行性的技术 1. 超线程(Hyper-Threading, HT)技术,SMT
提高处理器线程级并行性的技术 1. 超线程(Hyper-Threading, HT)技术,SMT 允许物理上单个的处理器采用共享执行资源的方法同时执行两个或更多的分离代码流(线程) HT技术由单处理器上的2个或者多个逻辑处理器组成,每个逻辑处理器都有自己的IA-32结构状态(AS) 每个逻辑处理器都有自己的IA-32通用寄存器、段寄存器、控制寄存器、调试寄存器等 逻辑处理器共享的资源包括执行引擎和系统总线接口 AS 处理器核心 支持HT的IA-32处理器 2个逻辑处理器共享一个核 AS=IA-32结构状态 传统多IA-32处理器系统 每个处理器一个独立封装 如果两个线程一个整型运算一个浮点运算,则可获益,因为他们使用不同运算部件,可以并行执行 如果两个线程一个需要运算,一个需要I/O, 则可获益,因为需要I/O的线程会因为I/O请求而被挂起,而此时需要运算的线程干好可以利用运算器进行运算 问题: 如果在一个核内存在两个线程,一个需要I/O,一个需要运算器,谁的优先级高? 答:需要I/O的,因为该线程获得服务后马上就被挂起,这样可以将执行引擎让出来给另一个线程 如果两个线程要同一个共享资源,则线程切换代价小 SMT: Simultaneous multithreading
17
2. 多核(Multi-Core)技术,CMP
通过在一个物理封装中包含多个分离的完整执行核来提供硬件多线程能力 每个完整的执行核不仅有自己的AS,还拥有自己的执行引擎,总线接口与L2 Cache 。 结构上有支持HT技术的和不支持HT技术的多核结构 核之间有交叉开关、总线链接、环链路多种连接方式 众核(Many-Core)技术 大于32核的CPU 采用片上网络(NoC)互联较多 Intel采用双向环链接其第一个众核,61核的MIC 多核=2-10核 众核=32核以上 CMP, Chip multiprocessors
18
Intel的多核结构 Core 2 Duo处理器 Pentium D IA-32处理器 Pentium EE IA-32处理器 AS AS
执行引擎 Local APIC L2 Cache 总线接口 系统总线 Intel的多核结构 Pentium EE IA-32处理器 AS 执行引擎 Local APIC L2 Cache 总线接口 系统总线 Core 2 Duo处理器 AS 执行引擎 Local APIC L2 Cache 总线接口 系统总线 Core 2 DUO是原生双核,不支持HT技术 Core i7是原生四核,支持HT技术 SMT和CMT是为了提高线程级并行(TLB)
19
2.1.5 Intel 64 结构 (EM64T技术) 完全兼容IA-32指令集 Intel 64架构包括兼容模式和64位模式
64位模式下具有以下特性: 64位线性地址空间 最高支持40位物理地址空间 增加8个新的通用寄存器 增加8个新的流SIMD扩展(SSE, SSE2和SSE3) 64位宽的通用寄存器和指令指针寄存器 英特尔已将过去的EM64T技术改为Intel 64 Architecture 注意IA-64不是Intel 64 Architecture,IA-64是指采用EPIC技术的64位处理器安腾和安腾2系列(Itanium, Itanium 2 )
20
2.2 Core微结构的处理器 2.2.1 Core微结构 4 个14级流水线 兼容32位的64位设计 采用14级4流水超标量结构
是一个兼容IA-32结构的Intel 64结构微处理器; Core微结构从P6微结构中改进而来; 通用寄存器为64位宽,但主要应用其低32位。 连接存储器的外部数据总线宽度为64位,每次可同时传输8个字节; 外部地址总线宽度是36位~40位,故物理地址空间为64GB~1024GB(1TB)。
21
2.2.2 Core 2处理器内部结构示意图 采用两个Core微结构组成的多核结构微处理器
22
2.2.3 酷睿2处理器新技术 宽位动态执行(Wide Dynamic Execution)
着眼于提高每时钟周期处理的指令数,改善执行时间和能源效率 P6架构 Core架构 3个译码器 3条流水线 同时完整的取、发射、执行3条指令 4个译码器 4条流水线 同时完整的取、发射、执行4条指令
23
宽位动态执行 宏融合(macrofusion)技术能够在译码期间将常见的指令对组合到一个单独的微代码中(Micro-op)
Instruction Queue add ecx, 1 mov [mem1], ecx mov eax, [mem1] cmp eax, [mem2] jge label for (int i=0; i<100000; i++) { … } Cycle 1 add ecx, 1 dec0 mov [mem1], ecx dec1 此页举例没有宏融合的情况 5条语句需要2个周期完成 mov eax, [mem1] dec2 cmp eax, [mem2] dec3 Cycle 2 jge label dec0
24
宽位动态执行 宏融合(macrofusion)技术能够在译码期间将常见的指令对组合到一个单独的微代码中(Micro-op)
Instruction Queue 宽位动态执行 宏融合(macrofusion)技术能够在译码期间将常见的指令对组合到一个单独的微代码中(Micro-op) add ecx, 1 mov [mem1], ecx mov eax, [mem1] cmp eax, [mem2] jae label for (unsigned int i=0; i<100000; i++) { … } Cycle 1 add ecx, 1 dec0 mov [mem1], ecx dec1 此页举例使用宏融合的情况 5条语句只需要1个周期完成,因为cmp指令和jae指令进行了宏融合 注意解释为什么要将int 改为unsigned 因为int型属于有符号数,所以大于等于转移要用jge指令,而unsigned指令是表示无符号数,无符号数的大于等于转移指令是jae指令,而Core结构中CMP指令不能和jge指令融合 TEST 可以融合所有的条件跳转指令. CMP 只能融合下列条件跳转指令(Core中) JA (and its equivalent, JNBE) JAE (equivalent JNB) JE (JZ) JNA (JBE) JNAE (JC or JB) JNE (JNZ) In this case, CMP will be fused with JAE while not with JGE mov eax, [mem1] dec2 cmpjae eax, [mem2], label dec3
25
宽位动态执行 微代码融合(Micro-op fusion)技术能在微代码执行前将译码自同一个x86指令的几个常见微代码对融合成一个微代码
u-ops of a Store “mov [mem1] ,edx” sta mem1 st [mem1] , edx std [mem1] ,edx Sta是获取地址,std是存数据,他们是mov edx, [mem1]指令译码出来的两个微代码,由于它们基本上都是配对出现,所以将它们融合成一个微代码st 这两个微代码是有数据相关的,所以它们需要两个时钟周期分别进同一个流水线,但融合成一个微代码后只需要一次进流水线了 微代码融合有效地“加宽”了流水线
26
智能功效管理(Intelligent Power Capability)
超细粒度功耗控制能够只对处于工作状态的部件提供电源,而关闭非工作部件的电源供应,从而有效降低功耗。 分离总线技术能够使总线宽度动态适应数据宽度的需要,对无效的信息位使其进入低电压状态,从而进一步降低功耗。 功效管理平台技术通过调整散热风扇运作模式,从外部降低处理器温度。
27
Intel 智能内存访问(Intel® Smart Memory Access)
µProc 60%/年. (2X/1.5年) DRAM 9%/年. (2X/10年) 1 10 100 1000 1980 1981 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 CPU 1982 CPU-存储器性能差距每年增长50% 性 能 该新技术就是为了弥补存储器性能和CPU性能之间的巨大差距 CPU 目标 WHEN – 确信数据能在最早的时候被取出并准备好 WHERE – 确信要使用的数据靠CPU最近 L1Cache L2Cache L3Cache Memory
28
Intel 智能内存访问(Intel® Smart Memory Access)
内存消歧技术利用装载(load)数据指令和存储(store)数据指令之间的乱序执行来提高推测执行部件的效率,其原则是尽量将load指令提到它前面不冲突的store指令之前执行。(解决WHEN的问题) Memory Data W Store1 Y Load2 Y Data Z Store3 W 内存消歧技术可以使需要用的数据被提前装载,以便能快速使用。一旦预测失败,内存消歧技术能检测到地址冲突,并重新装载数据,重新执行该Load操作,不过这种情况出现的概率很小。 Load4 X Data Y 没有内存消歧技术时Load4只能等待前面所有Store结束 这样做究竟有什么好处? 下面来看有内存消歧技术的情况 先乱序 Data X
29
Intel 智能内存访问(Intel® Smart Memory Access)
高级预取技术确保被使用的数据已经位于最靠近能获得最小内存延迟的地方。(解决WHERE问题) 用独立于流水线的预测器预测将来要用的数据,提前取到Cache中 L1D是3 clk的延迟和1 clk的通过时间; L2是14和2 clk Cache失效延迟 L1 失效后去读 L2 ~ 10 cycles L2 失效, 存取存储器 ~300 cycles (server/FBD) L2 失效, 存取存储器 ~165 cycles (Desk/DDR2) Cache 带宽 Cache带宽 ~ 8.5 bytes/cycle 存储带宽 桌面系统 ~ 6 GB/sec/socket (linux) 服务器 ~3.5 GB/sec/socket 高级预取技术 :智能内存访问中为每一个L1 数据Cache配备了2个数据预取器,为L1指令Cache配备了一个指令预取器,并为L2 Cache也配备了2个预取器。这些预测器同时检测多个流,确保内核执行所需的数据能及时的存在于L1 Cache中,同时,L2 Cache的预测器分析内核的存取,以确保内核将来执行需要的数据能被保存在L2 Cache中。 问题:高级预取和内存消歧有什么区别? 答:内存消歧是根据指令的分析,进行指令的乱序执行 高级预取是分析数据流,预测将要使用的数据,将其提前读取到cache行。类似与分支预测那样,使用预测的结果来决定那些数据提前读取到cache行。(分支预测是通过预测结果决定哪个指令进流水线)
30
Intel高级智能Cache (Intel® Advanced Smart Cache) -带来了新的双核结构
AS 执行引擎 Local APIC L2 Cache 总线接口 前端总线 AS AS 执行引擎 执行引擎 Local APIC Local APIC Cache Line L2 Cache Cache Line L2 Cache 如果Cache不是共享的,如果两个核使用同一个数据则需要在前端总线中进行传递,增加了前端总线的负担,而共享cache的连个核不存在这个问题 总线接口 总线接口 前端总线
31
2.3 SandyBridge微结构的处理器 2.3.1 SandyBridge微结构
32
2.3.2 SandyBridge的环状互连结构 SandyBridge采用片上系统设计,提供了一个高带宽双向环状总线来连接IA核与非核中不同的子系统 一个系统代理 、图形单元(GT)、最后一级Cache 环形总线由四条独立的环组成 数据环(DT)、请求环(QT)、响应环(RSP)、侦听环(SNP) SandyBridge的Graphics部分主要包含了 命令流处理器(Command Streamers)、媒体处理器(Media Processing)、多格式媒体解码器(Multi-Foumat Codec)、执行单元(EU)、统一执行单元阵列(Array of Unified Execution Units)、媒体取样器(Media Sampler)、纹理采样器(Texture Sampler)以及指令缓冲等。
33
2.4 IA-32处理器基本执行环境 2.4.1 IA-32处理器的工作模式
实地址模式 -开机进入的模式 - 与8086/8088兼容,但可以处理32位数据 - 1MB内存空间,分段管理,所有程序全在0 (核心)级 - MS-DOS运行在此模式下,PC机开机首先进入的也 是该模式 - 对内存和程序甚至操作系统没有任何保护能力 保护模式-最主要的工作模式 - 支持多任务操作,并保护每个任务的数据和程序 - 存储器采用虚拟地址空间、线性地址空间和物理地址空间三种方式来描述,具有存储保护功能 - 虚拟地址空间64TB(246) - 4级管理,可以使用分页或分段技术管理内存 - Windows、Linux操作系统均运行在该模式下 在Pentium之后的X86,软件被分为4级,0级最高,可以执行所有指令,做所有操作,3级最低,只能使用常规指令(非特权指令),应用程序一般在3级。级别低的程序不能存取级别高的内存或I/O区域的数据,以便起到保护作用
34
- 在保护模式下可以同时模拟多个8086处理器的工作
虚拟8086模式(V86模式)-怀旧的感觉 - 在保护模式下可以同时模拟多个8086处理器的工作 比较项目 实地址模式 虚拟8086模式 内存管理 分段管理 既分段又分页 存储空间 1MB 每个8086程序任务寻址1MB,总寻址空间4GB 多任务 不支持 支持,虚拟8086模式是IA-32保护模式中多任务的一个任务 系统管理模式-“休闲”时光 - 为操作系统和正在运行的应用程序提供透明的电源管理和系统安全平台功能 - 进入本模式系统将转到一个独立的地址空间运行,并保存当前程序或任务的基本环境 ”待机“”休眠“都在此模式 IA-32e模式(支持Intel 64 Architecture的处理器才有)
35
工作模式的转换 此图只简单介绍,不必要详细讲述
36
2.4.2 IA-32处理器在实地址模式下的存储管理 1. IA-32的基本数据类型
IA32的基本数据类型包括Byte, Word, Doubleword, Quadword和Double Quadword 1) 整型数据类型 包括无符号数和有符号数,其中有符号数以2的补码形式表示,最高位为符号位,1表示负数 类 型 位数 无符号数范围 有符号数范围 字节 8 0~255 -128~+127 字 16 0~65535 -32768~+32767 双字 32 0~232-1(4G-1) -231~+231-1 四字 64 0~264-1(16T-1) -263~+263-1
37
类型 符号位数 有效位数 阶码位数 数据范围 单精度浮点数 1 24 8 双精度浮点数 53 11 扩展精度浮点数 64 16
2) 浮点数据类型 最高位为符号位,接下来是有效数和阶码,有效数给定了数的有效位数,决定数的精度;阶码决定数据范围。 类型 符号位数 有效位数 阶码位数 数据范围 单精度浮点数 1 24 8 1.18×10-38 ~ 3.40 ×1038 双精度浮点数 53 11 2.23×10-308~ 1.79×10308 扩展精度浮点数 64 16 3.37× ~ 1.18×104932 有效数据(尾码)在规格化的时候都会被转换为1.xxxxx*2^3的形式,1.这一位被隐藏,尾码只保存XXXX,所以24位有效数据只需要23位来存储。
38
指针用于定位存储单元的地址,包括近指针和远指针 16位模式下
3) 指针数据类型 指针用于定位存储单元的地址,包括近指针和远指针 16位模式下 近指针为段内16位有效地址 远指针包括16位段首地址和16位段内有效地址 32位模式下 近指针为段内32位有效地址 远指针包括16位段选择器和32位段内有效地址 64位模式下 近指针为64位有效地址 操作数是32位时,远指针包括16位段选择器和16位段内有效地址 操作数是32位时,远指针包括16位段选择器和32位段内有效地址 操作数是64位时,远指针包括16位段选择器和64位段内有效地址
39
4) 位域(field)数据类型 是一个连续的二进制位序列,可以从存储器任何一个字节的任何一位开始。可包含32位数据。 5) 串数据类型 是一个连续的位、字节、字或双字序列,位串可以从存储器任何一个字节的任何一位开始,并可包含232-1位,字节、字或双字串可包含232字节。 6) BCD和压缩BCD数据类型 用4位无符号二进制数表示十进制的0~9。压缩BCD每个字节包含二位十进制数,非压缩BCD数每字节的低4位表示一位十进制数,高4位为0。
40
以字节为单位编址,即一个字节数据占一个存储单元
2.存储单元的地址和内容 以字节为单位编址,即一个字节数据占一个存储单元 数据采用小端存放方式 以字、双字、四字和双四字为单位存储数据时,分别占相邻2个、4个、8个和16个连续字节单元,其最低字节的地址为该数据地址。 地址一般采用边界对齐,如果边界不对齐,IA-32会采用2倍于边界对齐时的总线周期来完成读写操作,有些双四字的操作甚至会引起一般性保护异常。 问题:什么是小端存放方式 答:高位字存放在高地址区,低位字存放在低地址区 高8位存放在高地址字节,低8位存放在低地址字节,高位字存放在高地址区,低位字存放在低地址区 问题:采用边界对齐的时候,字,双字,四字和双四字的地址特点是什么?假如一个数有K字节,则其地址应该是怎样的? 答:字到双四字的地址分别是偶数地址,4的倍数,8的倍数和16的倍数。K字节数据的地址特点是地址是K的倍数.
41
存储单元的地址和内容 12H 34H 56H 78H 9AH BCH DEH FFH 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0000H地址上, 字节数据是12H 字数据是3412H 双字数据是 H 四字数据是FFDEBC9A H
42
3. 实地址模式存储器寻址 在此模式下,IA-32可以理解成是一个可处理32位数据的高速的8086。 a. 存储器地址的分段 解决16位寄存器表示20位地址的问题 段是最大长度为64KB的连续的内存储器块 物理地址 每个存储单元的20位实际地址,有唯一性,访问主存时必须用物理地址 逻辑地址 每个存储单元的地址用两部分表示: 段基址(段首址的高16位) 偏移量 (段内某单元相对段首址的地址差,也称为有效地址EA)
43
几个不同的逻辑段地址在物理地址上是可重叠的
物理地址=段基址×16+偏移量 书写形式:段基址:偏移量 16位段地址 : 16位段内偏移 (左移四位) 16位段地址 0000 + 16位段内偏移 = 20位物理地址 由于不同的逻辑段可能映射到同一个物理段,所以用汇编采用直接地址访问的时候有可能是很危险的。 6417H∶0100H 6417H×10H H = 64170H H = 64270H 几个不同的逻辑段地址在物理地址上是可重叠的
44
2.4.3 IA-32处理器中的寄存器 数据寄存器 通用寄存器 地址指针寄存器 段寄存器 变址寄存器 基本寄存器 指令指针寄存器 标志寄存器
控制寄存器 系统级寄存器 系统地址寄存器 调试与测试寄存器 浮点寄存器
45
1.通用寄存器 16位名称 32位名称 AH AL BH BL CH CL DH DL SP BP DI SI AX BX CX DX SP BP DI SI EAX EBX ECX EDX ESP EBP EDI ESI 累加器 基址变址 计数 数据 堆栈指针 基址指针 目的变址 源变址 高16位扩展 16位 32位 AX、BX、CX、DX、SP、BP、DI、SI分别是EAX、EBX、ECX、EDX 、ESP、EBP、EDI、ESI的低16位 AL、BL 、CL、DL分别是AX、BX、CX、DX的低八位 AH、BH 、CH、DH分别是AX、BX、CX、DX的高八位
46
1.1 通用数据寄存器 EAX 累加器存放操作数和结果,乘除运算、I/O指令中特指 EBX 基址寄存器 查表转换和间接寻址时存放基址 ECX 计数寄存器 串操作和循环中做计数 EDX 数据寄存器 乘除运算、I/O指令中特指 可以32位、16位或8位形式访问,例如, EAX可使用16位的AX,也可以使用8位的AH、AL
47
1.2 通用地址寄存器 ESP 堆栈指针寄存器,存放栈顶地址 EBP 基址指针寄存器,存放栈段基地址 ESI 源变址寄存器 EDI 目的变址寄存器 存放地址的偏移量,也可存放操作数, 但只能以32位或16位为单位访问 如:ESI可以使用16位的SI
48
1.3 64位模式下的通用寄存器
49
在64位模式下,FS, GS无效,CS, DS, ES, SS均指向基地址为0的“段”。
2.段寄存器 …… 堆栈段 数据段 附加段 代码段 2.1段寄存器介绍 CS 代码段寄存器 DS 数据段寄存器 SS 堆栈段寄存器 ES 附加段寄存器 FS、GS 附加段寄存器 一个完整的程序 段寄存器均为16位的寄存器 用于存储器寻址,存放段的开始地址 在64位模式下,FS, GS无效,CS, DS, ES, SS均指向基地址为0的“段”。
50
2.2段寄存器与段 IA-32的6个16位的段寄存器,专门存放段基地址: 代码段存放当前程序的指令代码 数据段存放程序涉及的源数据或结果 堆栈段是以“先入后出”为原则的数据区 附加段是辅助数据区,存放串或其他数据 用户可以同时使用6个段,段间可以邻接、部分重叠、 重叠或不相邻,但注意,段的实体(被实际使用的段空间)是不能重叠的。
51
段寄存器和相应存放偏移地址的寄存器之间的默认组合
默认段寄存器 16位偏移 32位偏移 代码段 CS IP EIP 数据段 DS BX、SI、 DI、一个8或16位数 EAX、EBX、ECX、EDX、 EDI、 ESI、一个8或32位数 堆栈段 SS SP或BP ESP或EBP 附加段 ES FS GS DI 无默认 EDI(用于串指令)
52
2.3 关于堆栈与堆栈段 堆栈是内存中以字为单元的“先入后出”、最大空间为64KB的存储区域,采用自底向上生成堆栈,栈底地址大于栈顶地址 栈区最高地址-1的单元为栈底,最后进栈数据所对应的地址单元为栈顶 SS指向栈的起始单元(地址最小的单元) SP寄存器动态跟踪栈顶位置,初始化时SP的值为堆栈的长度,即指向栈底+2单元 将数据送入堆栈叫压栈,从栈中取出数据叫弹出,均以字(16位或32位)为单位
54
EIP 指令指针寄存器:即程序计数器,指向下一条指令在代码段中的偏移量
3.指令指针寄存器 EIP 指令指针寄存器:即程序计数器,指向下一条指令在代码段中的偏移量 高16位扩展 16位的IP 32位指令指针寄存器EIP 64位模式下,扩展高32位成为64位RIP 高32位扩展 32位的EIP 64位指令指针寄存器RIP
55
4.标志寄存器 EFLAGS 标志寄存器( 程序状态字寄存器PSW ):记录系统运行中的各种状态 和信息。由各种标志位构成,反映运算后的结果特征,将影响某些指令(如条件转移指令)的执行。
56
8086/8088程序状态寄存器(标志寄存器) b b8 b b0 OF DF IF TF SF ZF AF PF CF 符号 名称 值为“1”的条件 CF 进位标志 加/减法时产生进位/借位 OF 溢出标志 运算结果超出有符号整数能表示的范围 ZF 零标志 运算结果为0时 SF 符号标志 运算结果的最高位为“1”时 AF 辅助进位标志 运算时半字节(b3)产生进位/借位 PF 奇偶标志 操作结果低8位为“1”的位数为偶数时 DF 方向标志 串操作中地址指针向低地址方向移动 IF 中断允许标志 允许CPU响应可屏蔽中断请求时 TF 跟踪标志 CPU处于单步执行的工作方式
57
思考题:以下的几个4位十六进制数相加,会使得8088状态寄存器的以下几位为什么值?
8000H + 0000H C000H + 8000H 4008H + 8010H 0808H C000H + C808H CF PF AF ZF SF OF 1 1 1 1 有符号数是用补码表示,C000H实际上是-4000H也就是-16384,C000H+C000H=8000H加上进位,有符号数不考虑进位标志,所以运算的结果就是有符号数的最小值-32768
58
注意: 进位标志CF是表示无符号数是否超出范围,如CF=1,运算结果仍然正确; 溢出标志表示的是有符号数运算结果是否超出范围,超出范围则运算结果已经不正确; 处理器对两个操作数进行运算的时候是按照无符号数求得结果,并相应设置CF,根据是否超出有符号数的范围设置OF; 对于程序员,如果做无符号运算,应该关心CF,做有符号运算应该关心OF。
59
IA-32 标志寄存器EFLAG 这部分同8088 符号 名称 值为“1”的条件
保 留 ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF 1 CF 31… 符号 名称 值为“1”的条件 IOPL IO特权位 其值表示该任务使用的I/O操作的特权级 00为最高的核心级,11是最低的用户级 NT 嵌套标志 当前任务嵌套在另一个任务中时 RF 恢复标志 DBUG调试时忽略下一条指令遇到的断点 VM 虚拟8086模式 从保护模式进入到虚拟8086模式 AC 对齐检查 数据访问允许对齐检查 VIF 虚拟中断位 允许V86扩展或允许保护模式虚拟中断 VIP 虚拟中断未决位 有未决的虚拟中断 ID 标识位 对它的读写表明处理器支持CPUID 重点介绍IOPL VM AC 其他不作详解
60
当机器复位的时候CS=FFFFH,EIP, DS, ES, SS, FS, GS以及EFLAGS寄存器被清零。因为复位之后CS:EIP= FFFF: ,因此机器复位或开机后,都会自动从这个地址开始取指令,这里应该是BIOS的第一条指令。
61
时钟 0 1 2 3 4 5 6 7 8 结构相关引出分离缓存 返回 取指 译码 执行 第1条指令 第2条指令 第3条指令 第4条指令 ……
时钟 第1条指令 第2条指令 第3条指令 第4条指令 …… 回写 存储 返回
62
突发数据传输(一次地址,多次连续的数据传输)
返回
Similar presentations