指令系统
指令系统是从程序设计者看到的机器的主要属性,是软、硬件的主要界面。
- 指令系统是软件与硬件分界面的一个主要标志;
- 指令系统是软件与硬件之间互相沟通的桥梁;
- 指令系统与软件之间的语义差距越来越大;
- 指令系统的设计主要包括指令的功能(操作类型、具体操作内容)和指令格式的设计。
如何评价指令系统?
- 完备性:指令齐全、编程方便
- 高效性:占主存空间小,运行速度快
- 规整性
- 兼容性:向后兼容
一、指令的基本格式
存储模式:
1.数据存储顺序
大端存储:大部分RISC最低有效字节存储在最高地址位置
小端存储:Intel/AMD x86最低有效字节存储在最低地址位置
2.边界对齐
若边界未对齐,则存储效果变差
编译器会自动进行边界对齐。
3.堆栈
堆栈(栈):后入先出
PUSH、POP指令
隐含寻址
管理堆栈:最栈指针寄存器
堆栈的典型应用:
- 作为临时存储区域
- CALL指令,保存返回地址
- 调用过程中,传递参数
- 过程内的局部变量
4.冯诺依曼结构和哈佛结构
指令功能的设计
指令的典型分类:
数据传送类;算术运算类;逻辑运算类;程序控制类(转移指令、循环控制指令、过程调用和返回指令、程序自中断指令);系统控制类:(通常是特权指令,虚拟管理、任务切换);数据转换类;输入/输出类。
基本寻址方式:指令获取操作数的方式
PC相对寻址:8位补码偏移量;适用于短跳转,比如小循环。
- 节省指令的存储空间。
- 与程序所在内存位置无关。
二、操作码的编码
指令长度设计
指令长度与机器字长无固定关系。
(1)定长操作码设计
一般原则
- 指令长度为存储器最小可寻址单位的整数倍:CISC
- 指令长度一般设计为总线宽度的整数倍:RISC
常用设计方案
- 变长操作码,变长指令码:CISC
- 定长操作码,定长指令码:RISC
- MIPS,6位定长操作码,32位定长指令码。
- RISC-V,7位定长操作码,32位定长指令码。
(2)霍夫曼编码
变长操作码的设计原则:
- 如果指令字长度固定,则长地址码对应短操作码,操作码长度随地址码长度缩短而增加.
- 如果指令字长度可变,则以指令使用频度作为设计依据,使用频度高的指令用短码,使用频度低的指令用长码–霍夫曼编码原理。
- 设计总是从短操作码开始,并要保证当前使用的操作码与未来要扩展的操作码能够有效区分。
原则:短码不能是长码的前缀。
(3)两种码长的扩展操作码
基于特定规则扩展操作码
根据地址码数量扩展操作码
练习
CISC与RISC
CISC:复杂指令集计算机结构
- 用一条指令代替一串指令
- 增加新的指令
- 增强指令功能,设置功能复杂的指令
- 增加寻址方式
- 增加数据表示方法
RISC:精简指令集计算机结构
- 只保留功能简单的指令
- 功能较复杂的之指令用软件实现
- 提高流水线效率
CISC指令系统存在的问题:
- 28定律:大约20%的指令占据了80%的处理指令时间。
- VLSI工艺要求规整性:RISC正好适应了VLSI工艺的要求。
- 复杂的指令使指令周期大大增长。
RISC的特点:
- 指令系统简单
- 指令条数少、格式少、长度固定、功能简单
- 寻址方式少
- 采用硬布线控制逻辑(不用或少用微程序控制)
- Load/Store结构
- 只有LOAD和STORE指令可以访问存储器
- 寄存器多
- 寄存器窗口技术
- 十分重视提高流水线的执行效率
- 大部分指令可以单周期执行完成
- 延迟转移技术
- 十分强调优化编译技术的作用
发展方向:RISC和CISC正逐渐融合。
- 随着芯片密度和硬件速度的提高,RISC系统已经越来越复杂。
- CISC设计也关注于RISC相同的技术焦点,如增加通用寄存器数量和更加强调指令流水线设计等。