现代计算机的结构

4.1指令系统-指令格式_操作数


计算机的工作过程

4.1指令系统-指令格式_指令字_02

指令的定义

指令(又称机器指令):
是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成改机指令系统,也称为指令集。
注意:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
x86架构、ARM架构

指令格式

一条指令是机器语言的一个语句,它是一组有意义的二进制代码

一条指令通常要包括操作码字段和地址字段两部分:

4.1指令系统-指令格式_操作码_03

一条指令可能包含0个、1个、2个、3个、4个地址码…

根据地址码数目不同,可以将指令分为零地址指令、一地址指令、二地址指令…

零地址指令 OP

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

一地址指令 OP A1

  1. 只需要单操作数,如加1、减1、取反、求补等
    指令含义:OP(A1)->A1, 完成一条指令需要3次访存:取指->读A1->写A1
  2. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
    指令含义:(ACC)OP(A1)->ACC 完成一条指令需要2次访存:取指->读A1

注意:A1指某个主存地址,(A1)表示A1所指向的地址中的内容
二、三地址指令
二地址指令 OP A1(目的操作数) A2(源操作数)
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)->A1
完成一条指令需要访存4次,取指->读A1->读A2->写A1
三地址指令 OP A1 A2 A3(结果)
常用与需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)->A3
完成一条指令需要访存4次,取指->读A1->读A2->写A3
四地址指令 OP A1 A2 A3(结果) A4(下址)
指令含义:(A1)OP(A2)->A3,A4=下一条将要执行指令的地址
完成一条指令需要访存4次,取指->读A1->读A2->写A3
正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改位A4所指地址

指令-按指令长度分类

指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
半字长指令、单字长指令、双字长指令 --指令长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存
字长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等

指令-按操作码长度分类

定长操作码:指令系统中所有指令的操作码长度都相同
n位->2的n次方条指令
控制器的译码电路设计简单,但是灵活性较低

可变长操作码:指令系统中各指令的操作码长度可变
控制器的译码电路设计复杂,但是灵活性较高

定长指令字结构+可变长操作码 -> 扩展操作码指令格式

指令—按操作类型分类

  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接口中的寄存器)

扩展操作码的指令格式

扩展操作码

4.1指令系统-指令格式_操作码_04


在设计扩展操作码指令格式时,必须注意以下两点:

1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。

2)各指令的操作码一定不能重复。

通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。

4.1指令系统-指令格式_计算机组成原理_05


设地址长度为n,上一层留出m种状态,下一层可扩展出m×2的n次方种状态

4.1指令系统-指令格式_计算机组成原理_06


指令操作码

操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。

操作码是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。例如,指出是算术加运算,还是减运算;是程序转移,还是返回操作。

操作码分类:

定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码。

  • 一般n位操作码字段的指令系统最大能够表示2的n次方条指令
  • 优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利
  • 缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限

扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。

  • 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
  • 优:在指令字长有限的前提下仍保持比较丰富的指令种类;
  • 缺:增加了指令译码和分析的难度,使控制器的设计复杂化。