【计组学习笔记】第四章——指令系统
4.1 指令系统:
指令:又称机器指令,是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
指令集:一台计算机的所有指令的集合构成该机的指令系统
指令系统(指令集)是指令集体系结构(ISA)中最核心的部分
4.1.1 指令的基本格式
-
操作码:指明做了什么动作
-
- 作用1:执行什么性质的操作,具有何种功能
- 作用2:识别指令、了解指令功能、区分操作数地址内容的组成和使用方法
- 举例:停机中断、求反求补、加减乘除
-
地址码:指明对谁动手脚
-
- 不需要操作对象
- 需要一个操作对象
- 需要两个操作对象
- 特性:
-
-
- n位地址码的直接寻址范围=
- 若指令总长度固定不变,则地址码数量越多,寻址能力越差
-
-
指令的长度:一条指令中所包含的二进制代码的位数
-
- 指令字长取决于:
-
-
- 操作码的长度
- 操作数地址码的长度
- 操作数地址的个数
-
-
- 指令长度和机器字长无固定关系,但是可以进行分类:
-
-
- 单字长指令:指令长度等于机器字长的指令
- 半字长指令:指令长度等于半个机器字长的指令
- 双字长指令:指令长度等于两个机器字长的指令
-
-
指令字长
一条指令的总长度(可能会变)
- 机器字长
CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU相关)
- 存储字长
一个存储单元中的二进制代码位数(通常和MDR位数相同)
整体框架
解释一下:
MAR:地址寄存器 存放预访问的存储单元的地址,其位数对应存储单元的个数
MDR:数据寄存器 存放从存储体某单元取出的代码
1. 零地址指令
只给出操作码OP,没有显式地址。有两种可能:
(1) 不需要操作数的指令,如空操作,停机,关中断等指令
(2) 零地址的运算类指令仅用在堆栈计算机中,两个操作数隐含存放在栈顶和次栈顶弹出,送到运算器进行运算,计算结果隐含的压回栈顶 类似“后缀表达式”
2. 一地址指令
其中
ACC:Accumulator累加器,是运算器中既能存放运算前的操作数,又能存放运算结果的寄存器
ALU:算数逻辑单元,可以进行算术运算(加减乘除)逻辑运算(与或非异或)辅助功能(移位求补)
对于寻址范围做出解释:
指令字长为32为,操作码占8位,1个地址码字段占24位,则指令操作数的直接寻址范围为bit
进行单位换算为* 位 = 16 M
3. 二地址指令
其中目的操作数保存本次的运算结果
对于寻址范围做出解释:
指令字长为32为,操作码占8位,两个地址码字段各占12位,则指令操作数的直接寻址范围为bit
进行单位换算为* 位 = 4 K
4. 三地址指令
5. 四地址指令
特殊点:
正常情况下取指令之后PC+1,指向下一条指令
四指令地址:取执行指令后,将PC的值修改为(下址)所指地址
4.1.2 定长操作码指令格式
定长操作码指令在指令的最高部分分配若干位(定长)表示操作码。
一般n位操作码字段的指令系统最大能表示条指令
4.1.3 扩展操作码指令格式
目的:
在指令字长有限的前提下保持比较丰富的指令种类,可采用可变长度操作码,即全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。
实现方式:
定长指令字结构+可变长操作码 -> 扩展操作码指令格式
扩展操作码 使操作码的长度随地址码的减少而增加,不同地址数的指令可具有不同长度的操作码,从而在满足需要的前提下有效缩短指令字长
4.1.4 指令分类(按操作类型分类)
1. 数据传送(数据传送类:进行主存和CPU之间的数据传送)
-
- LOAD:从内存单元读取数据到CPU寄存器(LOAD)
- STORE:把CPU寄存器写数据到内存单元(STORE)
- MOV:传输指令通常由寄存器之间的传送(MOV)
2. 运算类
算数与逻辑运算:
ADD:加
SUB:减
CMP:比较
MUL:乘
DIV:除
INC:加1
DEC:减1
AND:与
OR:或
NOT:取反
XOR:异或
3. 移位操作
- 算数移位
- 逻辑移位
- 循环移位
4. 转移操作
JMP:无条件转移
BRANCH:条件转移
CALL:调用
RET:返回
TRAP:陷阱
区分:
-
无条件转移指令在任何情况下都执行转移操作
-
条件转移指令仅在特定条件满足时才执行转移操作,其中转移条件一般是某个标志位的值,或几个标志位的组合
-
执行调用指令是必须保存下一条指令的地址(返回地址),当子程序执行结束时,根据返回地址返回到主程序继续执行
-
转移指令则不返回执行
5. 输入输出类
CPU与外部设备