1.03k likes | 1.18k Views
第二章 计算机指令集结构. 引言. 计算机的指令集结构也称为 指令系统 ,它是硬件机器所支持的 全部指令集合 ,它是机器语言程员所看到的机器的最主要的属性之一。 指令集结构设计的最基本问题是 软硬件划分 。 指令集结构设计 包括确定 指令格式 、 类型 、 操作 以及 操作数的访问方式 等。. 2.1 指令集结构的分类. 根据五个因素对计算机指令集结构进行分类:. (1) 在 CPU 中操作数的存储方法 (2) 指令中显式表示的操作数个数 (3) 操作数的寻址方式 (4) 指令集所提供的操作类型 (5) 操作数的类型和大小.
E N D
第二章 计算机指令集结构
引言 计算机的指令集结构也称为指令系统,它是硬件机器所支持的全部指令集合,它是机器语言程员所看到的机器的最主要的属性之一。 指令集结构设计的最基本问题是软硬件划分。 指令集结构设计包括确定指令格式、类型、操作以及操作数的访问方式等。
2.1 指令集结构的分类 根据五个因素对计算机指令集结构进行分类: (1) 在CPU中操作数的存储方法 (2) 指令中显式表示的操作数个数 (3) 操作数的寻址方式 (4) 指令集所提供的操作类型 (5) 操作数的类型和大小 CPU中操作数的存储方法,是各种指令集结构之间最主要的区别所在。
2.1 指令集结构的分类 1. CPU中用来存储操作数的存储单元主要有: • 堆栈 • 累加器 • 寄存器/存储器
2.1 指令集结构的分类 寄存器/存储器方式又根据操作数的来源不同,又可进一步分为: • 寄存器-存储器结构(RM结构) (操作数可以来自存储器 ) • 寄存器-寄存器结构(RR结构) (所有操作数都是来自通用寄存器组) RR结构也称为load-store结构,这个名称强调只有load指令和store指令能够访问内存。
2.1 指令集结构的分类 2. 指令中的操作数可以显式给出,也可以隐式地给出。 显式给出:用指令字中的操作数字段给出 隐式给出:使用事先约定好的存储单元
CPU提供的暂存器 每条ALU指令显式表示的操作数个数 运算结果的目的地 访问显式操作数的过程 堆栈 0 堆栈 Push/Pop 累加器 1 累加器 Load/Store累加器 寄存器/存储器 2/3 寄存器或存储器 Load/Store寄存器或存储器 2.1 指令集结构的分类
2.1 指令集结构的分类 例: 表达式C=A+B在4种类型指令集结构上的代码。假设:A、B、C均保存在存储器单元中,并且不能 破坏A和B的值。
指令集结构类型 优点 缺点 堆栈型 是一种表示计算的简单模型;指令短小。 堆栈不能被随机访问,从而很难生成有效代码。同时,由于堆栈是瓶颈,所以很难被高效地实现。 累加器型 减小了机器的内部状态;指令短小。 由于累加器是唯一的暂存器,这种机器的存储器通信开销最大。 寄存器型 是代码生成最一般的模型。 所有操作数均需命名,且显式表示,因而指令比较长。 2.1 指令集结构的分类 三种类型指令集结构的优缺点
2.1 指令集结构的分类 3. 通用寄存器型指令集结构的分类 早期的计算机中采用堆栈指令集结构和累加器指令集结构比较多,但现代CPU,通用寄存器型指令集结构已成为指令集结构的主流,原因: 1. 通用寄存器型指令集结构的主要优点 (1) 使编译器有效地使用寄存器; (2) 在表达式求值方面,比其它类型指令集结构 具有更大的灵活性;
2.1 指令集结构的分类 (3) 寄存器可以用来存放变量。 ◆ 减少存储器的通信量,加快程序的执行速度。 (因为寄存器比存储器快) ◆ 可以用更少的地址位来寻址寄存器,从而可 以有效改进程序的目标代码大小。
2.1 指令集结构的分类 4. CPU需要设置多少个寄存器呢? 主要由编译器使用寄存器的情况来决定 • 为表达式求值保留一些寄存器 • 为传递参数保留一些寄存器 • 用剩下的寄存器来保存变量
2.1 指令集结构的分类 5. 两种主要的指令特性能够将通用寄存器指令集结构(GPR)进一步细分 (1) ALU指令到底有两个或是三个操作数? ◆ 有三个操作数的指令:两个源操作数一个结果操作数 ◆ 有两个操作数的指令:一个操作数既作为源操作数,也作为结果操作数 (2) 在ALU指令中,有多少个操作数可以用存储器来寻址,也即有多少个存储器操作数? 一般来说,ALU指令有0~3个存储器操作数。
6. ALU指令中操作数个数和存储器操作数个数的典型组合
2.1 指令集结构的分类 7. 通用寄存器指令集结构进一步细分为三种类型: • 寄存器 --- 寄存器型(R-R:register-register) • 寄存器 --- 存储器型(R-M:register-memory) • 存储器 --- 存储器型(M-M:memory-memory) 8. 常见的三种通用寄存器型指令集结构的优缺点: 注:表中 ( m, n ) 的含义是, 指令的 n 个操作 数中有 m 个存储器操作数。
2.2 寻址技术 寻址方式是指令对操作数的访问方式, 在一个计算机系统中,机器语言的寻址方式通常有多种. • 在通用寄存器指令集结构中,一般是利用寻址方式指明指令中的操作数是一个常数、一个寄存器操作数,或是一个存储器操作数。 • 当前通用寄存器结构的指令集结构中所使用的一些寻址方式
寻址方式 指令实例 含 义 寄存器寻址 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]
2.2 寻址技术 寄存器寻址: 变量值在寄存器中。 立即值寻址: 常量访问 偏移寻址: 访问局部变量 寄存器间接寻址: 用指针访问变量(指针值在寄存器中) 索引寻址: 数组访问 直接寻址或绝对寻址: 静态变量访问
2.2 寻址技术 存储器间接寻址: 用指针访问变量(指针值在存储器中) 自增寻址: 循环中的递增变量(遍历数组),有时用于实现栈结构, 自减寻址: 循环中的递减变量(遍历数组),有时用于实现栈结构, 缩放寻址: 数组访问
2.2 寻址技术 采用多种寻址方式可以显著地减少程序的指令条数,但可能增加计算机的实现复杂度以及指令的CPI。
3. 寻址方式使用情况统计结果 (VAX指令集结构的机器:gcc、Spice和Tex 基准程序) 结论:立即值寻址方式和偏移寻址方式的使用频率十分高。
2.2 寻址技术 4. 偏移量的取值范围 在load-store结构的机器(Alpha)上运行SPEC CPU2000基准程序
2.2 寻址技术 结论: ◆ 程序所使用的偏移量大小分布十分广泛,需要使用不同的偏移量才能对其进行访问; ◆ 较小的偏移量和较大的偏移量均占有相当大的比例; ◆ 将偏移量字段的大小设置为12~16位。这种长度可以支持上述75%~99%基于偏移寻址方式的数据访问中偏移量大小的表示。
5. 立即数寻址方式 立即数寻址方式的使用频度 大约 1/4 的load指令和ALU指令采用了立即数寻址。
结论: • 最常用的是较小的立即数; • 有时也会用到较大的立即数(主要是用于地址计算)。 • 在指令集结构设计中,至少要将立即数的 大小设置为8~16位。 • 在VAX机(支持32位立即数)上做过类似的统计,结果表明20%~25%的立即数超过16位。
2.3 指令集结构的功能设计 1. 指令集结构的功能设计 • 确定软、硬件功能分配,即确定哪些基本功能应该由硬件实现,哪些功能由软件实现比较合适。 2. 在确定哪些基本功能用硬件来实现时,主要考虑 3 个因素:速度、成本、灵活性 • 硬件实现的特点 速度快、成本高、灵活性差 • 软件实现的特点 速度慢、价格便宜、灵活性好
2.3 指令集结构的功能设计 3. 对指令集的基本要求 完整性、规整性、高效率、兼容性 • 完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令集所提供的指令足够用。 • 要求指令集功能齐全、使用方便 • 下表为许多指令集结构都包含的一些指令类型 • 前4类属于通用计算机系统的基本指令 • 对于最后4种类型的操作,不同指令集结构的支持大不相同
操作类型 实 例 算术和逻辑运算 整数的算术和逻辑操作:加、减、与、或等。 数据传输 Load/Store (MOV) 控制 分支、跳转、过程调用和返回、自陷等。 系统 操作系统调用、虚拟存储器管理等。 浮点 浮点操作:加、乘等。 十进制 十进制加、十进制乘、十进制到字符的转换。 字符串 字符串移动、字符串比较、字符串搜索等。 图形 象素操作、压缩/解压操作等。 2.3 指令集结构的功能设计
2.3 指令集结构的功能设计 规整性:主要包括对称性和均匀性。 • 对称性:所有与指令集有关的存储单元的使用、操作码的设置等都是对称的。 例如:在存储单元的使用上,所有通用寄存器都要同等对待。在操作码的设置上,如果设置了A-B的指令,就应该也设置B-A的指令。 • 均匀性:指对于各种不同的操作数类型、字长、操作种类和数据存储单元,指令的设置都要同等对待。 例如:如果某机器有5种数据表示,4种字长,两种存储单元,则要设置5×4×2=40种同一操作的指令。 高效率:指指令的执行速度快、使用频度高。
2.3 指令集结构的功能设计 2. 一种指令集结构中的指令到底要支持哪些类型的 操作? 这就是指令集结构功能设计的基本问题。 两种截然不同的方向: ◆ 复杂指令集计算机(CISC) 强化指令功能,实现软件功能向硬件功能转移。 ◆ 精简指令集计算机(RISC) 尽可能地降低指令集结构的复杂性,以达到简化实现,提高性能的目的。 是当今指令集结构功能设计的一个主要趋势。
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等
2.3 指令集结构的功能设计 CISC的主要特点: 1)指令系统复杂,表现在: 指令数多,一般大于100条 寻址方式多,一般大于4种 指令格式多,一般大于4种 2)绝大多数指令需要多个机器时钟周期方可完成 3)各种指令都可访问内存 4)采用微程序控制 5)有专用寄存器 6)难以进行优化编译
2.3 指令集结构的功能设计 CISC结构追求的目标: 强化指令功能,减少程序的指令条数,以达到 提高性能的目的。 增强指令功能主要是从如下几个方面着手: 一、面向目标程序增强指令功能 • 提高运算型指令功能 • 提高传送指令功能 • 增加程序控制指令功能 使得目标程序中多条指令的功能由一条指令完成
2.3 指令集结构的功能设计 例如:循环在程序中占有相当大的比例,所以在指令上提供专 门的支持。 • 循环控制部分通常用3条指令完成: • 一条加法指令 • 一条比较指令 • 一条分支指令 • 设置循环控制指令,用一条指令完成上述3条指令的功能。 一般循环程序的结构
2.3 指令集结构的功能设计 二、面向高级语言的优化实现来改进指令集 (缩小高级语言与机器语言的语义差距) 高级语言与一般的机器语言的语义差距非常大,为高级语言程序的编译带来了一些问题。 (1)编译器本身比较复杂。 (2)编译生成的目标代码比较难以达到很好的优化
2.3 指令集结构的功能设计 1.增加对高级语言和编译系统支持的指令功能 ◆ 对源程序中各种高级语言语句进行使用频度的统计与分析,对于使用频度高的语句,可以设置专门的指令或采取措施增加相应指令的功能,以提高其编译速度和执行速度。 ◆ 从面向编译程序,尤其是从优化代码生成的角度进行考虑,增加指令集结构的规整性来改进指令系统。
2.3 指令集结构的功能设计 2.高级语言计算机 (1) 间接执行型高级语言机器 高级语言和机器语言是一一对应的,用汇编的方法 (可以用软件实现,也可以用硬件实现)把高级语言源程序翻译成机器语言程序。 (2) 直接执行型高级语言机器 高级语言就作为机器语言,直接由硬件或固件对高级语言源程序的语句逐条进行解释以执行它。
2.3 指令集结构的功能设计 三、面向操作系统的优化实现改进指令系统 操作系统和计算机系统结构是紧密联系的,操作系 统的实现在很大程度上取决于系统结构的支持。 1. 主要表现在对以下方面的支持 • 处理机工作状态和访问方式的切换。 • 进程的管理和切换。 • 存储管理和信息保护。 • 进程的同步与互斥,信号灯的管理等。 设置系统工作状态和访问方式转移的指令 设置进程转移的指令 设置进程同步和互斥的指令
2.3 指令集结构的功能设计 CISC结构存在的缺点: (1)在CISC结构的指令系统中,各种指令的使用频 率相差悬殊; 据统计:只有20%的指令使用频度比较高,占运行时间的80%,而其余80%的指令只在20%的运行时间内才会用到。 使用频度高的指令也是最简单的指令。
2.3 指令集结构的功能设计 CISC结构存在的缺点: (2)指令集庞大,指令条数很多,许多指令的功能 又很复杂,使得控制器硬件非常复杂。 导致的问题: 占用了大量的芯片面积(如占用CPU芯片总面 积的一半以上),给VLSI设计造成很大的困 难;增加了研制时间和成本,容易造成设计错 误。
2.3 指令集结构的功能设计 (4) 许多指令由于操作繁杂,其CPI值比较大,执 行速度慢。采用这些复杂指令有可能使整个程 序的 执行时间反而增加。; (5)在CISC结构的指令系统中,由于各条指令的功 能不均衡性,不利于采用先进的计算机体系结 构技术(如流水技术)来提高系统的性能。 例如,80x86处理器支持几百条指令,但常用的指令只有十条,使用频率占95%
2.3 指令集结构的功能设计 2.3.2 RISC计算机指令集功能的设计 RISC的含义是精简指令集计算机(Reduced Instruction Set Computer) 目的 使得计算机体系结构更加简单、更加合理和更加有效,克服CISC结构的缺点,使机器速度更快,程序运行时间缩短,从而提高计算机系统的性能。
2.3 指令集结构的功能设计 起源于1975 年的IBM 801小型计算机 1979年由加州大学伯克莱分校Patterson教授等提出RISC这一术语,并研制出RISC-I: 31条指令,指令字长都是32位,78个通用寄存器,时钟频率为8 MHz; 控制部分所占的芯片面积只有约6%。商品化微处理器MC68000和Z8000分别为50%和53%; 性能比MC68000和Z8000快3~4倍。
2.3 指令集结构的功能设计 到1983年发展为RISC-II: 指令条数为39,通用寄存器个数为138,时钟频率为12 MHz。 1987年SUN公司基于伯克莱分校RISC计算机提出的SPARC系列工作站,使得工作站成为高速小型/微型计算机的代表,RISC技术在工作站中被普遍采用。 1988年Motorola推出的MC 88000 RISC计算机,RISC技术已被普遍接受。
2.3 指令集结构的功能设计 • RISC的主要特点: 一.精简指令系统 1) 指令条数少,一般小于100条 2) 基本寻址方式少,一般23种 3) 指令格式少,一般23种 4) 指令长度一致(32位或64位)