第四章 指令系统(期末复习版)
指令系统的发展与性能要求
对指令系统的发展
程序 —— 用于解决实际问题的一系列指令
指令 —— 是计算机执行某种操作的命令
计算机指令分为:
- 微指令:微程序级的命令,属于硬件
- 机器指令:可完成一个独立的算术或逻辑运算
- 宏指令:由若干条机器指令组成的软件指令,属于软件
指令系统:一台计算机中所有机器指令的集合
对指令系统性能的要求
- 完备性
- 有效性
- 规整性,包括对称性、匀齐性、指令格式和数据长度的一致性
- 兼容性
指令格式
指令字:表示一条指令的机器字
指令格式
- 指令字用二进制代码表示的结构形式,有操作码字段和地址码字段组成
- 操作码字段:表征指令的操作特性和功能
- 地址码字段:通常指定参与操作的操作数的地址
操作码
操作码字段的位数取决于指令系统的规模
操作码的类型
- 固定长度的操作码
- 可变长度的操作码
地址码
一条指令格式中有几个地址码字段,就称为是几地址指令
零地址指令
无任何操作数运算:如NOP、HALT等指令
单操作数运算:隐含一个操作数,如Acc
一地址指令
单操作数运算:OP(A1) —> A1,如INC指令
双操作数运算:隐含一个操作数
两地址指令
功能:(A1)OP(A2)—> A1,如ADD、XOR等指令
按操作数的寻址方式可分为RR型、RS型、SS型三种
- 存储器-存储器(SS)型指令
- A1、A2均为存储单元
- 这类指令的执行需要多次访存
- 变址寄存器是存储器
- 寄存器-寄存器(RR)型指令
- A1、A2均为寄存器(通用寄存器、专用寄存器)
- 这类指令执行不需要访存
- 寄存器-存储器(RS)型指令
- A1、A2中一个为寄存器,一个为存储单元
- 执行此类指令时,纪要访问内存单元,又要访问寄存器
RR型指令不需要访问存储器,所花时间最短;
RS型指令需要访问存储器,同时要进行寻址方式的变换运算(基址或变址),这也需要时间
SS指令虽然也访问存储器,但节省了求有效地址运算的时间开销
三地址指令
功能:(A1)OP(A2)—> A3
多地址指令
这类指令功能强,一般用高档小型机或中大型机,用于实现成批数据处理,字符串处理、向量或矩阵运算指令等
指令字长度
机器字长:运算器一次能处理的二进制的位数
指令字长
- 一个指令字中包含二进制代码的位数
- 指令字长由操作码长度、操作数长度和个数共同决定
指令有半子长、单字长、双字长、多字长等不同的长度类型
指令系统可分为等长指令字结构、变长指令字结构两种
指令助记符:使用3~4个英文缩写字母来表示的指令操作码
操作数类型
机器指令对数据进行操作,数据通常分为一下四类:
- 地址数据(如各指令中的存储器单元寻址方式)
- 数值数据(如各类指令中的立即数寻址方式)
- 逻辑数据(如各类指令中的标志位判断部分)
指令和数据的寻址方式
指令的寻址方式
- 顺序寻址方式
由程序计数器/指令指针寄存器记录所要执行指令的地址 - 跳跃寻址方式
程序计数器的内容由本条指令给出,而不是顺序改变
直接寻址方式:指令中给出要转向的有效地址
相对寻址方式:指令中给出要转向单元与当前单元的偏移量
间接寻址方式:指令中给出保存要转向地址的寄存器或存储单元
操作数寻址方式
典型二常用的寻址方式有:
- 隐含寻址:操作数地址隐含在操作码中
- 立即寻址:指令执行阶段不需要访存,速度快
- 寄存器寻址:形式地址字段为寄存器编号
- 寄存器间接寻址:形式地址字段用于指出存放有效地址的寄存器编号
- 直接寻址:有效地址由形式地址字段直接给出
- 间接寻址:有效地址由形式地址字段间接提供
- 偏移寻址
- 堆栈寻址:隐含寻址方式的一种变形
- 基址寻址:由基址寄存器和形式地址形成
- 变址寻址:由变址寄存器和形式地址形成
- 相对寻址方式:是基址寻址的一种变通,常用于转移类指令中
例题
例一:
采用操作码扩展方法设计一个具有三地址指令15条,双地址指令12条,单地址指令32条以及零地址指令16条的指令系统?
解析:此指令系统共75条指令,还可扩展指令
例二:
某机指令字长32位,一个操作数地址为12位,有双地址码、单地址码、零地址码3种格式的指令。若采用扩展操作码的方式来设计指令,已知双地址码指令K条,单地址码指令L条,问零地址码指令有多少条?
解析:
例三:
例四:
例五:
例六:
某计算机有16个通用寄存器,采用32位定长指令字操作码字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式,若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令中偏移量的取值范围是(-32768~+32767)
例七:
某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条,二地址指令107条,每个地址字段为6位,则指令字长至少应该是 _24_ 位
解析:
三地址指令有29条,所以它的操作码至少为5位。以5位进行计算,它剩余32-29=3种操作码给二地址。而二地址另外多了6位给操作码,因此它数量最大达3*64=192。所以指令字长最少为23位( 6 + 6 +6 + 5 = 26),因为计算机按字节编址,需要是8的倍数,所以指令字长至少应该是24位。