【计算机组成原理】四、指令系统:1.指令格式、指令分类、CISC/RISC

四、指令系统

1.指令格式

指令(又称机器指令):是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。

指令集:一台计算机的所有指令的集合构成该机的指令系统,也称为指令集

【注意】一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。

Eg:x86架构、ARM架构

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

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

在这里插入图片描述

作用:

在这里插入图片描述

2.分类

2.1根据地址码数目不同

2.1.1零地址指令
OP

出现的情况:

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

出现的情况:

  1. 只需要单操作数,如加1、减1、取反、求补等。

指令含义:OP(A1)→A1

完成一条指令需要3次访存:取指→读A1→写A1

  1. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)。

指令含义:(ACC)OP(A1)→ACC

把ACC中存的数据与A1中存放的数据进行运算,然后把运算结果存到ACC。

完成一条指令需要2次访存:取指→读A1(因为ACC就是累加寄存器,不用取)。

【注意】A指某个主存地址,(A1)表示A所指向的地址中的内容。(类比c语言指针)

2.1.3二地址指令
OPA1(目的操作数)A2(源操作数)

常用于需要两个操作数的算术运算、逻辑运算相关指令。

指令含义:(A1)OP(A2)→A1

完成一条指令需要访存4次:取指→读A1→读A2→写A1。

2.1.4三地址指令
OPA1A2A3(结果)

常用于需要两个操作数的算术运算、逻辑运算相关指令。

指令含义:(A1)OP(A2)→A3

完成一条指令需要访存4次:取指→读A1→读A2→写A3 。

2.1.5四地址指令
OPA1A2A3(结果)A4(下一条指令)

指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址

完成一条指令需要访存4次,取指→读A1→读A2→写A3

  • 正常情况下:取指令之后PC+1,指向下一条指令。
  • 四地址指令:执行指令后,将PC的值修改位A4所指地址。

若指令总长度固定不变,则地址码数量越多,寻址能力越差。所以有A4寻址能力更好。

2.2根据指令长度

指令字长:一条指令的总长度(可能会变)。

机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(不变,通常和ALU直接相关)。

存储字长:一个存储单元中的二进制代码位数(不变,通常和MDR位数相同)

通常默认:指令字长 = 机器字长 = 存储字长


指令字长会影响取指令所需时间。

如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存。

根据指令长度是机器字长的多少倍

  1. 半字长指令
  2. 单字长指令
  3. 双字长指令
  • 定长指令字结构:指令系统中所有指令的长度都相等。
  • 变长指令字结构:指令系统中各种指令的长度不等。

2.3根据操作码的长度不同

  1. 定长操作码:指令系统中所有指令的操作码长度都相同。

    n位→2n条指令(如果操作码固定是n位,那么这个系统最多支持2n条指令)

    控制器的译码电路设计简单,但灵活性较低。

  2. 可变长操作码:指令系统中各指令的操作码长度可变。

    控制器的译码电路设计复杂,但灵活性较高。

  3. 扩展操作码:指令总长度不变,但是操作码长度(占比)可以改变。

    不同地址数的指令使用不同长度的操作码。

2.3.1拓展操作码

定长指令字结构 + 可变长操作码

指令总长度不变,但是操作码长度(占比)可以改变。不同地址数的指令使用不同长度的操作码。

在这里插入图片描述

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

  1. 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。(类似“哈夫曼编码”)
  2. 各指令的操作码一定不能重复

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

4.1_2_扩展操作码指令格式_哔哩哔哩_bilibili

eg.:

在这里插入图片描述

2.4根据操作类型

分为4种类型:

  1. 数据传输类数据传输

  2. 运算类算术逻辑操作移位操作

  3. 程序控制类转移操作

    改变程序执行流的顺序。

  4. 输入输出类(I/O):输入输出操作

    进行CPU寄存器与IO端口之间的数据传送。


细分:

  1. 数据传送

    1. LOAD:把存储器中的数据放到寄存器中(存储器→寄存器)。
    2. STORE:把寄存器中的数据放到存储器中(寄存器→存储器)。
  2. 算术逻辑操作

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

    算术移位、逻辑移位、循环移位(带进位和不带进位)。

  4. 转移操作

    程序执行流的改变(如if else, 函数调用),会导致程序计数器PC的改变。

    1. 无条件转移 JMP
    2. 条件转移
      1. JZ:结果为0;
      2. JO:结果溢出;
      3. JC:结果有进位
    3. 调用和返回 CALL和RETURN
    4. 陷阱(Trap)与陷阱指令
  5. 输入输出操作

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

6.CISC和RISC

CISC: 复杂指令集计算机,Complex Instruction Set Computer

设计思路:一条指令完成一个复杂的基本功能。

一条指令可以由一个专门的电路完成。有简单的指令,有复杂的指令。有的复杂指令用纯硬件实现很困难,采用“存储程序”的设计思想,由一个比较通用的电路配合存储部件完成一条指令。

代表:x86架构,主要用笔记本、台式机等。

80-20规律:典型程序中80%的语句仅仅使用处理机中20%的指令。所以指令集不需要太过于复杂,所以有RISC。

RISC: 精简指令集计算机,Reduced lnstruction Set Computer

设计思路:一条指令完成一个基本“动作”。多条指令组合完成一个复杂的基本功能。

一条指令一个电路,电路设计相对简单,功耗更低

代表:ARM架构,主要用于手机、平板等。

  • 对比:
CISCRISC
指令系统复杂、庞大简单、精简
指令数目一般大于200条一般小于100条
指令字长不固定定长
可访问指令不加限制只有load/store指令
各种指令执行时间相差较大绝大多数在一个周期完成
各种指令使用频率相差很大都比较常用
通用寄存器数量较少
目标代码难以用优化编译生成高效的目标代码程序采用优化的编译程序,生成代码较为高效
控制方式绝大多数为微程序控制(效率低)绝大多数为组合逻辑控制(效率高)
指令流水线可以通过一定方式实现必须实现
  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值