搞定!计算机组成原理第四章指令系统全解析(四)- 指令格式详解
1.0、指令的定义
指令:又称为机器指令,是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。例如电脑上运行的有些软件不能直接在手机上运行。
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,一条指令通常要包括操作码字段和地址码字段两部分:
操作码指明了用户想要让CPU干什么,地址码指 明了这个操作要对谁进行。
- 像停机中断指令是不需要地址码的
- 加减乘除指令是需要两个地址码的
一条指令可能包含0个、1个、2个、3个、4个地址码,根据地址码数目不同,可以将指令分为零地址指令、一地址指令、二地址指令…
1.1、指令根据地址码数目分类
1.1.1、零地址指令
零地址指令:只需要操作码,不需要地址码。使用情况有以下两种:
- 不需要操作数的操作,如空操作、停机、关中断等指令
- 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
1.1.2、一地址指令
一地址指令:需要一个地址码。使用情况有以下两种:
-
要进行的操作只需要单操作数,如加1、减1、取反、求补码等操作
- 指令含义:OP(A1)->A1,将A1地址的内容读取,执行OP操作,然后将结果放入原地址A1
- 执行上述指令需要3次访存:1. 取一地址指令 2. 读A1地址的内容 3.将结果写回地址A1
-
要进行的操作需要两个操作数,其中一个地址码显式的显示,另一个操作数隐含在某个寄存器(如隐含在ACC)
- 指令含义:(ACC)OP(A1)->ACC,把ACC累加寄存器存放的数据和A1地址的数据执行OP操作,然后将结果放入ACC累加寄存器当中
- 执行上述指令需要2次访存:1. 取一地址指令 2. 读A1地址的内容
- 因为ACC本来就在内存中
1.1.3、二地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)->A1 ,将A1地址和A2地址的内容读出,执行OP操作后,将结果放入A1地址。【结果放入目的操作数】
完成上述指令需要访存4次:1. 取二地址指令 2. 读A1地址 3. 读A2地址 4. 将结果写入A1地址
1.1.4、三地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)->A3 ,将A1地址和A2地址的内容读出,执行OP操作后,将结果放入A3地址。
完成上述指令需要访存4次:1. 取三地址指令 2. 读A1地址 3. 读A2地址 4. 将结果写入A3地址
1.1.5、四地址指令
完成四地址指令需要访存4次:1. 取四地址指令 2. 读A1地址 3. 读A2地址 4. 将结果写入A3地址
我们之前说过,CPU在每一次取一条指令之后都会让程序计数器PC+1,让它不断的指向下一条指令,而对于四地址指令来说,执行完这一条指令之后,我们会把程序计数器PC的值修改为A4所指向的地址,A4指明的就是下一条要执行指令的地址。
1.1.6、地址码的位数
地址码是指明了某一个主存单元的地址,如果地址码有n位,那么就可以指明2n个主存单元,所以地址码的位数越长,对应地址码的寻址能力也会越强。
若我们规定指令的总长度规定不变,则地址码数量越多(也就是每一个地址码的位数越短),因此寻址能力就会越差。
n位地址码的直接寻址范围 = 2n
1.1.7、总结
1.2、指令根据指令长度分类
我们之前学过机器字长和存储字长:
-
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
-
存储字长:一个存储单元中二进制代码位数(通常和MDR位数相同)
-
指令字长:一条指令的总长度(可能会变)
机器字长和CPU有关,一般是固定不变的,而存储字长和主存有关,一般也是固定不变的,但是指令字长是有可能发生改变的,
我们会见到半字长指令、单字长指令、双字长指令,这个意思指的是指令长度是机器字长的多少倍,指令字长会直接影响我们取指令所需要的时间,例如一台计算机的机器字长和存储字长都是16bit,这也就意味着我们每次从主存中读或者写的字节数是16bit,在这种条件下,若我们要取一条双字节指令(也就是16×2=32bit)需要进行两次访存。
有的计算机指令系统中的指令长度有差异,可分为如下两种:
- 定长指令字结构:指令系统中所有指令的长度都相等
- 变长指令字结构:指令系统中各种指令的长度不等
1.3、指令根据操作码长度分类
指令由操作码和若干个地址码组成,而操作码有可能是不同的,可分为:
- 定长操作码:指令系统中所有指令的操作码长度都相同
- n位操作码,可以支持 2n 条指令
- 控制器的译码电路设计简单,但是灵活性较低
- 可变长操作码:指令系统中各指令的操作码长度可变
- 控制器的译码电路设计更复杂,但是灵活性较高
操作码的位数可以反映这个系统当中最多可以支持多少条指令,对于定长操作码来说,如果它的操作码固定是n位,那么就意味着这个系统最多只能支持2n条指令。
1.4、指令根据操作类型分类
操作类型如下:
-
数据传送【数据传送类:进行主存与CPU之间的数据传送】
- LOAD 作用:把存储器中的数据放到寄存器中
- STORE 作用:把寄存器中的数据放到存储器中
-
算术逻辑操作【运算类】
- 算术运算:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
- 逻辑运算:与、或、非、异或、位操作、位测试、位清除、位求反
-
移位操作【运算类】
- 算术移位、逻辑移位、循环移位(带进位和不带进位)
-
转移操作【程序控制类:改变程序执行的顺序】
- 无条件转移指令 JMP 【涉及到汇编了】
- 条件转移指令 JZ:结果为0;JO:结果溢出;JC:结果有进位
- 函数调用CALL 和 函数返回RETURN
- 陷阱(Trap)与陷阱指令
-
输入输出操作【输入输出类(I/O):进行CPU和I/O设备之间的数据传送】
- CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)