4.1 指令系统的发展与性能要求
4.1.1 指令系统的发展
- 计算机程序由一系列机器指令组成
- 每条指令可完成一个独立的算术/逻辑运算操作
- 指令系统(指令集)
- 一台计算机中所有机器指令的集合
- 复杂指令系统计算机 CISC
- 精简指令系统计算机 RISC
4.1.2 指令系统的性能要求
- 完备性
- 指令系统丰富
- 功能齐全
- 使用方便
- 有效性
- 指令系统编写的程序可以高效率地运行
- 程序存储空间小
- 执行速度快
- 功能更强、更完善的指令系统,一定有更好的有效性
- 指令系统编写的程序可以高效率地运行
- 规整性
- 指令系统
- 对称性
- 所有寄存器和存储器单元都可同等对待
- 所有指令都可使用各种寻址方式
- 匀齐性
- 一种操作性质的指令可以支持各种数据类型
- 对称性
- 指令格式和数据格式的一致性
- 指令长度和数据长度有一定的关系,以方便处理和存取
- 例如,指令长度和数据长度通常是字节长度的整数倍
- 指令系统
- 兼容性
- 相同的基本结构和共同的基本指令系统
- 指令系统兼容,软件也可通用
- 相同的基本结构和共同的基本指令系统
4.1.3 低级语言与硬件结构的关系
- 指令系统体系结构
- 机器语言程序员所看到的计算机属性
- 组成
- 寄存器组织
- 存储器的组合和寻址方式
- I/O 系统结构
- 数据类型&表示
- 指令系统
- 中断机制
- 机器工作状态定义&切换
- 保护机制
4.2 指令格式
4.2.1 操作码
- 操作码
- 表示指令应进行怎样的操作,如加减乘除、存取数等
- 位操作码最多能表示 条指令
4.2.2 地址码
-
- 零地址指令
- 只需要操作码,不需要地址,如停机操做
- 一地址指令
- 指定一个操作数,另一个操作数地址是隐含的,如累加寄存器 AC 中的数据,
- 二地址指令
- 两个地址
- 参与操作的两个数的地址
- 存放操作结果的地址
- 依据操作数物理位置分类
- 存储器存储器 SS
- 从内存中取数,操作结果也存在内存中
- 需要多次访问内存
- 寄存器寄存器 RR
- 从寄存器中取数,操作结果存在另一寄存器中
- 不需要访问内存,执行速度快
- 寄存器-存储器 RS
- 既要访问内存,也要fa
- 存储器存储器 SS
- 两个地址
- 三地址指令
- 被操作数地址
- 操作数地址
- 存放操作结果的地址
- 零地址指令
4.2.3 指令字长度
- 指令字长度
- 一个指令字中包含的二进制代码位数
- 机器字长
- 计算机能直接处理的二进制数据位数
- 决定计算机运算精度
- 通常与主存单元位数一致
- 分类
- 单字长指令
- 指令字长度=机器字长
- 半字长指令
- 指令字长度=半个机器字长
- 双字长指令
- 指令字长度=两个机器字长
- 单字长指令
- 指令系统
- 等长指令字结构
- 各指令字长相等,都是单字长或半字长指令
- 结构简单
- 变长指令字结构
- 各指令字长随功能而不同
- 充分利用指令长度,但控制较为复杂
- 等长指令字结构
- 扩展操作码技术
- 确保指令字长度尽可能统一,向地址码字段扩展操作码的长度
-
- 通过全 1 作为扩展标识
- eg:OP 域扩展到 域
- 保留 1111 作为标识
- 当 OP 域为 1111 时,说明已扩展到 域
- 则 1111 XXXX 为操作码区域
- eg:OP 域扩展到 域
- 通过全 1 作为扩展标识
4.2.4 指令助记符
- 方便书写和阅读程序,使用 3-4 个英文缩写来代表二进制操作码的含义
4.2.5 指令格式举例
- 八位微型计算机指令格式
- MIPS R4000 指令格式
- ARM 指令格式
- Pentium 指令格式
4.3 操作数类型
4.3.1 一般的数据类型
- 地址数据
- 无符号整数
- 数值数据
- 定点整数/定点小数
- 浮点数
- 压缩十进制数,1 字节用 2 位 BCD 码表示
- 字符数据
- 7 位 ASCII 表示字符
- 最高位第 8 位用于奇偶校验
- 逻辑数据
- 一个单元由若干个二进制位项组成
4.4 指令和数据的寻址方式
4.4.1 指令的寻址方式、
- 顺序寻址方式
- 按程序计数器中的顺序号(内存中的顺序)逐条进行取指并执行
- 跳跃寻址方式
- 指令地址由当前指令给出,而不是由程序计数器给出
- 程序计数器跟踪新的指令地址
- 程序转移/循环时,能缩短程序长度或作为公共程序进行引用
4.4.2 操作数基本寻址方式
- 操作数来源
- 地址码部分直接给出操作数
- 简便快捷,但操作数固定不变
- 操作数存在 CPU 中的通用寄存器中
- 快捷获取,但数量有限
- 操作数存在内存中
- 有效地址
- 指令直接给出操作数的实际访存地址
- 形式地址
- 地址字段给出形式地址,在指令执行时,变换成有效地址
- 有效地址
- 地址码部分直接给出操作数
- 操作数寻址方式
- 形成操作数的有效地址的方法
- 基本寻址方式
-
隐含寻址
-
立即寻址
- 在地址字段直接指出操作数,而不是地址
- 节省访问内存的时间
-
直接寻址
- 在地址字段直接指出内存地址(也称为直接地址)
-
间接寻址
- 地址字段并不是操作数的真实地址,而是真实地址的指示器
- 间接寻址和直接寻址结合起来,通过特征位判断直接寻址还是间接寻址
- 需要两次访存,影响执行速度
-
寄存器寻址
- 地址字段给出通用寄存器编号,寄存器中存放着操作数
-
寄存器间接寻址
- 地址字段给出通用寄存器编号,寄存器中存放着操作数地址
-
偏倚寻址
- 直接寻址+寄存器间接寻址
- 隐含的地址和地址字段(或隐含引用,指某个专用寄存器)获得有效地址
- 常用偏倚寻址
- 相对寻址
- 隐含引用的专用寄存器是程序计数器 ,
- 基址寻址
- 被引用的专用寄存器存有存储器地址,地址字段为相对于该存储器地址的偏移量
- 变址寻址
- 地址字段引用主存地址,被引用的专用寄存器存放正偏移量
- 专用寄存器中的偏移量可变,例如访问数组,变址寄存器从 0 逐次 +1
- 相对寻址
-
段寻址
-
堆栈寻址
- 寄存器堆栈/存储器堆栈
- 数据存储都与栈顶地址进行
- 需要一个隐式/显式的堆栈指示器
4.4.3 寻址方式举例
- Pentium 寻址方式
- Power PC 寻址方式
4.5 典型指令
4.5.1 指令分类
- 数据传送指令
- 存数指令、取数指令、传送指令、成组传送指令等
- 用于实现主存和寄存器间或寄存器之间的数据传送
- 算术运算指令
- 二进制定点加减乘除,浮点数的加减乘除取反,求补等
- 用于定点/浮点数的算术运算
- 逻辑运算指令
- 逻辑加,逻辑乘、按位加、逻辑位移等
- 用于无符号数的位操作、代码转换、判断及运算
- 程序控制指令
- 一般采用直接寻址和相对寻址
- 类型
- 条件转移指令
- 无条件转移指令
- 转子程序指令
- 返回主程序指令
- 中断返回指令
- 输入输出指令
- 字符串处理指令
- 字符串传送、字符串转换、字符串比较等
- 非数值处理指令
- 特权指令
- 主要用于系统资源的分配和管理
- 改变系统工作方式、检测用户的访问权限等
- 其他指令
- 状态寄存器置位、复位指令、测试指令等用于系统控制的特殊指令
4.5.2 基本指令系统的操作
4.5.3 RISC 指令系统
- 特点
- 使用频率高的简单指令,指令条数小
- 指令长度固定,格式种类少,寻址方式少
- 只有取数/存数指令访问存储器,其他指令操作在寄存器中进行