计算机体系结构第2章指令系统的设计(1)⽂章⽬录
第2章指令系统的设计
2. 1 指令系统结构的分类
2.1.1 指令系统结构的主要分类
区别不同指令系统结构的主要因素: CPU中⽤来存储操作数的存储单元的类型
CPU中⽤来存储操作数的存储单元有三种:
1. 堆栈;
2. 累加器;
3. 通⽤寄存器组
根据存储操作数的存储单元将指令系统的结构分为三种类型:
堆栈结构
累加器结构
通⽤寄存器结构,根据操作数的来源不同,⼜可进⼀步分为:
寄存器-存储器结构(RM结构)
寄存器-寄存器结构(RR结构):也称为load-store结构,只有load指令和store指令能够访问存储器对于不同类型的结构,操作数的位置、个数以及操作数的给出⽅式(显式或隐式)也会不同。
显式给出:⽤指令字中的操作数字段给出
隐式给出:使⽤事先约定好的单元
操作数的给出⽅式说明举例显式给出⽤指令字中的操作数字段给出通⽤寄存器结构
隐式给出使⽤事先约定好的单元堆栈结构(操作数是栈顶和次栈顶顶数据,通过PUSH/POP操作,结果保持在栈顶)累加器结构(⼀个操作数默认在累加器中)
不同指令系统结构的⽰例
例:表达式Z=X+Y在4种类型指令系统结构上的代码。假设:X、Y、Z均保存在存储器单元中,并且不
能破坏X和Y的值。
堆 栈累加器寄存器(RM型)寄存器(RR型)push X load X load R1,X load R1,X push Y add Y add R1,Y load R2,Y add store Z store R1,Z add R3,R1,R2 pop Z store R3,Z
pop Z store R3,Z
堆 栈累加器寄存器(RM型)寄存器(RR型)
2.1.2 通⽤寄存器型结构
通⽤寄存器型结构是现代指令系统结构的主流,主要原因如下:
1. 堆栈型和累加器型计算机的优点是指令字⽐较短,程序占⽤的空间⽐较⼩。但是,它们都有着难以克服的缺点。
1. 在堆栈型机器中,不能随机地访问堆栈,难以⽣成有效的代码,⽽且对栈顶的访问是个瓶颈。
2. 在累加器型的机器中,由于只有⼀个中间结果暂存器(累加器),所以需要频繁地访问在储器。
2. 通⽤寄存器型结构在灵活性和提⾼性能⽅⾯有明显的优势
1. 跟其它的CPU内部存储单元⼀样,寄存器的访问速度⽐存储器快。
2. 对编译器⽽⾔,能更加容易、有效地分配和使⽤寄存器。
3. 寄存器可以⽤来存放变量。
1. 加快程序的执⾏速度(因为寄存器⽐存储器快)
2. 减少对存储器的访问
3. ⽤更少的地址位(相对于存储器地址来说)来对寄存器进⾏寻址,从⽽有效地减少程序的⽬标代码的⼤⼩。
根据ALU指令的操作数的两个特征对通⽤寄存器型结构进⼀步细分
3个操作数的指令:两个源操作数、⼀个⽬的操作数
2个操作数的指令:其中⼀个操作数既作为源操作数,⼜作为⽬的操作数。
ALU指令中存储器操作数的个数,可以是0~3中的某⼀个,为0表⽰没有存储器操作数。
ALU指令中操作数个数和存储器操作数个数的典型组合
ALU指令中存 储器操作数的个数ALU指令中操作数的最多个数结构类型机器实例
03RR MIPS,SPARC,Alpha,PowerPC,ARM
12RM IBM 360/370,Intel 80x86,Motorola 68000
13RM IBM 360/370
22MM VAX
33MM VAX
根据ALU指令中存储器操作数的个数,可将通⽤寄存器型结构进⼀步细分为3种类型
寄存器-寄存器型(RR型)
寄存器-存储器型(RM型)
存储器-存储器型(MM型)
3种通⽤寄存器型结构的优缺点如下表所⽰,表中(m,n)表⽰指令的n个操作数中有m个存储器操作数。
指令系统结构类型优 点缺 点
寄存器-寄存器型(0,3)指令字长固定,指令结构简洁,是⼀种简单的代码⽣成模
型,各种指令的执⾏时钟周期数相近。
与指令中含存储器操作数的指令系统结构相⽐,指令条数多,⽬标代
码不够紧凑,因⽽程序占⽤的空间⽐较⼤。
寄存器-存储器型(1,2)可以在ALU指令中直接对存储器操作数进⾏引⽤,⽽不必
先⽤load指令进⾏加载。
容易对指令进⾏编码,⽬标代码⽐较紧凑。
指令中的两个操作数不对称。
在⼀条指令中同时对寄存器操作数和存储器操作数进⾏编码,有可能
限制指令所能够表⽰的寄存器个数。
指令的执⾏时钟周期数因操作数的来源(寄存器或存储器)不同⽽差
别⽐较⼤。
存储器-存储器型(2,2) 或(3,3)⽬标代码最紧凑,不需要设置寄存器来保存变量。
指令字长变化⼤,特别是3操作数指令。
⽽且每条指令完成的⼯作也差别很⼤。
对存储器的频繁访问会使存储器成为瓶颈
这种类型的指令系统结构现在已不⽤了。
指令系统结构类型优 点缺 点
2.2 寻址⽅式
2.2.1 寻址⽅式的定义
寻址⽅式:指令系统中如何形成所要访问的数据的地址。
寻址⽅式可以指明指令中的操作数是⼀个常数、⼀个寄存器操作数或者是⼀个存储器操作数。
对于存储器操作数来说,由寻址⽅式确定的存储器地址称为有效地址。
⽰例:Mem[Regs[R1]]:以寄存器R1中的内容作为地址的存储器单元中的内容
采⽤多种寻址⽅式可以显著地减少程序的指令条数,但可能增加计算机的实现复杂度以及指令的CPI。
⽴即数寻址⽅式和偏移寻址⽅式的使⽤频度最⾼。
2.2.2 ⽴即数寻址⽅式
⽴即数寻址⽅式主要⽤于ALU指令、⽐较指令、给寄存器装⼊常数等。
对指令系统的结构设计⽽⾔,⾸先要确定的是所有的指令还是只有部分指令具有⽴即数寻址⽅式。
⼤约1/4的load指令和ALU指令采⽤了⽴即数寻址。
2.2.3 两种表⽰寻址⽅式的⽅法
将寻址⽅式编码于操作码中,由操作码描述相应操作的寻址⽅式。
适合:处理机采⽤load-store结构,寻址⽅式只有很少⼏种。
在指令字中设置专门的寻址字段,⽤以直接指出寻址⽅式。
灵活,操作码短,但需要设置专门的寻址⽅式字段,⽽且操作码和寻址⽅式字段合起来所需要的总位数可能会⽐隐含⽅法的总位数多。
适合:处理机具有多种寻址⽅式,且指令有多个操作数。
需要注意的问题:物理地址空间的信息如何存放:
信息宽度不超过主存宽度的信息必须存放在⼀个存储字内,不能跨边界。
必须做到:信息在主存中存放的起始地址必须是该信息宽度(字节数)的整数倍
满⾜以下条件
字节信息的起始地址为:X…XXXX
半字信息的起始地址为:X…XXX0
单字信息的起始地址为:X…XX00
双字信息的起始地址为:X…X000
存在存储空间的浪费 ,但保证访问速度。
2.3 指令系统的设计与优化
2.3.1 指令系统设计的基本原则
指令系统的设计
⾸先考虑所应实现的基本功能,确定哪些基本功能应该由硬件实现,哪些功能由软件实现⽐较合适。
包括
指令的功能设计
指令的格式的设计
在确定哪些基本功能⽤硬件来实现时,主要考虑3个因素:速度、成本、灵活性。
硬件实现的特点:速度快、成本⾼、灵活性差
软件实现的特点:速度慢、价格便宜、灵活性好
对指令系统的基本要求
完整性、规整性、正交性、⾼效率、兼容性
1. 完整性:在⼀个有限可⽤的存储空间内,对于任何可解问题,编制计算程序时,指令系统提供的指令⾜够使⽤。
1. 要求指令系统功能齐全、使⽤⽅便
2. 下表为许多指令系统结构都包含的⼀些指令类型
1. 前4类属于通⽤计算机系统的基本指令
2. 对于最后4种类型的操作,不同指令系统结构的⽀持⼤不相同 。
操作类型实 例
算术和逻辑运算算术运算和逻辑操作:加,减,乘,除,与,或等
数据传输load,store
控制分⽀,跳转,过程调⽤和返回,⾃陷等
系统操作系统调⽤,虚拟存储器管理等
浮点浮点操作:加,减,乘,除,⽐较等
⼗进制⼗进制加,⼗进制乘,⼗进制到字符的转换等
字符串字符串移动,字符串⽐较,字符串搜索等
图形像素操作,压缩/解压操作等
2. 规整性:主要包括对称性和均匀性。
1. 对称性:所有与指令系统有关的存储单元的使⽤、操作码的设置等都是对称的。
1. 例如:在存储单元的使⽤上,所有通⽤寄存器都要同等对待。在操作码的设置上,如果设置了A-B的指令,就应该也设置
B-A的指令。
2. 均匀性:指对于各种不同的操作数类型、字长、操作种类和数据存储单元,指令的设置都要同等对待。
1. 例如:如果某机器有5种数据表⽰,4种字长,两种存储单元,则要设置5×4×2=40种同⼀操作的指令。
3. 正交性:在指令中各个不同含义的字段,如操作类型、数据类型、寻址⽅式字段等,在编码时应互不相关、相互独⽴。
4. ⾼效率:指指令的执⾏速度快、使⽤频度⾼。
5. 兼容性:主要是要实现向后兼容,指令系统可以增加新指令,但不能删除指令或更改指令的功能。
指令系统的两种设计策略
在设计指令系统时,有两种截然不同的设计策略。(产⽣了两类不同的计算机系统 )
CISC(复杂指令系统计算机)
增强指令功能,把越来越多的功能交由硬件来实现,并且指令的数量也是越来越多。
RISC(精简指令系统计算机)
尽可能地把指令系统简化,不仅指令的条数少,⽽且指令的功能也⽐较简单。
2.3.2 控制指令
控制指令是⽤来改变控制流的。
跳转:当指令是⽆条件改变控制流时,称之为跳转指令。
分⽀:当控制指令是有条件改变控制流时,则称之为分⽀指令。
能够改变控制流的指令
分⽀、跳转、过程调⽤、过程返回
根据控制指令的使⽤频度:改变控制流的⼤部分指令是分⽀指令(条件转移)。
分⽀条件的⽅法及其优缺点
名 称检测分⽀条件的⽅法优 点缺 点
条件码(CC)检测由ALU操作设置的⼀些特殊的位(即
CC)
可以⾃由设置分⽀条件
条件码是增设的状态。⽽且它限制了指令的执⾏顺序,因为要保证
条件码能顺利地传送给分⽀指令。
条件寄存
器⽐较指令把⽐较结果放⼊任何⼀个寄存器,
检测时就检测该寄存器。
简单占⽤了⼀个寄存器
⽐较与分
⽀⽐较操作是分⽀指令的⼀部分,通常这种⽐
x86架构和arm架构区别
较是受到⼀定限制的。
⽤⼀条指令(⽽不是两
条)就能实现分⽀
当采⽤流⽔⽅式时,该指令的操作可能太多,在⼀拍内做不完。
在控制指令中,必须给出转移的⽬标地址,⽽转移⽬标地址的表⽰:
最常⽤的⽅法
在指令中提供⼀个偏移量,由该偏移量和程序计数器(PC)的值相加⽽得出⽬标地址。(PC相对寻址)
优点
有效地减少表⽰该⽬标地址所需要的位数
位置⽆关(代码可被装载到主存的任意位置执⾏)
关键:确定偏移量字段的长度
模拟结果表明:采⽤4~8位的偏移量字段(以指令字为单位)就能表⽰⼤多数控制指令的转移⽬标地址了。对于过程调⽤和返回
除了要改变控制流之外,可能还要保存机器状态。⾄少也得保存返回地址(放在专⽤的链接寄存器或堆栈中)。
过去有些指令系统结构提供了专门的保存机制来保存许多寄存器的内容。
现在较新的指令系统结构则要求由编译器⽣成load和store指令来保存或恢复寄存器的内容。
2.3.3 指令操作码的优化
2.3.3.1 指令的组成
指令由两部分组成:操作码、地址码(地址信息)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论