<计算机系统结构>CA3 指令系统
本文最后更新于:2023年6月27日 上午
CA3 指令系统
指令系统是软件与硬件的界面。
对于编译程序设计者,要求:
- 规整性
- 对称性
- 独立性和全能性
- 正交性
- 可结合性
- 可扩充性
对于系统结构设计者,要求:
- 指令码密度适中。即功能的分配适当均匀
- 兼容性。主要指向后兼容
- 适应性
CA3.1 指令系统的功能和优化
指令系统的功能有以下几类:
-
算数与逻辑运算指令
包括:加减乘除、异号等算术运算;与或非、异或等逻辑运算
-
移位操作指令
算术移位、逻辑移位、循环移位
-
数据的传输指令
不同通用寄存器、主存储器的不同存储单元,及彼此间传输。
-
输入输出指令
通用寄存器与输入输出设备(接口)间的传送
-
转移指令
变动程序中指令执行次序的指令。分为无条件转移指令和条件转移指令
-
子程序调用和返回指令
是特定的转移指令。调用与返回指令需配套使用,子程序最后一条语句必定是返回指令。
-
堆栈操作指令
入栈、出栈
-
其他指令
置条件码、开关中断、停机指令、空操作指令、特权指令
对指令系统的优化分为以下部分:
-
对操作码的优化
变长操作码:比如构造哈夫曼树,使发生概率高的指令编码长度较短,概率小的代码较长。
-
指令字格式优化
采用扩展操作码,根据指令频度选择合适编码方式,缩短其平均码长
采用多种寻址方式,缩短地址码长度,在有限长度内提供更多信息
采用多种(0 地址、1 地址、2 地址、3 地址等)地址制,增强指令功能
CA3.2 CISC 与 RISC
设计 ISC(指令集体系结构)时,有两种设计策略:CISC、RISC
#CISC(复杂指令集体系结构)
增强指令功能,将更多功能交给硬件实现。指令数量越来越多。
优化方法:用一条指令替换一串指令、增加新指令、增强指令功能、增加寻址方式、增加数据表示方式
优化途径:
-
面向目标程序:对已有指令系统进行分析,用新指令和基本指令串取代一些旧功能
有如下途径实现:
-
根据执行情况进行统计,根据使用频度分析和改进
高频指令:增强功能,加快执行速度、缩短指令字长
低频指令:将功能合并进高频指令,在下一代中取消该指令
高频指令串:用新指令替代
静态使用频度:减少存储空间
动态使用频度:减少程序执行时间
-
增设强功能符合指令来取代原先宏指令或子程序实现的功能,使其由微程序实现
-
-
面向高级语言:缩短高级语言与机器语言的语义差距,支持高级语言编译,缩短编译程序长度和执行时间
有如下途径实现:
- 通过对源程序中高级语句使用频度进行统计来分析改进。
- 或者面向编译,通过优化代码生成来改进。
- 改进指令系统,使其与各语言的语义差距有同等缩小
- 采用让计算机具有分别面向多种语言的多种指令集,多种系统结构面向问题动态自动寻优的计算机系统
- 发展高级语言计算机
-
面向操作系统:缩短操作系统与计算机系统结构间的语义差距,减少运行操作系统的时间,节省操作系统软件占用的存储空间
有如下途径实现:
- 通过对操作系统中常用指令和指令串的使用频度进行统计分析来改进(效果有限)
- 考虑如何增设专用于操作系统的新指令
#RISC(精简指令集体系结构)
尽可能将指令集简单化,指令数量少,功能简单。其设计原则为:
- 确定指令系统时,只选择使用频度很高的指令。在此基础上,增加少量能有效支持操作系统、高级语言实现和其他功能的最有用的指令。指令条数不超过 100 条。
- 大大减少指令系统可采用的寻址方式的种类,不超过 2 种。简化指令格式,格式也不超过 2 种,指令具有相同长度。
- 让所有指令都在一个机器周期内完成。
- 扩大通用寄存器个数,一般不少于 32 个,以尽可能减少访存次数。所有指令中只有 存、取 指令可以访存,其他指令一律在寄存器执行
- 大多数指令采用硬联控制实现,仅少数指令采用微程序实现,以提高指令速度
- 精简指令和优化设计编译程序,以支持高级语言实现
RISC 中采用的基本技术:
-
按 RISC 机器一般原则设计的技术
-
逻辑上采用硬联实现和微程序固件实现的技术
-
在 CPU 中设置数量较大的寄存器组,采用 重叠寄存器窗口 技术
寄存器窗口分为大小固定的 高区、本地、低区 三个区段。其中:本地区 存放局部变量;高区 存放调用过程传入的参数 与 返回结果;低区 存放送往调用过程的参数 与 该过程返回的结果。被调用过程的高区与调用过程的地区重叠。
-
指令执行采取流水和延迟转移技术
-
采用高速缓冲存储器(Cache),设置指令 Cache 和数据 Cache 分别存放指令和数据
-
优化设计编译系统。编译程序尽量优化寄存器分配,提高使用效率,减少访存次数
RISC 的优点:简化了指令系统设计,适合超大规模集成电路实现,也能提高机器执行速度和效率。降低了设计成本,提高了系统可靠性,并可提高直接支持高级语言的能力,简化编译程序设计。
RISC 的不足:指令较少,许多复杂功能要多条指令完成。对浮点运算、虚拟存贮器的支持不理想。且编译程序编写难度更高。