欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

搞定!计算机组成原理第四章指令系统全解析(四)- 指令格式详解

最编程 2024-01-25 19:39:27
...

在这里插入图片描述

1.0、指令的定义

指令:又称为机器指令,是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。例如电脑上运行的有些软件不能直接在手机上运行。

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,一条指令通常要包括操作码字段地址码字段两部分:

在这里插入图片描述

操作码指明了用户想要让CPU干什么,地址码指 明了这个操作要对谁进行。

  • 像停机中断指令是不需要地址码的
  • 加减乘除指令是需要两个地址码的

一条指令可能包含0个、1个、2个、3个、4个地址码,根据地址码数目不同,可以将指令分为零地址指令、一地址指令、二地址指令…

1.1、指令根据地址码数目分类

1.1.1、零地址指令

零地址指令:只需要操作码,不需要地址码。使用情况有以下两种:

  1. 不需要操作数的操作,如空操作、停机、关中断等指令
  2. 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶

1.1.2、一地址指令

一地址指令:需要一个地址码。使用情况有以下两种:

在这里插入图片描述

  1. 要进行的操作只需要单操作数,如加1、减1、取反、求补码等操作

    • 指令含义:OP(A1)->A1,将A1地址的内容读取,执行OP操作,然后将结果放入原地址A1
    • 执行上述指令需要3次访存:1. 取一地址指令 2. 读A1地址的内容 3.将结果写回地址A1
  2. 要进行的操作需要两个操作数,其中一个地址码显式的显示,另一个操作数隐含在某个寄存器(如隐含在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、指令根据操作码长度分类

指令由操作码和若干个地址码组成,而操作码有可能是不同的,可分为:

  1. 定长操作码:指令系统中所有指令的操作码长度都相同
    • n位操作码,可以支持 2n 条指令
    • 控制器的译码电路设计简单,但是灵活性较低
  2. 可变长操作码:指令系统中各指令的操作码长度可变
    • 控制器的译码电路设计更复杂,但是灵活性较高

操作码的位数可以反映这个系统当中最多可以支持多少条指令,对于定长操作码来说,如果它的操作码固定是n位,那么就意味着这个系统最多只能支持2n条指令。

1.4、指令根据操作类型分类

操作类型如下:

  1. 数据传送【数据传送类:进行主存与CPU之间的数据传送

    • LOAD 作用:把存储器中的数据放到寄存器中
    • STORE 作用:把寄存器中的数据放到存储器中
  2. 算术逻辑操作【运算类

    • 算术运算:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
    • 逻辑运算:与、或、非、异或、位操作、位测试、位清除、位求反
  3. 移位操作【运算类

    • 算术移位、逻辑移位、循环移位(带进位和不带进位)
  4. 转移操作【程序控制类:改变程序执行的顺序

    • 无条件转移指令 JMP 【涉及到汇编了】
    • 条件转移指令 JZ:结果为0;JO:结果溢出;JC:结果有进位
    • 函数调用CALL 和 函数返回RETURN
    • 陷阱(Trap)与陷阱指令
  5. 输入输出操作【输入输出类(I/O):进行CPU和I/O设备之间的数据传送

    • CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)