指令系统的设计
- 区别不同指令系统结构的主要因素:CPU中用来存储操作数的存储单元的类型。
- CPU中用来存储操作数的存储单元:堆栈、累加器、通用寄存器组。
- 指令系统的结构分为三种类型:堆栈结构、累加器结构、通用寄存器结构。
- 对于不同类型的结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。操作数的给出方式为:显式给出(用指令字中的操作数字段给出)、隐式给出(使用事先约定好的单元)。
- ALU指令的操作数个数
- 3个操作数的指令:两个源操作数、一个目的操作数
- 2个操作数的指令:其中一个操作数既作为源操作数,又作为目的操作数。
- ALU指令中存储器操作数的个数可以是0~3中的某一个,为0表示没有存储器操作数。
- 通用寄存器型结构进一步细分为3种类型:寄存器-寄存器型(RR型)(操作数可以来自存储器 )、寄存器-存储器型(RM型)(所有操作数都是来自通用寄存器组) 、存储器-存储器型(MM型)。
- 3种通用寄存器型结构的优缺点((m,n)表示指令的n个操作数中有m个存储器操作数):
- 寄存器-寄存器型(0,3)
- 优点:指令字长固定,指令结构简洁,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。
- 缺点:与指令中含存储器操作数的指令系统结构相比,指令条数多,目标代码不够紧凑,因而程序占用的空间比较大。
- 寄存器-存储器型(1,2)
- 优点:可以在ALU指令中直接对存储器操作数进行引用,而不必先用load指令进行加载。容易对指令进行编码,目标代码比较紧凑。
- 缺点:指令中的两个操作数不对称。在一条指令中同时对寄存器操作数和存储器操作数进行编码,有可能限制指令所能够表示的寄存器个数。指令的执行时钟周期数因操作数的来 源(寄存器或存储器)不同而差别比较大。
- 存储器-存储器型(2,2)或(3,3)
- 优点:目标代码最紧凑,不需要设置寄存器来保存变量。
- 缺点:指令字长变化很大,特别是3操作数指令。而且每条指令完成的工作也差别很大。对存储器的频繁访问会使存储器成为瓶颈。这种类型的指令系统结构现在已不用了。
- 寄存器-寄存器型(0,3)
- RR也称为load-store结构,这个名称强调:只有load指令和store指令能够访问存储器。
- 寻址方式:指令系统中如何形成所要访问的数据的地址。
- 寻址方式可以指明指令中的操作数是一个常数、一个寄存器操作数或者是一个存储器操作数。
- 对于存储器操作数来说,由寻址方式确定的存储器地址称为有效地址。
- 两种表示寻址方式的方法:
- 将寻址方式编码于操作码中,由操作码描述相应操作的寻址方式;
- 在指令字中设置专门的寻址字段,用以直接指出寻址方式。
- 指令系统的设计包括:指令的功能设计、指令格式的设计。
- 在确定哪些基本功能用硬件来实现时,主要考虑3个因素:速度、成本、灵活性。
- 对指令系统的基本要求完整性、规整性、正交性、高效率、兼容性。
- 完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令系统所提供的指令足够使用。
- 规整性:主要包括对称性和均匀性。
- 正交性:在指令中各个不同含义的字段,如操作类型、数据类型、寻址方式字段等,在编码时应互不相关、相互独立。
- 高效率:指指令的执行速度快、使用频度高。
- 兼容性:主要是要实现向后兼容,指令系统可以增加新指令,但不能删除指令或更改指令的功能。
- 在设计指令系统时,有两种截然不同的设计策略:
- CISC(复杂指令系统计算机)
- 增强指令功能,把越来越多的功能交由硬件来实现,并且指令的数量也是越来越多。
- RISC(精简指令系统计算机)
- 尽可能地把指令系统简化,不仅指令的条数少,而且指令的功能也比较简单。
- CISC(复杂指令系统计算机)
- 控制指令是用来改变控制流的。
- 跳转:当指令是无条件改变控制流时,称之为跳转指令。
- 分支:当控制指令是有条件改变控制流时,则称之为分支指令。
- 能够改变控制流的指令:分支、跳转、过程调用、过程返回。
- 指令由两部分组成:操作码、地址码。
- 指令格式的设计:
- 确定指令字的编码方式,包括操作码字段和地;
- 址码字段的编码和表示方式。
- 指令格式的优化:如何用最短的位数来表示指令的操作信息和地址信息。
- 构造哈夫曼树的方法 :
- 将各事件按其使用频度从小到大依次排列 。
- 每次从中选择两个频度值最小的结点,将其合并成一个新的结点,并把新结点画在所选结点的上面, 然后用两条边把新结点分别与那两个结点相连。
- 新结点的频度值是所选两个结点的频度值的和。
- 把新结点与其他剩余未结合的结点一起,再以上面的步骤进行处理,反复进行,直到全部结点都结合完毕、形成根结点为止。
- 操作码优化的程度可以用信息熵来衡量。
- 表示用二进制编码表示n个码点时,理论上的最短平均编码长度 。哈夫曼编码的平均码长是
- 信息冗余量为
- 扩展操作码
- 位于定长二进制编码和哈夫曼编码之间的一种编码方案。
- 采用有限几种固定长度的码长,仍然采用高概率的用短码、低概率用长码的哈夫曼压缩思想,使操作码平均长度缩短。
- 指令系统的3种编码格式:可变长度编码格式、固定长度编码格式、混合型编码格式。
- CISC指令系统的一大特点;指令数量多、功能多样。
- 设计RISC机器遵循的原则 :
- 指令条数少、指令功能简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令;
- 采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位;
- 指令的执行在单个机器周期内完成;(采用流水线机制)
- 只有load和store指令才能访问存储器,其它指令的操作都是在寄存器之间进行;(即采用load-store结构)
- 大多数指令都采用硬连逻辑来实现;
- 强调优化编译器的作用,为高级语言程序生成优化的代码;
- 充分利用流水技术来提高性能。
- 数据表示:计算机硬件能够直接识别、指令系统可以直接调用的数据类型。
- 数据结构:由软件进行处理和实现的各种数据类型。
- 操作数的大小:操作数的位数或字节数。主要的大小:字节(8位)、半字(16位)、字(32位)、和双字(64位)。
- MIPS的寄存器
- 32个64位通用寄存器(GPRs)R0,R1,…,R31,也称为整数寄存器,R0的值永远是0。
- 32个64位浮点数寄存器(FPRs)F0,F1,…,F31,用来存放32个单精度浮点数(32位)或个双精度浮点数(64位)。存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。
- 浮点状态寄存器:用来保存有关浮点操作结果的信息。
- MIPS的数据表示:整数(字节(8位)、半字(16位)、字(32位)、双字(64位))、浮点数(单精度浮点数(32位)、双精度浮点数(64位))。
- MIPS指令可以分为四大类:load和store,ALU操作,分支与跳转,浮点操作。
分类:
计算机系统结构教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!