计算机组成原理_第四章_指令系统
1.指令:又称机器指令:
1.是指计算机执行某种操作的命令,
2.是计算机运行的最小功能单位。
3.一台计算机的所有指令的集合构成该机的指令系统,也称为指令集
指令是由**操作码**和**地址码**构成
操作码:指明做什么
地址码:指明对谁动手
注:1.有的指令不需要地址码(例:停机指令等)
2.一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令
换句话说:因为不同设备之间的指令集可能不同,例:手机和电脑之间的指令集不同,因此有的软件只能在电脑上运行,有的软件只能在手机上运行
2.指令有很多种格式,也就是有很多种分类方式
1.根据地址码的数目进行分类
2.根据指令长度进行分类
3.根据操作码的长度进行分类
4.根据操作类型进行分类
2.1根据地址码的数目进行分类
1.零地址指令:只有一个操作码(op),没有地址码
常用于:
1.不需要操作数,如空操作,停机,关中断等指令
2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶,(例如:计算机实现后缀表达式时)
2.一地址指令:一个操作码(op),一个地址码(A1(放结果))
常用于:
1.只需要单操作数,(如:加一,减一,取反,求补等)
指令含义:op(A1)->A1
将A1地址中的数据执行op操作后再放回A1中
完成一条指令需要3次访存:取出整条指令->读取A1中的数据->将结果写回A1中
2.需要两个操作数,但其中一个操作数隐含在某个寄存器中(如:隐含在ACC加法器中数进行加法指令)
指令含义:(ACC)op (A1) -> A1
将A1地址中的数据和ACC中的数据执行op操作后再放回A1中
完成一条指令需要3次访存:取出整条指令->读取A1中的数据->将结果写回A1中
3.二地址指令:一个操作码(op),两个地址码(A1(放结果),A2)(一定放回A1中而不是A2中)
常用于:1.需要两个操作数的算数运算,逻辑运算的相关指令
指令含义:(A1)op(A2)->A1
将A1地址中的数据和A2中的数据执行op操作后再放回A1中
完成一条指令需要4次访存:取出整条指令->读取A1中的数据->读取A2中的数据->将结果写回A1中
4.三地址指令:一个操作码(op),两个地址码(A1,A2,A3(放结果))(与二地址指令类似)
常用于:1.需要两个操作数的算数运算,逻辑运算的相关指令
指令含义:(A1)op(A2)->A3
将A1地址中的数据和A2中的数据执行op操作后再放回A3中
完成一条指令需要4次访存:取出整条指令->读取A1中的数据->读取A2中的数据->将结果写回A3中
5.四地址指令:一个操作码(op),两个地址码(A1,A2,A3(放结果),A4(下一个指令的地址))
常用于:1.需要两个操作数的算数运算,逻辑运算的相关指令
指令含义:(A1)op(A2)->A3
将A1地址中的数据和A2中的数据执行op操作后再放回A3中,执行A4地址指向的指令
A4放的是:下一条将要执行指令的地址
完成一条指令需要4次访存:取出整条指令->读取A1中的数据->读取A2中的数据->将结果写回A3中
**注意:**
1.正常情况下:取出指令后,PC所指向的地址自动加"1",指向下一条指令,开始执行
2.四地址指令:执行指令后,将PC的值修改为A4所指向的地址
3.n位地址码的直接寻址范围为2的n次方
4.若指令总长度固定不变,则地址码数量越多,寻址能力越差
2.2根据指令的长度进行分类
(定长操作码/可变长操作码)
1.预备知识:
指令字长:一条指令的长度
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常与ALU直接相关)
存储字长:一个存储单元中的二进制位数(通常与MDR位数相同)
2.常见指令字长:(指令长度通常是机器字长的整数倍)半字长指令,单字长指令,双字长指令
注意:指令字长会影响取指令所需的时间
如:机器字长=存储字长=16bit时,则取出一条双字长指令需要进行两次访存
3.1定长指令字结构:指令系统中所有指令的长度都相等
3.2变长指令字结构:指令系统中指令的长度可变的
3.3定长操作码:指令系统中所有指令的操作码的长度都相等
n位操作码位数->2的n次方条指令
注意(优缺点):控制器的译码电路设计简单,但灵活性较低
3.4可变长度操作码:指令系统中各种指令的操作码的长度可变
注意(优缺点):控制器的译码电路设计复杂,但灵活性较高
3.5定长指令字结构+可变长操作码-->扩展操作码指令格式
扩展操作码指令格式:不同的地址数目不同的指令使用不同长度的操作码
2.3根据指令的长度进行分类
1.数据传送类
**(数据传送类:进行主存与CPU之间的数据传送)**
LOAD 作用:把存储器中的数据放到寄存器中
STOPE 作用:把寄存器中的数据放到存储器中
2.算术逻辑操作
**(运算类)**
算术运算:加,减,乘,除,增1,减1,求补,浮点运算,十进制运算
逻辑运算:与,或,非,异或,位操作,位测试,位清除,位求反
3.移位操作
**(运算类)**
算数移位,逻辑移位,循环移位(带进位,不带进位)
4.转移操作(相当于改变指令流)(相当于改变PC的值)
**(程序控制类:改变程序指行的顺序)**
无条件转移 JMP
条件转移 (相当于if else语句)JZ:结果为0 JO:结果溢出 JC:结果有进位
调用和返回 CALL(goto)和RETURN(return)
陷阱(TRAP)与陷阱指令
5.输入输出操作
**(输入输出类:进行CPU和IO设备之间的数据传输)**
CPU寄存器与IO端口之间的数据传送(端口即为IO接口中的寄存器)
我的51CTO博客:
https://blog.51cto.com/u_15083388/4276644