1 / 103

第二章 计算机指令集结构

第二章 计算机指令集结构. 引言. 计算机的指令集结构也称为 指令系统 ,它是硬件机器所支持的 全部指令集合 ,它是机器语言程员所看到的机器的最主要的属性之一。 指令集结构设计的最基本问题是 软硬件划分 。 指令集结构设计 包括确定 指令格式 、 类型 、 操作 以及 操作数的访问方式 等。. 2.1 指令集结构的分类. 根据五个因素对计算机指令集结构进行分类:. (1) 在 CPU 中操作数的存储方法 (2) 指令中显式表示的操作数个数 (3) 操作数的寻址方式 (4) 指令集所提供的操作类型 (5) 操作数的类型和大小.

jihan
Download Presentation

第二章 计算机指令集结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二章 计算机指令集结构

  2. 引言 计算机的指令集结构也称为指令系统,它是硬件机器所支持的全部指令集合,它是机器语言程员所看到的机器的最主要的属性之一。 指令集结构设计的最基本问题是软硬件划分。 指令集结构设计包括确定指令格式、类型、操作以及操作数的访问方式等。

  3. 2.1 指令集结构的分类 根据五个因素对计算机指令集结构进行分类: (1) 在CPU中操作数的存储方法 (2) 指令中显式表示的操作数个数 (3) 操作数的寻址方式 (4) 指令集所提供的操作类型 (5) 操作数的类型和大小 CPU中操作数的存储方法,是各种指令集结构之间最主要的区别所在。

  4. 2.1 指令集结构的分类 1. CPU中用来存储操作数的存储单元主要有: • 堆栈 • 累加器 • 寄存器/存储器

  5. 2.1 指令集结构的分类 寄存器/存储器方式又根据操作数的来源不同,又可进一步分为: • 寄存器-存储器结构(RM结构) (操作数可以来自存储器 ) • 寄存器-寄存器结构(RR结构) (所有操作数都是来自通用寄存器组) RR结构也称为load-store结构,这个名称强调只有load指令和store指令能够访问内存。

  6. 2.1 指令集结构的分类 2. 指令中的操作数可以显式给出,也可以隐式地给出。 显式给出:用指令字中的操作数字段给出 隐式给出:使用事先约定好的存储单元

  7. 3. CPU对操作数的不同存取方式

  8. CPU提供的暂存器 每条ALU指令显式表示的操作数个数 运算结果的目的地 访问显式操作数的过程 堆栈 0 堆栈 Push/Pop 累加器 1 累加器 Load/Store累加器 寄存器/存储器 2/3 寄存器或存储器 Load/Store寄存器或存储器 2.1 指令集结构的分类

  9. 2.1 指令集结构的分类 例: 表达式C=A+B在4种类型指令集结构上的代码。假设:A、B、C均保存在存储器单元中,并且不能 破坏A和B的值。

  10. 指令集结构类型 优点 缺点 堆栈型 是一种表示计算的简单模型;指令短小。 堆栈不能被随机访问,从而很难生成有效代码。同时,由于堆栈是瓶颈,所以很难被高效地实现。 累加器型 减小了机器的内部状态;指令短小。 由于累加器是唯一的暂存器,这种机器的存储器通信开销最大。 寄存器型 是代码生成最一般的模型。 所有操作数均需命名,且显式表示,因而指令比较长。 2.1 指令集结构的分类 三种类型指令集结构的优缺点

  11. 2.1 指令集结构的分类 3. 通用寄存器型指令集结构的分类 早期的计算机中采用堆栈指令集结构和累加器指令集结构比较多,但现代CPU,通用寄存器型指令集结构已成为指令集结构的主流,原因: 1. 通用寄存器型指令集结构的主要优点 (1) 使编译器有效地使用寄存器; (2) 在表达式求值方面,比其它类型指令集结构 具有更大的灵活性;

  12. 2.1 指令集结构的分类 (3) 寄存器可以用来存放变量。 ◆ 减少存储器的通信量,加快程序的执行速度。 (因为寄存器比存储器快) ◆ 可以用更少的地址位来寻址寄存器,从而可 以有效改进程序的目标代码大小。

  13. 2.1 指令集结构的分类 4. CPU需要设置多少个寄存器呢? 主要由编译器使用寄存器的情况来决定 • 为表达式求值保留一些寄存器 • 为传递参数保留一些寄存器 • 用剩下的寄存器来保存变量

  14. 2.1 指令集结构的分类 5. 两种主要的指令特性能够将通用寄存器指令集结构(GPR)进一步细分 (1) ALU指令到底有两个或是三个操作数? ◆ 有三个操作数的指令:两个源操作数一个结果操作数 ◆ 有两个操作数的指令:一个操作数既作为源操作数,也作为结果操作数 (2) 在ALU指令中,有多少个操作数可以用存储器来寻址,也即有多少个存储器操作数? 一般来说,ALU指令有0~3个存储器操作数。

  15. 6. ALU指令中操作数个数和存储器操作数个数的典型组合

  16. 2.1 指令集结构的分类 7. 通用寄存器指令集结构进一步细分为三种类型: • 寄存器 --- 寄存器型(R-R:register-register) • 寄存器 --- 存储器型(R-M:register-memory) • 存储器 --- 存储器型(M-M:memory-memory) 8. 常见的三种通用寄存器型指令集结构的优缺点: 注:表中 ( m, n ) 的含义是, 指令的 n 个操作 数中有 m 个存储器操作数。

  17. 2.2 寻址技术 寻址方式是指令对操作数的访问方式, 在一个计算机系统中,机器语言的寻址方式通常有多种. • 在通用寄存器指令集结构中,一般是利用寻址方式指明指令中的操作数是一个常数、一个寄存器操作数,或是一个存储器操作数。 • 当前通用寄存器结构的指令集结构中所使用的一些寻址方式

  18. 寻址方式 指令实例 含 义 寄存器寻址 Add R4 , R3 Regs[R4]←Regs[R4]+Regs[R3] 立即值寻址 Add R4 , #3 Regs[R4]←Regs[R4]+3 偏移寻址 Add R4 , 100(R1) Regs[R4]←Regs[R4]+Mem[100+Regs[R1]] 寄存器间接寻址 Add R4 , (R1) Regs[R4]←Regs[R4]+Mem[Regs[R1]] 索引寻址 Add R3 , (R1 + R2) Regs[R3]←Regs[R3]+Mem[Regs[R1]+Regs[R2]] 直接寻址或绝对寻址 Add R1 , (1001) Regs[R1]←Regs[R1]+Mem[1001] 存储器间接寻址 Add R1 , @(R3) Regs[R1]←Regs[R1]+Mem[Mem[Regs[R3]]] 自增寻址 Add R1 , (R2)+ Regs[R1]←Regs[R1]+Mem[Regs[R2]] Regs[R2]←Regs[R2]+d 自减寻址 Add R1, -(R2) Regs[R2]←Regs[R2]-d Regs[R1]←Regs[R1]+Mem[Regs[R2]] 缩放寻址 Add R1 , 100(R2)[R3] Regs[R1]←Regs[R1]+Mem[100+Regs[R2]+Regs[R3]*d]

  19. 2.2 寻址技术 寄存器寻址: 变量值在寄存器中。 立即值寻址: 常量访问 偏移寻址: 访问局部变量 寄存器间接寻址: 用指针访问变量(指针值在寄存器中) 索引寻址: 数组访问 直接寻址或绝对寻址: 静态变量访问

  20. 2.2 寻址技术 存储器间接寻址: 用指针访问变量(指针值在存储器中) 自增寻址: 循环中的递增变量(遍历数组),有时用于实现栈结构, 自减寻址: 循环中的递减变量(遍历数组),有时用于实现栈结构, 缩放寻址: 数组访问

  21. 2.2 寻址技术 采用多种寻址方式可以显著地减少程序的指令条数,但可能增加计算机的实现复杂度以及指令的CPI。

  22. 3. 寻址方式使用情况统计结果 (VAX指令集结构的机器:gcc、Spice和Tex 基准程序) 结论:立即值寻址方式和偏移寻址方式的使用频率十分高。

  23. 2.2 寻址技术 4. 偏移量的取值范围 在load-store结构的机器(Alpha)上运行SPEC CPU2000基准程序

  24. x轴的标记是对偏移量大小进行log2(·)运算所得,也就是偏移量字段的位数。

  25. 2.2 寻址技术 结论: ◆ 程序所使用的偏移量大小分布十分广泛,需要使用不同的偏移量才能对其进行访问; ◆ 较小的偏移量和较大的偏移量均占有相当大的比例; ◆ 将偏移量字段的大小设置为12~16位。这种长度可以支持上述75%~99%基于偏移寻址方式的数据访问中偏移量大小的表示。

  26. 5. 立即数寻址方式 立即数寻址方式的使用频度 大约 1/4 的load指令和ALU指令采用了立即数寻址。

  27. 不同立即值大小的使用分布情况

  28. 结论: • 最常用的是较小的立即数; • 有时也会用到较大的立即数(主要是用于地址计算)。 • 在指令集结构设计中,至少要将立即数的 大小设置为8~16位。 • 在VAX机(支持32位立即数)上做过类似的统计,结果表明20%~25%的立即数超过16位。

  29. 2.3 指令集结构的功能设计 1. 指令集结构的功能设计 • 确定软、硬件功能分配,即确定哪些基本功能应该由硬件实现,哪些功能由软件实现比较合适。 2. 在确定哪些基本功能用硬件来实现时,主要考虑 3 个因素:速度、成本、灵活性 • 硬件实现的特点 速度快、成本高、灵活性差 • 软件实现的特点 速度慢、价格便宜、灵活性好

  30. 2.3 指令集结构的功能设计 3. 对指令集的基本要求 完整性、规整性、高效率、兼容性 • 完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令集所提供的指令足够用。 • 要求指令集功能齐全、使用方便 • 下表为许多指令集结构都包含的一些指令类型 • 前4类属于通用计算机系统的基本指令 • 对于最后4种类型的操作,不同指令集结构的支持大不相同

  31. 操作类型 实 例 算术和逻辑运算 整数的算术和逻辑操作:加、减、与、或等。 数据传输 Load/Store (MOV) 控制 分支、跳转、过程调用和返回、自陷等。 系统 操作系统调用、虚拟存储器管理等。 浮点 浮点操作:加、乘等。 十进制 十进制加、十进制乘、十进制到字符的转换。 字符串 字符串移动、字符串比较、字符串搜索等。 图形 象素操作、压缩/解压操作等。 2.3 指令集结构的功能设计

  32. 2.3 指令集结构的功能设计 规整性:主要包括对称性和均匀性。 • 对称性:所有与指令集有关的存储单元的使用、操作码的设置等都是对称的。 例如:在存储单元的使用上,所有通用寄存器都要同等对待。在操作码的设置上,如果设置了A-B的指令,就应该也设置B-A的指令。 • 均匀性:指对于各种不同的操作数类型、字长、操作种类和数据存储单元,指令的设置都要同等对待。 例如:如果某机器有5种数据表示,4种字长,两种存储单元,则要设置5×4×2=40种同一操作的指令。 高效率:指指令的执行速度快、使用频度高。

  33. 2.3 指令集结构的功能设计 2. 一种指令集结构中的指令到底要支持哪些类型的 操作? 这就是指令集结构功能设计的基本问题。 两种截然不同的方向: ◆ 复杂指令集计算机(CISC) 强化指令功能,实现软件功能向硬件功能转移。 ◆ 精简指令集计算机(RISC) 尽可能地降低指令集结构的复杂性,以达到简化实现,提高性能的目的。 是当今指令集结构功能设计的一个主要趋势。

  34. 2.3 指令集结构的功能设计 2.3.1 CISC计算机指令集结构的功能设计 • CISC的含义是复杂指令集计算机(Complex Instruction Set Computer) 起源于1964年的IBM360系列机 以后有DEC公司的PDP-11、VAX11/730、VAX11/750、VAX11/780 到九十年代IBM390系列机 微机方面有Intel 80x86, Motorola 68020等

  35. 2.3 指令集结构的功能设计 CISC的主要特点: 1)指令系统复杂,表现在: 指令数多,一般大于100条 寻址方式多,一般大于4种 指令格式多,一般大于4种 2)绝大多数指令需要多个机器时钟周期方可完成 3)各种指令都可访问内存 4)采用微程序控制 5)有专用寄存器 6)难以进行优化编译

  36. 2.3 指令集结构的功能设计 CISC结构追求的目标: 强化指令功能,减少程序的指令条数,以达到 提高性能的目的。 增强指令功能主要是从如下几个方面着手: 一、面向目标程序增强指令功能 • 提高运算型指令功能 • 提高传送指令功能 • 增加程序控制指令功能  使得目标程序中多条指令的功能由一条指令完成

  37. 2.3 指令集结构的功能设计 例如:循环在程序中占有相当大的比例,所以在指令上提供专 门的支持。 • 循环控制部分通常用3条指令完成: • 一条加法指令 • 一条比较指令 • 一条分支指令 • 设置循环控制指令,用一条指令完成上述3条指令的功能。 一般循环程序的结构

  38. 2.3 指令集结构的功能设计 二、面向高级语言的优化实现来改进指令集 (缩小高级语言与机器语言的语义差距) 高级语言与一般的机器语言的语义差距非常大,为高级语言程序的编译带来了一些问题。 (1)编译器本身比较复杂。 (2)编译生成的目标代码比较难以达到很好的优化

  39. 2.3 指令集结构的功能设计 1.增加对高级语言和编译系统支持的指令功能 ◆ 对源程序中各种高级语言语句进行使用频度的统计与分析,对于使用频度高的语句,可以设置专门的指令或采取措施增加相应指令的功能,以提高其编译速度和执行速度。 ◆ 从面向编译程序,尤其是从优化代码生成的角度进行考虑,增加指令集结构的规整性来改进指令系统。

  40. 2.3 指令集结构的功能设计 2.高级语言计算机 (1) 间接执行型高级语言机器 高级语言和机器语言是一一对应的,用汇编的方法 (可以用软件实现,也可以用硬件实现)把高级语言源程序翻译成机器语言程序。 (2) 直接执行型高级语言机器 高级语言就作为机器语言,直接由硬件或固件对高级语言源程序的语句逐条进行解释以执行它。

  41. 2.3 指令集结构的功能设计 三、面向操作系统的优化实现改进指令系统 操作系统和计算机系统结构是紧密联系的,操作系 统的实现在很大程度上取决于系统结构的支持。 1. 主要表现在对以下方面的支持 • 处理机工作状态和访问方式的切换。 • 进程的管理和切换。 • 存储管理和信息保护。 • 进程的同步与互斥,信号灯的管理等。 设置系统工作状态和访问方式转移的指令 设置进程转移的指令 设置进程同步和互斥的指令

  42. 2.3 指令集结构的功能设计 CISC结构存在的缺点: (1)在CISC结构的指令系统中,各种指令的使用频 率相差悬殊; 据统计:只有20%的指令使用频度比较高,占运行时间的80%,而其余80%的指令只在20%的运行时间内才会用到。 使用频度高的指令也是最简单的指令。

  43. 2.3 指令集结构的功能设计 CISC结构存在的缺点: (2)指令集庞大,指令条数很多,许多指令的功能 又很复杂,使得控制器硬件非常复杂。 导致的问题: 占用了大量的芯片面积(如占用CPU芯片总面 积的一半以上),给VLSI设计造成很大的困 难;增加了研制时间和成本,容易造成设计错 误。

  44. 2.3 指令集结构的功能设计 (4) 许多指令由于操作繁杂,其CPI值比较大,执 行速度慢。采用这些复杂指令有可能使整个程 序的 执行时间反而增加。; (5)在CISC结构的指令系统中,由于各条指令的功 能不均衡性,不利于采用先进的计算机体系结 构技术(如流水技术)来提高系统的性能。 例如,80x86处理器支持几百条指令,但常用的指令只有十条,使用频率占95%

  45. Intel 80X86最常用的十条指令

  46. 2.3 指令集结构的功能设计 2.3.2 RISC计算机指令集功能的设计 RISC的含义是精简指令集计算机(Reduced Instruction Set Computer) 目的 使得计算机体系结构更加简单、更加合理和更加有效,克服CISC结构的缺点,使机器速度更快,程序运行时间缩短,从而提高计算机系统的性能。

  47. 2.3 指令集结构的功能设计 起源于1975 年的IBM 801小型计算机 1979年由加州大学伯克莱分校Patterson教授等提出RISC这一术语,并研制出RISC-I: 31条指令,指令字长都是32位,78个通用寄存器,时钟频率为8 MHz; 控制部分所占的芯片面积只有约6%。商品化微处理器MC68000和Z8000分别为50%和53%; 性能比MC68000和Z8000快3~4倍。

  48. 2.3 指令集结构的功能设计 到1983年发展为RISC-II: 指令条数为39,通用寄存器个数为138,时钟频率为12 MHz。 1987年SUN公司基于伯克莱分校RISC计算机提出的SPARC系列工作站,使得工作站成为高速小型/微型计算机的代表,RISC技术在工作站中被普遍采用。 1988年Motorola推出的MC 88000 RISC计算机,RISC技术已被普遍接受。

  49. 2.3 指令集结构的功能设计 • RISC的主要特点: 一.精简指令系统 1) 指令条数少,一般小于100条 2) 基本寻址方式少,一般23种 3) 指令格式少,一般23种 4) 指令长度一致(32位或64位)

More Related