计算机组成原理 指令系统

一、机器指令特征

  1. 机器指令要素
  2. 机器指令的标识
  3. 指令系统的设计

机器指令要素

  • 操作码:用来指定要完成的操作类型(如ADD , I/O)
  • 源操作数的引用 : 计算机完成的每个操作都会涉及一个或多个源操作数,因此,在一条指令中需要指明从哪里得来这些源操作数 (????)
  • 结果操作数的引用 : 它用来指明操作结果被存放在何处。
  • 下一条指令引用:告诉cpu,这一条操作结束后去哪里取下一条指令

操作数可以存放的位置

  • 主存或虚存 :在指令中提供主存或虚存地址
  • CPU寄存器 : 在指令中提供寄存器编号
  • I/O设备 : 在指令中提供外设地址

指令的表示

  • 在计算机内部,用一个二进制位串来表示机器指令,这个串又被划分成几个字段,分别对应指令的各个要素。
    • 但这种形式不易记忆和阅读
  • 符号表示法 (普遍使用)
    • ADD 加 // ADD R1 R2
    • SUB
    • MUL

指令系统的设计

作用

  • 设计指令系统就是要选择计算机系统中一些基本操作应该由硬件实现还是由软件实现
  • 选择复杂操作是由一条还是一串指令来实现

设计指令系统需要考虑的因素

  • 操作清单:即指令系统中应提供多少种操作和什么样的操作,以及操作的复杂复杂程度。
  • 数据类型 : 指令可以对哪几种数据类型完成操作
  • 指令格式 : 确定指令的长度,包含字段,字段含义等
  • 寄存器 : CPU的那些寄存器能够被指令访问,他们的功能是什么
  • 寻址方式 : 如何完成操作数的有效地址

指令系统的两个发展方向

  • 复杂指令系统 :增强原有的指令功能,设置更为复杂的新指令实现软件功能的硬化。 //复杂指令系统计算机CISC
    • 庞大的指令集合,多大几百条
    • 复杂
    • 硬件利用率低
  • 精简指令系统 : 减少指令种类 和简化指令功能,提高指令的执行速度 //精简指令系统计算机RISC
    • 单周期指令 //除去访存指令外,其他指令的操作均在单周期内完成
    • 简单指令格式、简单的寻址方式
    • 尽量使用寄存器-寄存器操作指令
    • 最终达到加快机器处理速度的目的


二、操作数的类型和操作的类型

  1. 操作数的类型
  2. 操作的类型

操作数的类型

  • 操作数是指令处理的对象
  • 常见的操作数类型 : 地址、数字、字符和逻辑数据
    • 地址: 可以看做是一种数据,很多情况下要计算操作数的地址时候,可将它当做一个无符号的整数
    • 数字 : 数值型数据,计算机中普遍使用的三种数据类型
      • 二进制整数 :二进制补码表示
      • 二进制浮点数 : IEEE754标准浮点数格式
      • 十进制数: 压缩/非压缩的BCD码表示
    • 字符 :普遍采用ASCII码来处理
    • 逻辑数据 :例如 0001 被当做假假假真

操作的类型

  • 数据传送 :寄存器、存储单元之间的数据传送
  • 数据处理 : 实现数据的算术运算、逻辑运算和比较运算
  • 程序控制 : 主要用于控制程序的执行顺序、使程序具有测试、分析、判断的能力。 通常有以下几种:
    • 转移指令
    • 子程序调用指令
    • 返回指令
  • 输入输出 :CPU寄存器与外设寄存器之间数据的输入输出


三、指令的格式

  • 指令的格式 :操作码字段(OP)地址码字段(A)
    • 操作码字段: 指明CPU完成什么操作
    • 地址码 : 指出操作数从哪里来,结果送往那里去,下一条指令从哪里取

指令格式的设计:

  • 涉及的三个问题
    • 操作码结构
    • 地址码结构
    • 指令字长度

操作码结构的设计:

定长操作码

  • 基本思想:操作码的长度固定、位置固定、且几种放在指令的一个字段中
  • 机器允许的最大指令数量 : 例如某操作码占8位,则最多可以有2^8条指令
    • 然而,一般实际指令数是不会到达最大的,因为有一部分指令是冗余信息,也称非法指令
  • 优点 : 简化硬件设计,减少指令译码时间,在字长较长的大中型计算机一家超级小型计算机上广泛采用。

扩展操作码

  • 基本思想 : 操作码长度可变,对于不同类型的指令,其操作码的长度是不同的。并且,操作码还分散的存放在指令的不同位置上。在指令中用一个固定长度的字段表示基本操作码,而对于一部分不需要某个地址的指令,可将操作码扩充到地址码字段。
  • 优点 : 缩短了指令字长度,但大大增加了译码的复杂度,增加了控制器的设计难度。 在字长较短的小 微型计算机上广泛使用

在这里插入图片描述
在这里插入图片描述

  • 在本例关于设计15条三地址指令中,1111不用,它用来当做扩展标志。表明三地址指令的操作码向后面扩展了一个地址码的长度(4位)。当计算机看到1111就把这条指令当做二地址指令。 采用这种扩展操作码技术可以设计出61条指令,但如果采用定长操作码则只能设计出2^4条存储指令。
  • 一般情况下是把1111当做标志的,但也可以让1110,1101……当做标志,比如三地址向二地址转换设立1101、1110、1111三个标志位。注意,这是三地址到二地址的标志,并不是二地址向一地址的标志(二-->一的标志是 1111 1111)。 ???
    1. 1101为标志时,有0000 -->1111共16个地址。 (新扩展的四位可以取1101和1111)
    2. 1110为标志时,共有0000–>1111共16个地址
    3. 1111为标志时,共有0000–>1110共15个地址
  • 说明:实际上扩展操作码有多种扩展方式,在设计变长操作码的指令系统时,应尽量让使用频度高的指令占用的操作码,对使用频度低的指令可占用较长的操作码,这样可以缩短经常使用的指令的译码时间

相关概念

机器字长:计算机一次处理二进制数的位数
指令字长 : 一条指令所对应二进制的位数,指令的长度取决于操作码的长度操作码地址的长度操作地址的个数。理论上希望指令字长尽可能的短,这样可以节省存储空间 减少访存次数,提高指令执行速度,但这样一来指令的数量就非常有限。
存储字长 : 存储器中一个存储单元地址所对应的**存储单元(空间)**里面一次能存储或取出的二进制数的位数
三者关系 : 最开始要求三者相同,但后来随着硬件与软件的发展,它们三者的长度可以不一样了,但它们三个的字长必须是字节的整数倍
CPU访问的单位 :CPU访问的单位是字节。


地址码

  • 用来指明操作数、结果、下一条指令的地址。在地址码字段减少的过程中,指令总长度不变,操作码字段长度不变! 现在假设指令长度是32位,操作码长度是8位
一、 四地址指令

根据地址码字段的个数的不同可分为:四地址指令、三地址指令、二地址指令、一地址指令和零地址指令。下面我们来看一下四地址指令的结构:

opA1A2A3A4

A1 :指明第一个操作数的地址
A2: 指明第二个操作数的地址
A3: 指明结果的地址
A4: 指明下一条指令的地址
完成功能:(A1) OP (A2)->A3,四地址指令直观易懂,但指令字长较长,且每个地址码字段的寻址范围较小(地址码各占6位,寻址范围2^6^=256)。(4次访问内存)

二、 三地址指令

因为程序是按顺序执行的,因此CPU会自动形成下一条指令的地址,这样就可以省去第四个地址字段A4形成三地址指令,结构如下:

opA1A2A3

A3: 指明结果的地址
完成功能:(A1) OP (A2)->A3
在指令字长不变的情况下,三地址指令提高了剩余三个地址码字段的寻址范围,但译码难度相对增大(地址码各占7位,寻址范围2^8^)。(4次访问内存)

三、 二地址指令

在三地址指令的基础上,我们将A3用A1或A2来代替,运算结果不保存在A3中,而是保存在参与运算的A1或A2中,这样就形成了二地址指令,其结构如下:

opA1A2

A1 :指明第一个操作数的地址
A2: 指明第二个操作数的地址
A1(或A2 ):又作为运算结果的存放地址
完成功能:(A1) OP (A2) -> A1(A2), 同城存放结果的地址码字段称为目的操作数,另一个称为源操作数,在指令字长不变的情况下,地址码字段的寻址范围继续扩大(地址码各占12位,寻址范围2^12^)。需要注意的是,目的操作数原来存放的内容已经被破坏了。二地址指令还可以分为三类。(4次访问内存)
在这里插入图片描述

四、 一地址指令

如果我们把某个操作数以隐含的方式或指定的方式存放在累加器ACC中,那么就可以用ACC代替A1或A2。就形成了一地址指令。其结构如下:

opA1

A1:指明一个操作数的地址
另一个操作数采用隐含的方式之处,一般在累加器ACC中。
完成功能 : (A1)OP (ACC) -> ACC, 地址码的寻码指令大大提高,但译码难度相对增大。使用累加器,因此访存次数是2次。

五、 零地址指令

没有地址码 , 只有操作码的指令地址称为零地址指令,其结构如下:

op

通常,用来表示不需要地址码或者有一个或两个隐含地址的指令。如停机指令、栈堆类指令等

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值