计算机体系结构chap2-计算机指令集结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
◆ 有三个操作数的指令:两个源操作数 有三个操作数的指令:
一个结果操作数
10/80
2.1 指令集结构的分类
◆ 有两个操作数的指令:一个操作数既作为源操 有两个操作数的指令:
作数,也作为目的操作数. 作数,也作为目的操作数. (2) 在ALU指令中,有多少个操作数可以用存储器来寻 ALU指令中 指令中, 址,也即有多少个存储器操作数? 也即有多少个存储器操作数? 一般来说,ALU指令有 指令有0 个存储器操作数. 一般来说,ALU指令有0~3个存储器操作数.
POP C
Store C,R3
7/80
三种类型指令集结构的优缺点
指令集结 构类型 优 点 缺 点
堆栈型
堆栈不能被随机访问, 堆栈不能被随机访问,从而很难生 简单模型;指令短小.成有效代码.同时,由于堆栈是瓶颈, 简单模型; 指令短小.成有效代码.同时,由于堆栈是瓶颈, 所以很难被高效地实现. 所以很难被高效地实现. 是一种表示计算的 减小了机器的内部 状态;指令短小. 状态;指令短小. 由于累加器是唯一的暂存器, 由于累加器是唯一的暂存器,这种 机器的存储器通信开销最大. 机器的存储器通信开销最大. 所有操作数均需命名,且显式表示, 所有操作数均需命名,且显式表示, 因而指令比较长. 因而指令比较长.
6/80
C=A+B表达式在这三种类型指令集结构上的实现方法
寄存器 堆栈 累加器 (寄存器-存储器) LOAD R1,A 寄存器 (寄存器-寄存器) )
PUSH A
LOAD A
LOAD R1,A
PUSH B
ADD B
ADD R1,B
LOAD R2,B
ADD
Store C
Store C,R1
Add R3,R1,R2
4/80
CPU对操作数的不同存取方式
CPU提供的 暂存器 每条ALU指令显式表示的 运算结果的 访问显式操作数的 操作数个数 0 1 目的地 堆栈 累加器 过程 Push/Pop Load/Store 累加器 一组寄存器 2/3 Load/Store寄存 寄存器或存 Load/Store寄存 储器 器或存储器
1
2
2.1 指令集结构的分类
(3)
通用寄存器指令集结构进一步细分为三种类型: 通用寄存器指令集结构进一步细分为三种类型: 寄存器型( R:register寄存器 --- 寄存器型(R-R:register-register) 存储器型( M:register-memory) 寄存器 --- 存储器型(R-M:register-memory) 存储器 --- 存储器型(M-M:memory-memory) 存储器型( M:memory-memory)
自减寻址
Add R1, -(R2) Add R1 , 100(R2)[R3]
缩放寻址
3. 寻址方式使用情况统计结果 基准程序) (VAX指令集结构的机器:gcc,Spice和Tex 基准程序) VAX指令集结构的机器:gcc,Spice和 指令集结构的机器
Tex
70% 60% 50% 40% 30% 20% 10% 0%
立 即 寻 址
偏 移 寻 址
2.2 寻址技术
4. 各种偏移量字段大小的使用情况 寄存器-寄存器型指令集结构的机器上(MIPS) 寄存器-寄存器型指令集结构的机器上(MIPS)
◆ 运行SPECint92基准程序集 运行SPECint92 SPECint92基准程序集
(compress,espresso,eqntott,gcc,li) compress,espresso,eqntott,gcc,li)
第二章 计算机指令集结构设计
2.2
寻址技术
1. 在通用寄存器指令集结构中,一般是利用寻址方 式指明指令中的操作数是一个常数,一个寄存器 操作数,抑或是一个存储器操作数. 2. 当前指令集结构中所使用的一些操作数寻址方式.
15/80
寻址方式 寄存器寻址 立即值寻址 偏移寻址 寄存器间接寻址 索引寻址 直接寻址或绝对寻 址 存储器间接寻址 自增寻址
Spice
gcc
55% 43% 39% 32% 40%
24% 16% 1% 6% 1% 0% 6% 3% 11% 17%
存 储 器 间 接 寻 址
寄 存 器 间 接 寻 址
缩 放 寻 址
立即值寻址方式和偏移寻址方式的使用频率十分高. 立即值寻址方式和偏移寻址方式的使用频率十分高. 的使用频率十分高
17/80
SPECfp92测量统计结果
8
9
10
11
12
13
14
15
x轴的标记是对偏移量大小进行log2()运算 轴的标记是对偏移量大小进行log ) 所得,也就是偏移量字段的位数. 所得,也就是偏移量字段的位数.
19/80
2.2 寻址技术
◆ 程序所使用的偏移量大小分布十分广泛; 程序所使用的偏移量大小分布十分广泛; ◆ 较小的偏移量和较大的偏移量均占有相当大的比例; 较小的偏移量和较大的偏移量均占有相当大的比例; ◆ 将偏移量字段的大小设置为12~16位.这种长度可 将偏移量字段的大小设置为12 16位 12~
1/80
第二章 计算机指令集结构设计
2.1 指令集结构的分类 2.2 寻址技术 2.3 指令集结构的功能设计 2.4 操作数的类型,表示和大小 2.5 指令集格式的设计 2.6 DLX指令集结构
2/80
第二章 计算机指令集结构设计
2.1 指令集结构的分类
2.1.1 指令集结构分类
根据五个因素对计算机指令集结构进行分类: 根据五个因素对计算机指令集结构进行分类: 五个因素对计算机指令集结构进行分类 (1) 在CPU中操作数的存储方法 CPU中操作数的存储方法 (2) 指令中显式表示的操作数个数 (3) 操作数的寻址方式 (4) 指令集所提供的操作类型 (5) 操作数的类型和大小
பைடு நூலகம்
以支持上述75%~99% 以支持上述75%~99%基于偏移寻址方式的数据访 75%~99 问中偏移量大小的表示. 问中偏移量大小的表示.
20/80
5. 在一种Load/Store型指令集结构上,一些指令使用 立即值寻址方式的频率.
整型平均 100% 80% 60% 40% 20% 0% 87% 77% 45% 10% Load 指令 比较指令
累加器型
寄存器型
是代码生成最一般 的模型. 的模型.
8/80
2.1 指令集结构的分类
2.1.2 通用寄存器型指令集结构的分类
1. 通用寄存器型指令集结构的主要优点 使编译器有效地使用寄存器. 使编译器有效地使用寄存器. (1) 表达式求值 (2) 寄存器可以用来存放变量
◆ 减少存储器的通信量,加快程序的执行速度. 减少存储器的通信量,加快程序的执行速度.
堆栈 累加器
5/80
2.1 指令集结构的分类
4. 根据CPU内部存储单元类型进行分类,可以分为 堆栈型指令集结构 累加器型指令集结构 通用寄存器型指令集结构 C=A+B表达式在这三种类型指令集结构上的 例 C=A+B表达式在这三种类型指令集结构上的 实现方法.假设A 实现方法.假设A,B,C均是保存在存储器单元中, 均是保存在存储器单元中, 且A和B的值在运算过程中一直被保持. 的值在运算过程中一直被保持.
(4) 常见的三种通用寄存器型指令集结构的优缺点 常见的三种通用寄存器型指令集结构的优缺点 注:表中(m,n)的含义是, 指令的n个操作 表中(m,n)的含义是, 指令的n (m,n)的含义是 数中有m个存储器操作数. 数中有m个存储器操作数.
13/80
指令集结构 类型
优 点
缺 点
简单, 简单,指令字长固 寄存器- 寄存器-寄 定,是一种简单的代 和指令中含有对存储器操作数访问 存器型 的结构相比,指令条数多, 码生成模型, 码生成模型,各种指 的结构相比,指令条数多,因而其 目标代码较大. (0,3) ) 令的执行时钟周期数 目标代码较大. 相近. 相近. 指令中的操作数类型不同. 指令中的操作数类型不同.在一 可以直接对存储器操 条指令中同时对一个寄存器操作数 寄存器- 寄存器 - 存 作数进行访问,容易 和存储器操作数进行编码,将限制 作数进行访问, 和存储器操作数进行编码, 对指令进行编码, 对指令进行编码,且 指令所能够表示的寄存器个数.由 储器型 指令所能够表示的寄存器个数. 其目标代码较小. 其目标代码较小. (1,2) ) 于指令的操作数可以存储在不同类 型的存储器单元, 型的存储器单元,所以每条指令的 执行时钟周期数也不尽相同. 执行时钟周期数也不尽相同. 指令字长多种多样. 指令字长多种多样.每条指令的 存储器- 存储器-存 是一种最紧密的编 码方式,无需"浪费"执行时钟周期数也大不一样, 储器型 码方式,无需"浪费"执行时钟周期数也大不一样,对存 储器的频繁访问将导致存储器访问 寄存器保存变量. (3,3) ) 寄存器保存变量. 瓶颈问题. 瓶颈问题.
(因为寄存器比存储器快) 因为寄存器比存储器快)
◆ 可以用更少的地址位来寻址寄存器,从而可 可以用更少的地址位来寻址寄存器,
以有效改进程序的目标代码大小. 以有效改进程序的目标代码大小.
9/80
2.1 指令集结构的分类
2. CPU需要设置多少个寄存器呢? 主要由编译器使用寄存器的情况来决定. 主要由编译器使用寄存器的情况来决定. 为表达式求值保留一些寄存器 为传递参数保留一些寄存器 用剩下的寄存器来保存变量 3. 两种主要的指令特性能够将通用寄存器指令集结构 (GPR)进一步细分 ALU指令到底有两个或是三个操作数 指令到底有两个或是三个操作数? (1) ALU指令到底有两个或是三个操作数?
3/80
2.1 指令集结构的分类
CPU中操作数的存储方法,是各种指令集结构 CPU中操作数的存储方法, 中操作数的存储方法 之间最主要的区别所在. 之间最主要的区别所在. 1. CPU中用来存储操作数的存储单元主要有: 堆栈 累加器 一组寄存器 2. 指令中的操作数可以显式给出,也可以隐式地给出. 3. CPU对操作数的不同存取方式
◆ 运行SPECfp92基准程序集 运行SPECfp92 SPECfp92基准程序集
(dudoc,ear,hydro2d,mdljdp2,su2cor) dudoc,ear,hydro2d,mdljdp2,su2cor)
18/80
2.2 寻址技术
SPECint 30% 25% 20% 15% 占偏移寻址方 式的百分比 10% 5% 0% 0 1 2 3 4 5 6 7
11/80
ALU指令中,存储器操作数个数和操作数个数的 所有可能组合,以及相应的机器实例 ALU指令中存储器 操作数个数 0 ALU指令中操作数的 最大个数 2 3 2 3 2 3 3 3 VAX
12/80
机器实例 IBM RT-PC SPARC,MIPS , PDP-10, IBM 360, , , Motorola 68000 IBM360的部分指令 的部分指令 PDP-11, - , 部分IBM360 指令 部分
指令实例 Add R4 , R3 Add R4 , #3 Add R4 , 100(R1) Add R4 , (R1) Add R3 , (R1 + R2) Add R1 , (1001) Add R1 , @(R3) Add R1 , (R2)+
含
义
Regs[R4]←Regs[R4]+Regs[R3] + Regs[R4]←Regs[R4]+3 + Regs[R4]←Regs[R4]+Mem[100+Regs[R1]] + Regs[R4]←Regs[R4]+Mem[Regs[R1]] + Regs[R3]←Regs[R3]+Mem[Regs[R1]+Regs[R2]] + Regs[R1]←Regs[R1]+Mem[1001] + Regs[R1]←Regs[R1]+Mem[Mem[Regs[R3]]] + Regs[R1]←Regs[R1]+Mem[Regs[R2]] + Regs[R2]←Regs[R2]+d + Regs[R2]←Regs[R2]-d - Regs[R1]←Regs[R1]+Mem[Regs[R2]] Regs[R1]←Regs[R1] + Mem[100 + Regs[R2] + Regs[R3]*d]
浮点平均 78% 58% 35% 10% ALU指令 所有指令
比较指令和ALU指令使用立即值寻址方式十分频繁. 比较指令和ALU指令使用立即值寻址方式十分频繁. 指令使用立即值寻址方式十分频繁
一个结果操作数
10/80
2.1 指令集结构的分类
◆ 有两个操作数的指令:一个操作数既作为源操 有两个操作数的指令:
作数,也作为目的操作数. 作数,也作为目的操作数. (2) 在ALU指令中,有多少个操作数可以用存储器来寻 ALU指令中 指令中, 址,也即有多少个存储器操作数? 也即有多少个存储器操作数? 一般来说,ALU指令有 指令有0 个存储器操作数. 一般来说,ALU指令有0~3个存储器操作数.
POP C
Store C,R3
7/80
三种类型指令集结构的优缺点
指令集结 构类型 优 点 缺 点
堆栈型
堆栈不能被随机访问, 堆栈不能被随机访问,从而很难生 简单模型;指令短小.成有效代码.同时,由于堆栈是瓶颈, 简单模型; 指令短小.成有效代码.同时,由于堆栈是瓶颈, 所以很难被高效地实现. 所以很难被高效地实现. 是一种表示计算的 减小了机器的内部 状态;指令短小. 状态;指令短小. 由于累加器是唯一的暂存器, 由于累加器是唯一的暂存器,这种 机器的存储器通信开销最大. 机器的存储器通信开销最大. 所有操作数均需命名,且显式表示, 所有操作数均需命名,且显式表示, 因而指令比较长. 因而指令比较长.
6/80
C=A+B表达式在这三种类型指令集结构上的实现方法
寄存器 堆栈 累加器 (寄存器-存储器) LOAD R1,A 寄存器 (寄存器-寄存器) )
PUSH A
LOAD A
LOAD R1,A
PUSH B
ADD B
ADD R1,B
LOAD R2,B
ADD
Store C
Store C,R1
Add R3,R1,R2
4/80
CPU对操作数的不同存取方式
CPU提供的 暂存器 每条ALU指令显式表示的 运算结果的 访问显式操作数的 操作数个数 0 1 目的地 堆栈 累加器 过程 Push/Pop Load/Store 累加器 一组寄存器 2/3 Load/Store寄存 寄存器或存 Load/Store寄存 储器 器或存储器
1
2
2.1 指令集结构的分类
(3)
通用寄存器指令集结构进一步细分为三种类型: 通用寄存器指令集结构进一步细分为三种类型: 寄存器型( R:register寄存器 --- 寄存器型(R-R:register-register) 存储器型( M:register-memory) 寄存器 --- 存储器型(R-M:register-memory) 存储器 --- 存储器型(M-M:memory-memory) 存储器型( M:memory-memory)
自减寻址
Add R1, -(R2) Add R1 , 100(R2)[R3]
缩放寻址
3. 寻址方式使用情况统计结果 基准程序) (VAX指令集结构的机器:gcc,Spice和Tex 基准程序) VAX指令集结构的机器:gcc,Spice和 指令集结构的机器
Tex
70% 60% 50% 40% 30% 20% 10% 0%
立 即 寻 址
偏 移 寻 址
2.2 寻址技术
4. 各种偏移量字段大小的使用情况 寄存器-寄存器型指令集结构的机器上(MIPS) 寄存器-寄存器型指令集结构的机器上(MIPS)
◆ 运行SPECint92基准程序集 运行SPECint92 SPECint92基准程序集
(compress,espresso,eqntott,gcc,li) compress,espresso,eqntott,gcc,li)
第二章 计算机指令集结构设计
2.2
寻址技术
1. 在通用寄存器指令集结构中,一般是利用寻址方 式指明指令中的操作数是一个常数,一个寄存器 操作数,抑或是一个存储器操作数. 2. 当前指令集结构中所使用的一些操作数寻址方式.
15/80
寻址方式 寄存器寻址 立即值寻址 偏移寻址 寄存器间接寻址 索引寻址 直接寻址或绝对寻 址 存储器间接寻址 自增寻址
Spice
gcc
55% 43% 39% 32% 40%
24% 16% 1% 6% 1% 0% 6% 3% 11% 17%
存 储 器 间 接 寻 址
寄 存 器 间 接 寻 址
缩 放 寻 址
立即值寻址方式和偏移寻址方式的使用频率十分高. 立即值寻址方式和偏移寻址方式的使用频率十分高. 的使用频率十分高
17/80
SPECfp92测量统计结果
8
9
10
11
12
13
14
15
x轴的标记是对偏移量大小进行log2()运算 轴的标记是对偏移量大小进行log ) 所得,也就是偏移量字段的位数. 所得,也就是偏移量字段的位数.
19/80
2.2 寻址技术
◆ 程序所使用的偏移量大小分布十分广泛; 程序所使用的偏移量大小分布十分广泛; ◆ 较小的偏移量和较大的偏移量均占有相当大的比例; 较小的偏移量和较大的偏移量均占有相当大的比例; ◆ 将偏移量字段的大小设置为12~16位.这种长度可 将偏移量字段的大小设置为12 16位 12~
1/80
第二章 计算机指令集结构设计
2.1 指令集结构的分类 2.2 寻址技术 2.3 指令集结构的功能设计 2.4 操作数的类型,表示和大小 2.5 指令集格式的设计 2.6 DLX指令集结构
2/80
第二章 计算机指令集结构设计
2.1 指令集结构的分类
2.1.1 指令集结构分类
根据五个因素对计算机指令集结构进行分类: 根据五个因素对计算机指令集结构进行分类: 五个因素对计算机指令集结构进行分类 (1) 在CPU中操作数的存储方法 CPU中操作数的存储方法 (2) 指令中显式表示的操作数个数 (3) 操作数的寻址方式 (4) 指令集所提供的操作类型 (5) 操作数的类型和大小
பைடு நூலகம்
以支持上述75%~99% 以支持上述75%~99%基于偏移寻址方式的数据访 75%~99 问中偏移量大小的表示. 问中偏移量大小的表示.
20/80
5. 在一种Load/Store型指令集结构上,一些指令使用 立即值寻址方式的频率.
整型平均 100% 80% 60% 40% 20% 0% 87% 77% 45% 10% Load 指令 比较指令
累加器型
寄存器型
是代码生成最一般 的模型. 的模型.
8/80
2.1 指令集结构的分类
2.1.2 通用寄存器型指令集结构的分类
1. 通用寄存器型指令集结构的主要优点 使编译器有效地使用寄存器. 使编译器有效地使用寄存器. (1) 表达式求值 (2) 寄存器可以用来存放变量
◆ 减少存储器的通信量,加快程序的执行速度. 减少存储器的通信量,加快程序的执行速度.
堆栈 累加器
5/80
2.1 指令集结构的分类
4. 根据CPU内部存储单元类型进行分类,可以分为 堆栈型指令集结构 累加器型指令集结构 通用寄存器型指令集结构 C=A+B表达式在这三种类型指令集结构上的 例 C=A+B表达式在这三种类型指令集结构上的 实现方法.假设A 实现方法.假设A,B,C均是保存在存储器单元中, 均是保存在存储器单元中, 且A和B的值在运算过程中一直被保持. 的值在运算过程中一直被保持.
(4) 常见的三种通用寄存器型指令集结构的优缺点 常见的三种通用寄存器型指令集结构的优缺点 注:表中(m,n)的含义是, 指令的n个操作 表中(m,n)的含义是, 指令的n (m,n)的含义是 数中有m个存储器操作数. 数中有m个存储器操作数.
13/80
指令集结构 类型
优 点
缺 点
简单, 简单,指令字长固 寄存器- 寄存器-寄 定,是一种简单的代 和指令中含有对存储器操作数访问 存器型 的结构相比,指令条数多, 码生成模型, 码生成模型,各种指 的结构相比,指令条数多,因而其 目标代码较大. (0,3) ) 令的执行时钟周期数 目标代码较大. 相近. 相近. 指令中的操作数类型不同. 指令中的操作数类型不同.在一 可以直接对存储器操 条指令中同时对一个寄存器操作数 寄存器- 寄存器 - 存 作数进行访问,容易 和存储器操作数进行编码,将限制 作数进行访问, 和存储器操作数进行编码, 对指令进行编码, 对指令进行编码,且 指令所能够表示的寄存器个数.由 储器型 指令所能够表示的寄存器个数. 其目标代码较小. 其目标代码较小. (1,2) ) 于指令的操作数可以存储在不同类 型的存储器单元, 型的存储器单元,所以每条指令的 执行时钟周期数也不尽相同. 执行时钟周期数也不尽相同. 指令字长多种多样. 指令字长多种多样.每条指令的 存储器- 存储器-存 是一种最紧密的编 码方式,无需"浪费"执行时钟周期数也大不一样, 储器型 码方式,无需"浪费"执行时钟周期数也大不一样,对存 储器的频繁访问将导致存储器访问 寄存器保存变量. (3,3) ) 寄存器保存变量. 瓶颈问题. 瓶颈问题.
(因为寄存器比存储器快) 因为寄存器比存储器快)
◆ 可以用更少的地址位来寻址寄存器,从而可 可以用更少的地址位来寻址寄存器,
以有效改进程序的目标代码大小. 以有效改进程序的目标代码大小.
9/80
2.1 指令集结构的分类
2. CPU需要设置多少个寄存器呢? 主要由编译器使用寄存器的情况来决定. 主要由编译器使用寄存器的情况来决定. 为表达式求值保留一些寄存器 为传递参数保留一些寄存器 用剩下的寄存器来保存变量 3. 两种主要的指令特性能够将通用寄存器指令集结构 (GPR)进一步细分 ALU指令到底有两个或是三个操作数 指令到底有两个或是三个操作数? (1) ALU指令到底有两个或是三个操作数?
3/80
2.1 指令集结构的分类
CPU中操作数的存储方法,是各种指令集结构 CPU中操作数的存储方法, 中操作数的存储方法 之间最主要的区别所在. 之间最主要的区别所在. 1. CPU中用来存储操作数的存储单元主要有: 堆栈 累加器 一组寄存器 2. 指令中的操作数可以显式给出,也可以隐式地给出. 3. CPU对操作数的不同存取方式
◆ 运行SPECfp92基准程序集 运行SPECfp92 SPECfp92基准程序集
(dudoc,ear,hydro2d,mdljdp2,su2cor) dudoc,ear,hydro2d,mdljdp2,su2cor)
18/80
2.2 寻址技术
SPECint 30% 25% 20% 15% 占偏移寻址方 式的百分比 10% 5% 0% 0 1 2 3 4 5 6 7
11/80
ALU指令中,存储器操作数个数和操作数个数的 所有可能组合,以及相应的机器实例 ALU指令中存储器 操作数个数 0 ALU指令中操作数的 最大个数 2 3 2 3 2 3 3 3 VAX
12/80
机器实例 IBM RT-PC SPARC,MIPS , PDP-10, IBM 360, , , Motorola 68000 IBM360的部分指令 的部分指令 PDP-11, - , 部分IBM360 指令 部分
指令实例 Add R4 , R3 Add R4 , #3 Add R4 , 100(R1) Add R4 , (R1) Add R3 , (R1 + R2) Add R1 , (1001) Add R1 , @(R3) Add R1 , (R2)+
含
义
Regs[R4]←Regs[R4]+Regs[R3] + Regs[R4]←Regs[R4]+3 + Regs[R4]←Regs[R4]+Mem[100+Regs[R1]] + Regs[R4]←Regs[R4]+Mem[Regs[R1]] + Regs[R3]←Regs[R3]+Mem[Regs[R1]+Regs[R2]] + Regs[R1]←Regs[R1]+Mem[1001] + Regs[R1]←Regs[R1]+Mem[Mem[Regs[R3]]] + Regs[R1]←Regs[R1]+Mem[Regs[R2]] + Regs[R2]←Regs[R2]+d + Regs[R2]←Regs[R2]-d - Regs[R1]←Regs[R1]+Mem[Regs[R2]] Regs[R1]←Regs[R1] + Mem[100 + Regs[R2] + Regs[R3]*d]
浮点平均 78% 58% 35% 10% ALU指令 所有指令
比较指令和ALU指令使用立即值寻址方式十分频繁. 比较指令和ALU指令使用立即值寻址方式十分频繁. 指令使用立即值寻址方式十分频繁