基本概念和分类
ISA(指令系统)定义了软硬件交互的协约。
指令系统设计原则
- 可编程性
- 可实现性
- 兼容性
指令系统设计要素
指令格式:包括了指令长度(定长或者是变长)以及编码方式
操作数存储位置(寄存器、主存、累加器、堆栈)、类型(整型、浮点)、长度(字节、字、双字)和个数(1,2,3,多操作数)
寻址方式
支持的操作类型:加减、比较
指令系统结构分类
根据操作数的存储位置对指令进行分类:
- 主存型结构:主存
- 累加器型结构:累加器
- 堆栈型结构:堆栈
- 通用寄存器结构:通用寄存器组
指令系统中操作数给出方式:
- 显式给出:用指令字中的操作数字段给出
- 隐式给出:隐式给出则是使用实现约定好的单元
指令系统的发展和改进
由性能公式:CPU时间=指令条数IC*CPI *周期时间
复杂指令系统CISC
改进方法:
- 减少指令条数,使用复杂的指令
- 对于使用频率高的指令串,用一条新的指令来代替
问题:
- 设计周期长,准确性难以保证
- 需要大量的硬件支持
- 很多复杂指令使用频率低,造成资源浪费
- 许多指令由于操作复杂,其CPI值比较大,执行速度慢
- 规整性不好,不利于采用流水线技术来提高性能
精简指令系统RISC
RISC遵循的原则:
- 指令条数少,功能简单
【只选取使用频率很高的指令,再补充一些其他最有用的指令】 - 指令格式简单、规整、并减少寻址方式
- 指令的执行在单个周期内完成(采用流水线机制)
- 只有load和store指令才能访问存储器,其他指令的操作都是在寄存器之间进行(load-store结构)
- 大多数指令都采用硬连逻辑来实现
- 强调优化编译器的作用,为高级语言程序生成优化的代码
- 充分利用流水线技术来提高性能
改进方法:
- 减少CPI,使用大量单周期指令
- 增加指令条数,复杂的指令使用频率很低,实际程序的指令条数并不太多
- 减少时钟周期时间