指令集结构的分类
寻址技术
指令集结构的功能设计
操作数的类型、表示和大小
指令集格式的设计
DLX指令集结构
第二章 计算机指令集结构设计
指令集结构的分类
指令集结构分类
根据五个因素对计算机指令集结构进行分类:
(1) 在CPU中操作数的存储方法
(2) 指令中显式表示的操作数个数
(3) 操作数的寻址方式
(4) 指令集所提供的操作类型
(5) 操作数的类型和大小
第二章 计算机指令集结构设计
1. CPU中用来存储操作数的存储单元主要有:
2. 指令中的操作数可以显式给出,也可以隐式地给出。
3. CPU对操作数的不同存取方式
堆栈
累加器
一组寄存器
CPU中操作数的存储方法,是各种指令集结构
之间最主要的区别所在。
指令集结构的分类
CPU对操作数的不同存取方式
CPU提供的暂存器
每条ALU指令显式表示的操作数个数
运算结果的目的地
访问显式操作数的过程
堆栈
0
堆栈
Push/Pop
累加器
1
累加器
Load/Store
累加器
一组寄存器
2/3
寄存器或存储器
Load/Store寄存器或存储器
4. 根据CPU内部存储单元类型进行分类,可以分为
堆栈型指令集结构
累加器型指令集结构
通用寄存器型指令集结构
例 C=A+B表达式在这三种类型指令集结构上的
实现方法。假设A、B、C均是保存在存储器单元中,
且A和B的值在运算过程中一直被保持。
指令集结构的分类
C=A+B表达式在这三种类型指令集结构上的实现方法
堆栈
累加器
寄存器
(寄存器-存储器)
寄存器
(寄存器-寄存器)
PUSH A
LOAD A
LOAD R1,A
LOAD R1,A
PUSH B
ADD B
ADD R1,B
LOAD R2,B
ADD
Store C
Store C,R1
Add R3,R1,R2
POP C
Store C,R3
三种类型指令集结构的优缺点
指令集结构类型
优 点
缺 点
堆栈型
是一种表示计算的简单模型;指令短小。
堆栈不能被随机访问,从而很难生成有效代码。同时,由于堆栈是瓶颈,所以很难被高效地实现。
累加器型
减小了机器的内部状态;指令短小。
由于累加器是唯一的暂存器,这种机器的存储器通信开销最大。
寄存器型
是代码生成最一般的模型。
所有操作数均需命名,且显式表示,因而指令比较长。
通用寄存器型指令集结构的分类
1. 通用寄存器型指令集结构的主要优点
使编译器有效地使用寄存器。
(1) 在表达式求值方面,比其它类型指令集结构 具有更大的灵活性;
(2) 寄存器可以用来存放变量。
◆ 减少存储器的通信量,加快程序的执行速度。
(因为寄存器比存储器快)
◆ 可以用更少的地址位来寻址寄存器,从而可
以有效改进程序的目标代码大小。
指令集结构的分类
3. 两种主要的指令特性能够将通用寄存器指令集结构
(GPR)进一步细分
(1) ALU指令到底有两个或是三个操作数?
◆ 有三个操作数的指令:两个源操作数
一个结果操作数
2. CPU需要设置多少个寄存器呢?
主要由编译器使用寄存器的情况来决定。
为表达式求值保留一些寄存器
为传递参数保留一些寄存器
用剩下的寄存器来保存变量
指令集结构的分类
◆ 有两个操作数的指令:一个操作数既作为源操
作数,也作为目的操作数。
(2) 在ALU指令中,有多少个操作数可以用存储器来寻
址,也即有多少个存储器操作数?
一般来说,ALU指令有0~3个存储器操作数。
指令集结构的分类
ALU指令中,存储器操作数个数和操作数个数的 所有可能组合,以及相应的机器实例
ALU指令中存储器操作数个数
ALU指令中操作数的最大个数
机器实例
0
2
IBM RT-PC
3
SPARC,MIPS
1
2
PDP-10,IBM 360,Motorola 68000
3
IBM360的部分指令
2
2
PDP-11,
部分IBM360 指令
3
3
3
VAX
(3) 通用寄存器指令集结构进一步细分为三种类型:
(4) 常见的三种通用寄存器型指令集结构的优缺点
注:表中(m,n)的含义是, 指令的n个操作
数中有m个存储器操作数。
寄存器 --- 寄存器型(R-R:register-register)
寄存器 --- 存储器型(R-M:register-memory)
存储器 --- 存储器型(M-M:memory-memory)
指令集结构的分类
指令集结构类型
优 点
缺 点
寄存器-寄存器型
(0,3)
简单,指令字长固定,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。
和指令中含有对存储器操作数访问的结构相比,指令条数多,因而其目标代码较大。
寄存器-存储器型
(1,2)
可以直接对存储器操作数进行访问,容易对指令进行编码,且其目标代码较小。
指令中的操作数类型不同。在一条指令中同时对一个寄存器操作数和存储器操作数进行编码,将限制指令所能够表示的寄存器个数。由于指令的操作数可以存储在不同类型的存储器单元,所以每条指令的执行时钟周期数也不尽相同。
存储器-存储器型(3,3)
是一种最紧密的编码方式,无需“浪费”寄存器保存变量。
指令字长多种多样。每条指令的执行时钟周期数也大不一样,对存储器的频繁访问将导致存储器访问瓶颈问题。
寻址技术
在通用寄存器指令集结构中,一般是利用寻址方
式指明指令中的操作数是一个常数、一个寄存器
操作数,抑或是一个存储器操作数。
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]
3. 寻址方式使用情况统计结果
(VAX指令集结构的机器:gcc、Spice和Tex 基准程序)
立即值寻址方式和偏移寻址方式的使用频率十分高。
4. 各种偏移量字段大小的使用情况
寄存器-寄存器型指令集结构的机器上(MIPS)
◆ 运行SPECint92基准程序集
(compress、espresso、eqntott、gcc、li)
◆ 运行SPECfp92基准程序集
(dudoc、ear、hydro2d、mdljdp2、su2cor)
寻址技术
x轴的标记是对偏移量大小进行log2(·)运算
所得,也就是偏移量字段的位数。
寻址技术
◆ 程序所使用的偏移量大小分布十分广泛;
◆ 较小的偏移量和较大的偏移量均占有相当大的比例;
◆ 将偏移量字段的大小设置为12~16位。这种长度可
以支持上述75%~99%基于偏移寻址方式的数据访
问中偏移量大小的表示。
寻址技术
5. 在一种Load/Store型指令集结构上,一些指令使用
立即值寻址方式的频率。
比较指令和ALU指令使用立即值寻址方式十分频繁。
6. 不同立即值大小的使用分布情况
将立即值的大小设置为8~16位,可以覆盖所有
使用立即值寻址方式指令的50%~80%。
寻址技术
指令集结构的功能设计
第二章 计算机指令集结构设计
操作类型
实 例
算术和逻辑运算
整数的算术和逻辑操作:加、减、与、或等。
数据传输
Load/Store
控制
分支、跳转、过程调用和返回、自陷等。
系统
操作系统调用、虚拟存储器管理等。
浮点
浮点操作:加、乘等。
十进制
十进制加、十进制乘、十进制到字符的转换。
字符串
字符串移动、字符串比较、字符串搜索等。
图形
象素操作、压缩/解压操作等。
1. 指令集中操作的分类
2. 一种指令集结构中的指令到底要支持哪些类型的
操作?
(指令集结构功能设计问题)
两种截然不同的方向:
◆ 复杂指令集计算机(CISC)
强化指令功能,实现软件功能向硬件功能转移。
◆ 精简指令集计算机(RISC)
尽可能地降低指令集结构的复杂性,以达到
简化实现,提高性能的目的。
当今指令集结构功能设计的一个主要趋势。
指令集结构的功能设计
CISC指令集结构的功能设计
CISC结构追求的目标:
强化指令功能,减少程序的指令条数,以达到
提高性能的目的。
增强指令功能主要是从如下几个方面着手:
1. 面向目标程序增强指令功能
提高运算型指令功能
提高传送指令功能
增加程序控制指令功能
指令集结构的功能设计
2.面向高级语言和编译程序改进指令系统
(1) 增加对高级语言和编译系统支持的指令功能
◆ 对源程序中各种高级语言语句进行使用频
度的统计与分析,对于使用频度高的语句,
可以设置专门的指令或采取措施增加相应
令的功能,以提高其编译速度和执行速度。
◆ 从面向编译程序,尤其是从优化代码生成
的角度进行考虑,增加指令集结构的规整
性来改进指令系统。
指令集结构的功能设计
规整性:没有或尽可能减少例外的情况和特殊的
应用,以及所有运算都能对称、均匀地
在存储器单元或寄存器单元之间进行。
(2) 高级语言计算机指令系统
◆ 面向高级语言(HL)的机器
缩小机器语言和高级语言的语义差距。
◆ 间接执行型高级语言机器
高级语言和机器语言是一一对应的,用汇
编的方法(可以用软件实现,也可以用硬件实
现)把高级语言源程序翻译成机器语言程序。
指令集结构的功能设计
◆ 直接执行型高级语言机器
高级语言就作为机器语言,直接由硬件或
固件对高级语言源程序的语句逐条进行解释以
执行它。
3. 面向操作系统的优化实现改进指令系统
操作系统的实现在很大程度上取决于体系结
构的支持。
(1) 主要表现在对以下方面的支持
指令集结构的功能设计
中断处理
进程管理
存储管理和保护
系统工作状态的建立与切换
(2) 设置指令
支持系统工作状态和访问方式转移的指令
支持进程转移的指令
支持进程同步和互斥的指令
指令集结构的功能设计
RISC指令集功能的设计
1. CISC结构存在的缺点
(1) 在CISC结构的指令系统中,各种指令的使用频
率相差悬殊。
(2) CISC结构指令系统的复杂性带来了计算机体系
结构的复杂性,这不仅增加了研制时间和成
本,而且还容易造成设计错误。
(3) CISC结构指令系统的复杂性给VLSI设计增加了
很大负担,不利于单片集成。
指令集结构的功能设计
(4) CISC结构的指令系统中,许多复杂指令需要很
复杂的操作,因而运行速度慢。
(5) 在CISC结构的指令系统中,由于各条指令的功
能不均衡性,不利于采用先进的计算机体系结
构技术(如流水技术)来提高系统的性能。
2. RISC计算机
(1) 指令系统只包含那些使用频率很高的指令
和一些必要指令。
Intel 80X86最常用的十条指令
指令集结构的功能设计
执行频率排序
80X86指令
指令执行频率(%执行指令总数)
1
Load
22%
2
条件分支
20%
3
比较
16%
4
Store
12%
5
加
8%
6
与
6%
7
减
5%
8
寄存器-寄存器间
数据移动
4%
9
调用
1%
10
返回
1%
合 计
96%
Intel 80X86最常用的十条指令
(2) 目的
使得计算机体系结构更加简单、更加合理和
更加有效,克服CISC结构的缺点,使机器速度更
快,程序运行时间缩短,从而提高计算机系统的
性能。
(3) 设计原则
选取使用频率最高的指令,并补充一些最有
用的指令;
每条指令的功能应尽可能简单,并在一个机
器周期内完成;
所有指令长度均相同;
指令集结构的功能设计
只有Load和Store操作指令才访问存储器;
其它指令操作均在寄存器之间进行;
以简单有效的方式支持高级语言。
控制指令
(1) 跳转: 当控制指令为无条件改变控制流时,
称之为“跳转”。
(2) 分支:当控制指令是有条件改变控制流时,
称之为“分支”。
指令集结构的功能设计
条件分支
跳转
过程调用
过程返回
(3) 控制流程的各种改变情况
指令集结构的功能设计
1. 控制指令的使用频率
(一台Load/Store型指令集结构的机器:
SPECint92、Specfp92基准程序)
改变控制流的大部分指令是条件分支指令。
表示分支条件的技术
测试分支条件的方法
优 点
缺 点
条件码(CC)
在程序的控制下,由ALU操作设置特殊的位。
可以自由设置分支条件。
CC是额外状态,条件码限制了指令顺序,因为必须从一条指令将分支条件信息传送到分支指令。
条件寄存器
根据比较结果测试条件寄存器。
简单
占用了一个寄存器。
比较且分支
比较操作是分支指令的一部分,通常这种比较是受一定限制的。
一条指令完成了两条指令的功能。
分支指令的操作增多。
2. 常用的三种表示分支条件的技术及其优缺点
3. 分支目标地址的表示
PC-相对寻址:在指令中提供一个和程序计数
器(PC)的值相加的偏移量。
(1) 有效地缩短指令中表示目标地址的字段的
长度;
(2) 使得代码在执行时与它被载入的位置无关。
关键问题是:
转移目标离当前控制指令的偏移量有多大?
指令集结构的功能设计
4. 过程调用和返回的状态保存
两种方法来保存寄存器的内容:
(1) “调用者保存”方法
在一个调用者调用别的过程时,必须保存调用
者所要保存的寄存器,以备调用结束返回后,能够
再次访问调用者。
(2) “被调用者保存”方法
被调用的过程必须保存它要用的寄存器,保证
不会破坏过程调用者的程序执行环境,并在过程调
用结束返回时,恢复这些寄存器的内容。
指令集结构的功能设计
指令集结构的功能设计
操作数的类型、表示和大小
操作数类型和操作数表示是软硬件主要界面之一 。
操作数类型:面向应用、面向软件系统所处理的各 种数据结构.
操作数表示:硬件结构能够识别、指令系统可以直 接调用的那些结构。
确定操作数表示是软硬件取舍折衷的问题。
第二章 计算机指令集结构设计
1. 操作数的类型
整数(定点)
浮点
十进制
字符
2. 操作数类型的两种表示方法
(1) 操作数的类型由操作码的编码指定。
(最常见的一种方法)
(2) 数据可以附上由硬件解释的标记,由这些标记
指定操作数的类型,从而选择适当的运算。
字符串
向量
堆栈
操作数的类型、表示和大小
3. 操作数大小
字节
半字(16位)
单字(32位)
双字(64位)
(1) 字符: 用ASCII码表示,为一个字节大小。
(2) 整数: 用二进制补码表示,其大小可以是字节、
半字或单字。
(3) 浮点操作数: 单精度浮点(单字大小)和双精
度浮点(双字大小).
(4) 字符串: 将字符串中的每个字符当作一个字节
来看待。
操作数的类型、表示和大小
(5) 十进制操作数
◆ 压缩十进制
用4位二进制数编码数字0~9,然后将
两个十进制数字压缩在一个字节中存储。
◆ 二进制编码十进制
将十进制数字直接用字符串来表示 。
4. 访问不同操作数大小的频率
测试统计SPECint92基准程序和SPECfp92基准
程序对字节、半字、单字和双字四种大小的操作数
访问情况。
操作数的类型、表示和大小
基准程序对单字和双字的数据访问具有较高的频率。
◆ 选择操作数字段的长度为32位,可以有效支持8、16、
32位整型操作数,以及32位浮点操作数的表示。
◆ 选择操作数字段长度为64位,则更具有一般性。
指令集格式的设计
◆ 指令由操作码和地址码组成。
◆ 指令集格式的设计
确定操作码字段和地址码字段的大小及其组合
形式,以及各种寻址方式的编码方法。
◆ 设计原则
尽可能地增加寄存器数目和寻址方式类型;
充分考虑寄存器字段和寻址方式字段对指令平均
字长的影响,以及它们对目标代码大小的影响;
设计出的指令集格式能够在具体实现中容易处理。
第二章 计算机指令集结构设计
寻址方式的表示方法
1. 两种表示寻址方式的方法
(1) 将寻址方式编码于操作码中,由操作码在描述指
令操作的同时,也描述了相应操作的寻址方式;
(2) 为每个操作数设置一个地址描述符,由该地址描
述符表示相应操作数的寻址方式。
寻址方式的表示方法
1. 两种表示寻址方式的方法
(1) 将寻址方式编码于操作码中,由操作码在描述指
令操作的同时,也描述了相应操作的寻址方式;
(2) 为每个操作数设置一个地址描述符,由该地址描
述符表示相应操作数的寻址方式。
指令集格式的设计
2. 选择哪种表示寻址方式的方法?
由两个因数决定:
(1) 指令集结构所采用的寻址方式种类及其适用范围
(2) 操作码与寻址方式之间的独立程度
指令集格式的选择
三种指令集编码格式 :
变长编码格式
固定长度编码格式
混合型编码格式
指令集格式的设计
1. 变长编码格式
◆ 有效减少指令集结构的平均指令长度,降低目标代码
的长度。
◆ 使得各条指令的字长和执行时间大不一样。
多数CISC计算机的指令集结构均是采用这种编码格式。
2. 固定长度编码格式
将操作类型和寻址方式组合编码在操作码中,所有指
令的长度是固定唯一的。
3. 混合型编码格式
通过提供一定类型的指令字长,期望能够兼
顾降低目标代码长度和降低译码复杂度两个目标。
指令集格式的设计
DLX指令集结构
DLX是一种多元未饱和型指令集结构。
DLX指令集结构的设计思想:
具有一个简单的Load/Store指令集;
注重指令流水效率;
简化指令的译码;
高效支持编译器。
第二章 计算机指令集结构设计
DLX指令集结构
1. DLX中的寄存器
(1) 32个通用寄存器
命名:R0、R1、、R31
长度:32位
寄存器R0的值总是为0。
(2) 32个浮点寄存器
命名:F0、F1、、F31
长度:32位
(用来保存32位的单精度浮点数 )
DLX指令集结构
◆ 64位双精度浮点数
相邻两个浮点寄存器奇偶对FiFi+1
(i = 0,2,4,,30)
命名: F0、F2、、F28、F30
(3) 一些特殊的寄存器
(比如用来保存浮点操作结果信息的浮点状态寄存器)
可以和通用寄存器相互进行数据传送。
DLX指令集结构
2. DLX的数据类型
DLX提供了多种长度的整型数据和浮点数据。
(1) 整型数据
有8位、16位和32位多种长度。
(当8位和16位整型数据载入到寄存器中时, 用0或数据的符号位来填充32位通用寄存器 中的剩余位。)
(2) 浮点数据
有32位单精度浮点数和64位双精度浮点数。
浮点数据表示采用的是IEEE 754标准。
DLX指令集结构
3. DLX的寻址方式和数据传送
(1) 寻址方式
寄存器寻址
立即值寻址
偏移寻址
寄存器间接寻址
(2) 寄存器寻址字段的大小为5位,用来表示32个 通用寄存器或浮点寄存器。
(3) 存储器地址采用的是高端字节表示顺序,存
储器按字节寻址,其地址宽度为32位。
DLX指令集结构
4. DLX的指令格式
◆ 寻址方式编码在操作码中。
◆ 指令的字长32位,其中用6位表示操作码。
(4) 通过寄存器(通用寄存器和浮点寄存器)和存
储器之间的数据传送操作完成对存储器的访问。
DLX指令集结构
各种类型
指令
的格式
中的操作
(1) 四种类型的操作
Load和Store操作
ALU操作
分支和跳转操作
浮点操作
(2) 约定
(1) 符号“”: 数据传送操作
其后附带一个下标n,也即“n” 表示传送 一个n位数据。
(2) 符号“##”: 两个域的串联操作
DLX指令集结构
(3) 域的下标:表明从该域中选择某一位。
域中位的标记是从最高位开始标记,并且 起始标记为0。
下标可以是一个单独的数字。
如 Regs[R4]0 :选择寄存器R4中内容的符号位。
下标也可以是一个范围。
如 Regs[R3]24..31 :选择寄存器R3中内容 的最低一个字节。
(4) 上标:表示复制一个域。
如 024可以得到一个24位全为0的一个域。
DLX指令集结构
(5) 变量Mem:表示存储器中的一个数组, 存储器按照字节寻址。
举例 R8和R10:32位寄存器
Regs[R10]16..31 16(Mem[Regs[R8]]0)8 ##
Mem[Regs[R8]]的含义。
3. DLX中的四种操作类型
(1) Load和Store操作
DLX指令集结构
指令实例
指令名称
含 义
LW R1, 30 (R2)
载入整型字
Regs[R1] ←32 Mem[30+Regs[R2]]
LW R1, 1000 (R0)
载入整型字
Regs[R1] ←32 Mem[1000+0]
LB R1, 40 (R3)
载入字节
Regs[R1] ←32 (Mem[40+Regs[R3]]0)24 ## Mem[40+Regs[R3]]
LBU R1, 40 (R3)
载入无符号字节
Regs[R1] ←32 024 ## Mem[40+Regs[R3]]
LH R1, 40 (R3)
载入整型半字
Regs[R1] ←32 (Mem[40+Regs[R3]]0)16 ## Mem[40+Regs[R3]]
## Mem[41+Regs[R3]]
LF F0, 50 (R3)
载入单精度浮点
Regs[F0] ←32 Mem[50+Regs[R3]]
LD F0, 50 (R2)
载入双精度浮点
Regs[F0] ## Regs[F1] ←64 Mem[50+Regs[R2]]
SW 500 (R4), R3
储存整型字
Mem[500+Regs[R4]] ←32 Regs[R3]
SF 40 (R3), F0
储存单精度浮点
Mem[40+Regs[R3]] ←32 Regs[F0]
SD 40 (R3), F0
储存双精度浮点
Mem[40+Regs[R3]] ←32 Regs[F0]
Mem[44+Regs[R3]] ←32 Regs[F1]
SH 502 (R2), R31
储存整型半字
Mem[502+Regs[R2]] ←16 Regs[R31]16..31
SB 41 (R3), R2
储存整型字节
Mem[41+Regs[R3]] ←8 Regs[R2]24..31
DLX中Load和Store指令实例
(2) ALU操作
简单的算术和逻辑运算
寄存器比较指令(,,,,,)
指令实例
指令名称
含 义
Add R1, R2, R3
加
Regs[R1] ← Regs[R2] + Regs[R3]
ADDI R1, R2, #3
和立即值相加
Regs[R1] ← Regs[R2] + 3
LHI R1, #42
载入高位立即值
Regs[R1] ← 42 ## 016
SLLI R1, R2, #5
逻辑左移的
立即值形式
Regs[R1] ← Regs[R2] <<5
SLT R1, R2, R3
设置小于
if (Regs[R2] < Regs[R3])
Regs[R1] ← 1 else Regs[R1] ← 0
ALU指令实例
DLX指令集结构
(3) 分支和跳转操作
◆ 根据描述目标地址的方法和是否链接可以将 跳转操作指令分为四种类型。
其中:
两种类型的跳转指令用带符号位的26位
偏移量加上程序计数器的值来确定跳转
的目标地址;
另外两种类型的跳转指令则指定一个寄 存器,由寄存器中的内容决定跳转的目 标地址。
DLX指令集结构
◆ 跳转有两种类型
简单跳转
跳转并链接(用于过程调用)
返回一个地址,也即将下一条顺序指令 地址(返回地址)保存在寄存器R31中。
◆ 所有分支指令均是条件分支指令。
分支目标地址由一个带符号的26位偏移量加 上程序计数器的值来确定。
DLX指令集结构
指令实例
指令名称
含 义
J name
跳转
PC ← name;
((PC+4)-225) ≤ name ≤((PC+4)+225)
JAL name
跳转并链接
Regs[R31] ← PC+4; PC ← name;
((PC+4)-225) ≤ name ≤((PC+4)+225)
JALR R2
寄存器型
跳转并链接
Regs[R31] ← PC+4; PC ← Regs[R2];
JR R3
寄存器型跳转
PC ← Regs[R3];
BEQZ R4 ,name
“等于0”分支
if (Regs[R4]==0) PC ← name;
((PC+4)-215) ≤ name ≤((PC+4)+215)
BNEZ
R4 , name
“不等于0”分支
if (Regs[R4]!=0) PC ← name;
((PC+4)-215) ≤ name ≤((PC+4)+215)
典型的分支和跳转指令
DLX指令集结构
(4) 浮点操作
浮点操作:加、减、乘、除。
(后缀D:双精度浮点操作
后缀F:单精度浮点操作)
◆ 下表列出了DLX所有指令及其含义。
◆ 各种指令使用频率测试统计结果。
(SPECint92和SPECfp92基准程序)
DLX指令集结构
DLX中的所有指令及其含义
指令
类型
操作码
含 义
数据
传送
LB,LBU,SB
载入字节,载入无符号字节,储存字节
LH,LHU,SH
载入半字,载入无符号半字,储存半字
LW,SW
载入字,储存字
LF,LD,SF,SD
载入单精度浮点,载入双精度浮点,储存单精度浮点,储存双精度浮点
MOVI2S,MOVS2I
将通用寄存器中的内容移入特殊寄存器,将特殊寄存器中的内容移入通用寄存器
MOVF,MOVD
将一个单精度/双精度浮点寄存器的内容拷贝到另一个单精度/双精度浮点寄存器
MOVFP2I,MOVI2FP
将32位浮点寄存器中的内容移入整型寄存器,将32位整型寄存器中的内容移入浮点寄存器
DLX指令集结构
指令
类型
操作码
含 义
算术
/逻辑
ADD,ADDI,ADDU,ADDUI
带符号加,带符号立即值加,无符号加,无符号立即值加
SUB,SUBI,SUBU,SUBUI
带符号减,带符号立即值减,无符号减,无符号立即值减
MULT,MULTU,DIV,DIVU
带符号乘,无符号乘,带符号除,无符号除
AND,ANDI
与,和立即值与
OR,ORI,XOR,XORI
或,和立即值或,异或,和立即值异或
LHI
载入高位立即值
SLL,SRL,SRA,SLLI,SRLI,SRAI
包含了立即值(S_I)和变量(S_)的移位操作,移位有:逻辑左移,逻辑右移和算术右移
S_,S_I
设置条件,“_”可以是LT,GT,LE,GE,EQ,NE
DLX指令集结构
指令类型
操作码
含 义
控 制
BEQZ,BNEZ
根据指定通用寄存器的内容等于/不等于0分支
BFPT,BFPF
测试浮点状态寄存器中的比较位为真/假进行分支
J,JR
跳转,基于寄存器的跳转
JAL,JALR
跳转并链接,基于寄存器的跳转并链接
TRAP
转换到操作系统
RFE
从异常恢复用户模式
DLX指令集结构
指令
类型
操作码
含 义
浮 点
ADDD,ADDF
双精度浮点加,单精度浮点加
SUBD,SUBF
双精度浮点减,单精度浮点减
MULTD,MULTF
双精度浮点乘,单精度浮点乘
DIVD,DIVF
双精度浮点除,单精度浮点除
CVTF2D,CVTF2I,CVTD2F,
CTD2I,CVTI2F,CVTI2D
转换指令,CVTx2y表示从类型x转换到类型y,其中x和y可以是I(整型)、D(双精度浮点)、F(单精度浮点)
_D,_F
双精度浮点和单精度浮点比较,“_”可以是LT、GT、LE、GE、EQ、NE,根据比较结果设置浮点状态寄存器中的位
DLX指令集结构
基于SPECint92基准程序集的指令使用频率测量统计结果
指令
compress
eqntott
Espresso
gcc(cc1)
li
整型平均
载入
%
%
%
%
%
26%
存储
%
%
%
%
%
9%
加
%
%
%
%
%
14%
减
%
%
%
0%
乘
%
0%
除
0%
比较
%
%
%
%
%
13%
载入立即值
%
%
%
%
%
3%
DLX指令集结构
指令
compress
eqntott
Espresso
gcc(cc1)
li
整型平均
条件分支
%
%
%
%
%
16%
无条件分支
%
%
%
%
%
1%
调用
%
%
%
%
%
1%
返回,跳转
%
%
%
%
%
1%
移位
%
%
%
%
%
4%
与
%
%
%
%
%
3%
或
%
%
%
%
%
5%
其它(异或,非)
%
%
%
%
1%
DLX指令集结构
指令
compress
eqntott
Espresso
gcc(cc1)
li
整型平均
载入浮点数
0%
储存浮点数
0%
浮点加
0%
浮点减
0%
浮点乘
0%
浮点除
0%
浮点比较
0%
浮点寄存器移动
0%
其它浮点
操作
0%
DLX指令集结构
基于SPECfp92基准程序集的指令使用频率测量统计结果
指令
doduc
ear
hydro2d
mdljdp2
su2cor
整型平均
载入
%
%
%
%
%
1%
储存
%
%
%
%
1%
加
%
%
%
%
%
11%
减
%
%
%
0%
乘
0%
除
0%
比较
%
%
%
%
%
2%
载入立即值
%
%
%
%
1%
指令
doduc
ear
hydro2d
mdljdp2
su2cor
整型平均
条件分支
%
%
%
%
%
8%
无条件分支
%
%
%
%
0%
调用
%
%
%
1%
返回,跳转
%
%
%
1%
移位
%
%
%
%
%
2%
与
%
%
%
0%
或
%
%
%
%
0%
其它(异或,非)
0%
DLX指令集结构
指令
doduc
ear
hydro2d
mdljdp2
su2cor
整型平均
载入浮点数
%
%
%
%
%
23%
储存浮点数
%
%
%
%
%
9%
浮点加
%
%
%
%
%
8%
浮点减
%
%
%
%
%
6%
浮点乘
%
%
%
%
%
13%
浮点除
%
%
%
%
1%
浮点比较
%
%
%
%
%
6%
浮点寄存器移动
%
%
%
%
%
2%
其它浮点
操作
%
%
%
%
%
2%
DLX指令集结构
动画演示
DLX指令集结构
动画演示
DLX指令集结构
DLX指令集结构效能分析
DLX指令集结构的指令格式、寻址方式和操作都非常简单。
DLX指令集结构