2.1指令集结构概述
- 指令集:
- 一些指令的集合;
- 每条指令都是直接由CPU硬件执行。
- 指令的表示方法:
- 二进制格式;
- 物理存储空间组织方式是位、字节、字和多字等;
- 当前的指令字长有:16、32、64位;
- 可变长格式和固定长度格式。
指令特点
- 指令的操作十分简单,其操作由操作码编码表示。
- 每个操作需要的操作数个数为0-3个不等。
- 操作数是一些存储单元的地址;
- 典型的存储单元通常有:主存、寄存器、堆栈和累加器。
- 操作数地址隐含表示或显式表示。
指令集与计算机的性能
2.2指令集结构的分类
- 一般来说,可以从如下五个因素考虑对计算机指令集结构进行分类,即:
- 在CPU中操作数的存储方法;
- 指令中显式表示的操作数个数;
- 操作数的寻址方式;
- 指令集所提供的操作类型;
- 操作数的类型和大小
指令集结构的分类
- CPU中用来存储操作数的存储单元主要有:
- 堆栈;
- 累加器;
- 一组寄存器。
- 指令中的操作数可以被明确地显式给出,也可以按照某种约定隐式地给出。
指令集结构的分类
Z=X+Y表达式在这三种类型指令集结构上的实现方法
指令集结构的分类
- 早期的大多数机器都是采用堆栈型或累加器型指令集结构,但是自1980年以来的大多数机器均采用的是寄存器型指令集结构。主要有两个方面的原因:
- 集成电路技术飞速发展
- 寄存器和CPU内部其它存储单元一样,要比存储器快
- 对编译器而言,可以更容易有效地分配和使用寄存器
通用寄存器型指令集结构的分类
- 通用寄存器型指令集结构的主要优点:
- 在表达式求值方面,比其它类型指令集结构都具有 更大的灵活性;
- 寄存器可以用来存放变量;
- 减少存储器的通信量,加快程序的执行速度(因为寄存器比存储器快)
- 可以用更少的地址位来寻址寄存器,从而可以有 效改进程序的目标代码大小。
通用寄存器型指令集结构的分类
- 两种主要的指令特性能够将通用寄存器型指令集结构(GPR)进一步细分。
- ALU指令到底有两个或是三个操作数?
- 在ALU指令中,有多少个操作数可以用存储器来寻址,也即有多少个存储器操作数?
- 可以将当前大多数通用寄存器型指令集结构进一步细分为三种类型:
- 寄存器―寄存器型(R一R: register-register)
- 寄存器―存储器型(R-M: register-memory)
- 存储器―存储器型(M-M: memory-memory)
三种通用寄存器型指令集结构的优缺点
- 寄存器——寄存器(0,3)
- 优点:
指令字长固定,指令结构简洁,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。 - 缺点:
与指令中含存储器操作数的指令系统结构相比,指令条数多,目标代码不够紧凑,因而程序占用的空间比较大。
- 优点:
- 寄存器―存储器型(1,2)
- 优点:
可以在ALU指令中直接对存储器操作数进行引用,而不必 先用load指令进行加载,容易对指令进行编码,目标代码比较紧凑。 - 缺点:
由于有一个操作数的内容将被破坏,所以指令中的两个操作数不对称。在一条指令中同时对寄存器操作数和存储器操作数进行编码,有可能限制指令所能够表示的寄存器个数。指令的执行时钟周期因操作数的来源(寄存器或存储器)的不同而差别比较大。
- 优点:
- 存储器―存储器型(3,3)
- 优点:
目标代码最紧凑,不需要设置存储器来保存变量。 - 缺点: 指令字长变换很大,特别是3个操作数指令。而且每条指令完成的工作也差别很大。对存储器的频率访问会使存储器成为瓶颈。这种类型的指令系统现在已经不用了。
- 优点:
指令集结构设计概念
应用软件->操作系统->指令集->硬件
2.3寻址技术
- 在通用寄存器型指令集结构中,一般是利用寻址方式指明指令中的操作数是一个常数、一个寄存器操作数,抑或是一个存储器操作数。
- 寻址实际上是从形式地址到实际地址的转换。形式地址由指令描述,实际地址也称为有效地址。
- 有效地址指明的是存储器单元的地址或寄存器地址。
- 必须加速有效地址生成。
常用的一些操作数寻址方式
-
寄存器寻址
-
立即数寻址
-
偏移寻址
-
寄存器间接寻址
-
索引寻址
-
直接寻址或绝对寻址
-
存储器间接寻址
-
自增寻址
-
自减寻址
-
缩放寻址
2.4指令系统的设计和优化
一种指令集结构中的指令到底要支持哪些类型的操
作呢?这就是所谓的指令集结构功能设计问题。
指令集操作的分类
控制指令
- “跳转”(ump) :当控制指令为无条件改变控制流时,我们称之为“跳转”。
- “分支”(Branch):而当控制指令是有条件改变控制流时,我们称之为“分支”。
- 控制流程的改变情况:
- 条件分支(conditional branch) ;
- 跳转(jump) ;
- 过程调用(call);
- 过程返回(return) 。
条件分支指令的表示
过程调用和返回的状态保存
- “调用者保存”(caller
saving)方法:如果采用调用者保存策略,那么在一个调用者调用别的过程时,必须保存调用者所要保存的寄存器,以备调用结束返回后,能够再次访问调用者。 - “被调用者保存”(callee
saving)方法:如果采用被调用者保存策略,那么被调用的过程必须保存它要用的寄存器,保证不会破坏过程调用者的程序执行环境,并在过程调用结束返回时,恢复这些寄存器的内容。
2.5 指令系统的发展和改进
- 一个方向是强化指令功能,实现软件功能向硬件功能转移,基于这种指令集结构而设计实现的计算机系统称为复杂指令集计算机(CISC)。
- 八十年代发展起来的精简指令集计算机(RISC) ,其目的是尽可能地降低指令集结构的复杂性,以达到简化实现,提高性能的目的。
CISC指令集功能设计
-
面向目标程序增强指令功能
- 提高运算型指令功能;
- 提高传送指令功能;
- 增加程序控制指令功能。
-
面向高级语言和编译程序改进指令系统
- 增加对高级语言和编译系统支持的指令功能;
- 高级语言计算机指令系统。
-
面向操作系统的优化实现改进指令系统
- 主要表现在对中断处理、进程管理、存储管理和 保护、系统工作状态的建立与切换等的支持。
- 可以设置支持系统工作状态和访问方式转移的指令、支持进程转移的指令、支持进程同步和互斥的指令等措施,达到优化实现操作系统的目的。
RISC指令集功能设计
CISC结构存在如下缺点
- CISC结构存在着如下缺点:
- 在CISC结构的指令系统中,各种指令的使用频率相差悬殊。据统计,有20%的指令使用频率最大,占运行时间的80%。也就是说,有80%的指令在20%的运行时间内才会用到。
- CISC结构指令系统的复杂性给VLSI设计增加了很大负担,不利于单片集成。
- CISC结构的指令系统中,许多复杂指令需要很复杂的操作,因而运行速度慢。
- 在CISC结构的指令系统中,由于各条指令的功能不均衡性,不利于采用先进的计算机体系结构技术(如流水技术)来提高系统的性能。
进行RISC计算机指令集结构的功能设计时,我们并不能简单地着眼于精简指令系统上,更重要的目的是使得计算机体系结构更加简单、更加合理和更加有效,克服CISC结构的缺点,使机器速度更快,程序运行时间缩短,从而提高计算机系统的性能。
RISC指令集功能设计原则
- 选取使用频率最高的指令,并补充一些最有用的指令;
- 每条指令的功能应尽可能简单,并在一个机器周期内完成;
- 所有指令长度均相同;
- 只有load和store操作指令才访问存储器,其它指令操作均在寄存器之间进行;
- 以简单高效的方式支持高级语言
2.6操作数的类型和大小
-
操作数类型和操作数表示也是软硬件主要界面之一。
-
操作数类型是面向应用、面向软件系统所处理的各种数据结构。
-
操作数表示是硬件结构能够识别、指令系统可以直接调用的那些结构。
-
确定操作数表示实际上也是软硬件取舍折衷的问题
- 计算机即使只具有最简单的操作数表示,如只有整数(定点)表示法,也可以通过软件方法处理各种复杂的操作数类型,但是这样会大大降低系统的效率。
- 如果各种复杂的操作数类型均包含在操作数表示之中,无疑会大大提高系统的效率,但是所花费的硬件代价也很高。
-
十进制:通常采用“压缩十进制”或“二进制编码十进制”表示。压缩十进制数据表示用4位编码数字0~9,然后将两个十进制数字压缩在一个字节中存储。如果将十进制数字直接用字符串来表示,就叫做“非压缩十进制”表示法。
-
提供给压缩十进制表示法和非压缩十进制表示法两者之间的相互转换的操作分别称为“压缩”与“解压”操作。
操作数类型的表示主要有如下两种方法:
- 操作数的类型可以由操作码的编码指定,这也是最常见的一种方法;
- 数据可以附上由硬件解释的标记,由这些标记指定操作数的类型,从而选择适当的运算。然而有标记数据的机器却非常少见。
2.7MIPS指令系统结构
- Load/Store型指令集结构
- MIPS是一种多元指令集结构
- 体现了当今多种机器(AMD29K、DEC station
3100、HP850、IBM 801、Intel i860、MIPSM/120A、MIPS M/1000、Motorola
88k、RISC 1、sGI4D/60、SPARC station 1、Sun4/110、Sun
4/260等)的指令集结构的共同特点。 - 还将会体现未来一些机器的指令集结构的特点。
- 体现了当今多种机器(AMD29K、DEC station
MIPS指令集结构
- 具有一个简单的Load/Store指令集;
- 注重指令流水效率;
- 简化指令的译码;
- 高效支持编译器。
MIPS指令集结构:寄存器
- 32个32位的通用寄存器(GPRs) 。
- 寄存器RO的内容恒为全0。
- 32个32位浮点寄存器(FPRs)
- 单精度浮点数表示和双精度浮点数表示。
MIPS指令集结构:数据类型
- 整型数据: 8位、16位、32位。
- 浮点数据:
- 32位单精度浮点;
- 64位双精度浮点;
- IEEE 754标准。
MIPS指令集结构:寻址方式
- 寄存器寻址;如ADD R1,R2,R3
- 立即值寻址;如ADD R1,R2,#42
- 偏移寻址;如ADD R1,R2,40(R3)
- 寄存器间接寻址。存储器地址宽度为32位
- 如ADD R1,R2,0(R3)
MIPS指令集结构:指令格式
三种:
MIPS指令集结构:操作类型
- Load和Store操作;
- ALU操作;
- 分支和跳转操作;
- 浮点操作。
MIPS常用指令
MIPS的效能分析