操作命令的分析

首先我们需要知道,指令不是计算机当中的最小执行单位,指令还可以再进一步细分为各种微操作(微动作),在不同的指令周期其微操作也不同。
这一节就把指令分为四个周期:

  • 取指周期
  • 间址周期
  • 执行周期
  • 中断周期

对这四个不同的周期分别分析一条指令所需要执行的微操作有哪些。在后面的讨论的中有如下假设:

前提假设: 假设CPU内有四个寄存器:

  • MAR地址总线相连,存放欲访问的存储单元地址
  • MDR数据总线相连,存放欲写入存储器的信息或最近从存储器中读出的信息
  • PC存放现行指令的地址,有计数功能
  • IR存放现行指令

外加一个控制器CU和一个累加器ACC。

前面提过,MDR既可以存储指令,也可以存储操作数,这里讲的操作命令的分析,所以默认这里MDR存储的都是指令或者指令地址

同时做出如下申明:

  • **→**表示发送控制信号或者命令地址或者命令
  • 控制信号
    • 1→**R**:发送**R**EAD信号,也就是CU控制CPU开始操作
    • 1→**W**:发送**W**RITE信号,也就是CU控制CPU开始操作
  • **M()**:这里的M表示存储器,括号里面是地址,整体对应的就是存储器中该地址对应的指令
  • **Ad()**:这里的Ad表示地址码,括号里面的是命令,整体对应的就是括号中命令的地址码。
  • **OP()**:这里的OP表示操作码,括号里面的是命令,整体对应的就是括号中命令的操作码。
  • **ID**:指令译码器

取指周期

取指操作所需要的微动作如下:
(1)现行指令地址送至存储器地址寄存器,记作PC→MAR
(2)CU向主存发读命令,启动主存作读操作,记作1→R
(3)将MAR(通过地址总线)所指的主存单元中的内容(指令)经数据总线读至MDR内,记作M(MAR) →MDR
(4)将MDR的内容送至IR,记作MDR→IR
(5)形成下一条指令的地址,记作(PC)+1→PC
(6)指令操作码送至指令译码器,记作OP(IR)→ID

间址周期

间址周期完成取操作数有效地址的任务,具体操作如下:
(1)将指令的地址码部分(形式地址)送至存储器地址寄存器,记作Ad(IR) →MAR
(2)向主存发读命令,启动主存作读操作,记作1→R
(3)将MAR(通过地址总线)所指的主存单元中的内容(有效地址)经数据总线读至MDR内,记作M(MAR) →MDR
(4)将有效地址送至指令寄存器的地址字段,记作MDR→Ad(IR)

最后一步此操在有些机器中可省略。

这里解释一下,由于间址周期一定是在取值周期之后的,所以在取值周期的时候,PC中已经是下一条指令的地址了。那么当前所需要间址的指令,不在PC当中,而在IR当中。也就解释了为什么第一步从IR当中获取地址送入MAR当中。
间址周期是用于获取指令的真实地址的周期,所以最后一步是把地址传入Ad(IR)。

执行周期

访存指令

为简单起见,这里只考虑直接寻址的情况,不考虑其他寻址方式。
(1)加法指令 ADD X
该指令在执行阶段需完成累加器内容与对应于主存X地址单元的内容相加,结果送累加器的操作,具体为:
  ①将指令的地址码部分送至存储器地址寄存器,记作Ad(IR) →MAR
  ②向主存发读命令,启动主存作读操作,记作1→R
  ③将MAR(通过地址总线)所指的主存单元中的内容(操作数)经数据总线读至MDR内,记作M(MAR) →MDR
  ④给ALU发加命令,将ACC的内容和MDR的内容相加,结果存于ACC,记作(ACC)+(MDR) →ACC
  当然,也有的加法指令指定两个寄存器的内容相加,如ADD AX,BX,该指令在执行阶段无需访存,只需完成(AX)+(BX) →AX的操作

(2)存数指令 STA X
该指令在执行阶段需将累加器ACC的内容存于主存的X地址单元中,具体操作如下:
  ①将指令的地址码部分送至存储器地址寄存器,记作Ad(IR) →MAR
  ②向主存发写命令,启动主存作写操作,记作1→W
  ③将累加器内容送至加R,记作ACC→MDR
  ④将MDR的内容(通过数据总线)写入到MAR(通过地址总线)所指的主存单元中,记作MDR→M(MAR)

(3)取数指令LDA X
该指令在执行阶段需将主存X地址单元的内容取至累加器ACC中,具体操作如下:
  ①由将指令的地址码部分送至存储器地址寄存器,记作Ad(IR) →MAR
  ②向主存发读命令,启动主存作读操作,记作1→W
  ③将MAR(通过地址总线)所指的主存单元中的内容(操作数)经数据总线读至MDR内,记作M(MAR) →MDR
  ④将MDR的内容送至ACC,记作MDR→ACC

以上三个指令,能理解最好,不能理解就硬背,感觉大概率会考一道相关的题目,可以参见书上P382页 例9.1

非访存指令

非访存指令都比较简单,如下:
(1)清除累加器指令CLA:该指令在执行阶段只完成清除累加器操作,记作0→ACC
  (2)累加器取反指令COM:该指令在执行阶段只完成累加器内容取反,结果送果加器的操作,记作第九章:控制单元的功能 - 图1
  (3)算术右移一位指令SHR:该指令在执行阶段只完成累加器内容算术右移一位的操作,记作L(ACC) →R(ACC)ACC**0→ACC0
  (4)循环左移—位指令
CSL:该指令在执行阶段只完成累加器内容循环左移一位的操作,记作R(ACC) →L(ACC),ACC0→ACCn
  (5)停机指令
STP:计算机中有一运行标志触发器G,当G=1时,表示机器运行:当G=0时,表示停机。STP指令在执行阶段只需将运行标志触发器置“0”,记作0→G**。

不重要,有个印象就好了。

转移指令

(1)无条件转移指令JMP X
该指令在执行阶段完成将指令的地址码部分X送至PC的操作,记作Ad(IR) →PC
(2)条件转移(负则转)指令BAN X
该指令根据上一条指令运行的结果决定下一条指令的地址,若结果为负(累加器最高位为1,即A0=1),则指令的地址码送至PC,否则程序按原顺序执行。由于在取指阶段已完成了(PC)+1→PC,所以当累加器结果不为负(即A0=0)时,就按取指阶段形成的PC执行,记作第九章:控制单元的功能 - 图2
这里的+表示的或运算。

也不重要,有个印象就好了。

中断周期

写入0地址

这里采用硬件向量法寻找入口地址:
(1)将特定地址“0”送至存储器地址寄存器,记作0→MAR
(2)向主存发写命令,启动存储器作写操作,记作1→W
  (3)将PC的内容(程序断点)送至MDR,记作PC→MDR
  (4)将MDR的内容(程序断点)通过数据总线写入到MAR(通过地址总线)所指示的主存单元(0地址单元)中,记作MDR→M(MAR)
  (5)向量地址形成部件的输出送至PC,记作向量地址→PC,为下一条指令周期作准备
  (6)关中断,将允许中断触发器清0,记作0→EINT(该操作可直接由硬件线路完成)

写入堆栈

(1)程序断点存入堆栈,记作SP→MAR
后面五步同上。


控制单元的功能

控制单元的外特性

下面是一张反映控制单元CU外特性的图:
image.png
主要有两部分构成:输入信号输出信号

输入信号

输入信号有如下几种来源:

  1. 时钟

一个时钟脉冲让控制单元发送一个操作命令。

控制单元需要按照一定的先后顺序以及一定的节奏发送各个控制信号,这个就由时钟信号决定。

  1. 指令寄存器

指令的操作码字段决定了应该发送哪一种控制信号。

  1. 标志寄存器

主要用于条件判断等指令,通过标志位判断需要执行哪一种控制信号。

例如根据标志位的正负来判断执行跳转指令还是中断指令。

  1. 系统总线

例如中断请求等。

输出信号

输出信号分为两种:

  • CPU内信号:主要用于CPU内寄存器之间的传送和控制ALU实现不同的操作
  • 送至系统总线的信号:例如命令主存读/写或者中断响应等

    控制信号举例

    下面介绍在执行**ADD @X**命令,控制信号的具体作用。

    注意这里**@**表示这个指令需要间址寻找

不采用CPU内部总线的方式

如图所示:
image.png
在上图当中有很多,我们用**C****i**进行表示,控制信号的作用就是控制**C****i**的开关,使得相关的线路呈现导通的状态
执行这一条指令需要三个周期:

  1. 取指周期

根据取指操作微操作的步骤我们可以知道,控制信号打开Ci的操作为:
① 控制信号C0有效,打开PC送往MAR的控制门;
② 控制信号C1有效,打开MAR送往地址总线的输出门;
③ 通过控制总线向主存发读命令;
④ C2有效,打开数据总线送至MDR的输入门;
⑤ C3有效,打开MDR和IR之间的控制门,至此指令送至IR;
⑥ C4有效,打开指令操作码送至CU的输出门。CU在操作码和时钟的控制下,可产生各种控制信号;
⑦ 使PC内容加1(图中未标出)。

  1. 间址周期

① C5有效,打开MDR和MAR之间的控制门,将指令的形式地址送至MAR;
  ② C1有效,打开MAR送往地址总线的输出门;
  ③ 通过控制总线向主存发读命令;
  ④ C2有效,打开数据总线送至MDR的输入门,至此,有效地址存入MDR;
  ⑤ C3有效,打开MDR和IR之间的控制门,将有效地址送至IR的地址码字段。

  1. 执行周期

① C5有效,打开MDR和MAR之间的控制门,将有效地址送至MAR;
  ② C1有效,打开MAR送往地址总线的输出门;
  ③ 通过控制总线向主存发读命令;
  ④ C2有效,打开数据总线送至MDR的输入门,至此,操作数存入MDR;
  ⑤ C**6,C7**同时有效,打开AC和MDR通往ALU的控制门;
  ⑥ 通过CPU内部控制总线对ALU发“ADD”加控制信号,完成AC的内容和MDR的内容相加;
  ⑦ C8有效,打开ALU通往AC的控制门,至此将求和结果存入AC。

采用CPU内部总线的方式

image.png
设置总线的好处,就是所有的部件都通过总线连接,比较清晰高效。

具体过程看看书上P381页吧,感觉没必要知道这个。

  • 不采用CPU内部总线的情况下,一个时钟信号完成一个微操作
  • 采用CPU内部总线的情况下,两个时钟信号可能才能完成一个微操作

    需要两个时钟信号的原因在于,有些微操作需要通过总线,X -> 总线总线 ->Y需要两个步骤,但是这两个步骤是一个微操作。

多级时序系统

机器周期

机器周期**可以看做指令执行过程中的一个**基准时间(单位时间)
由于指令的操作大致分为两类:

  • CPU内指令
  • 有关主存操作的指令

我们又知道,CPU内指令执行的速度比主存相关的指令会快很多,所以基准时间的选择需要根据时间长的来,也就是说基准时间一般设置为一次访存的时间
一般情况下,一个指令周期包含多个机器周期

时钟周期

在一个机器周期里面,可以完成多个微操作,这些微操作可以通过时钟信号来控制,一个时钟信号就产生一个微操作,所以一般情况下,一个机器周期包含多个时钟周期(节拍)
第九章:控制单元的功能 - 图6 :::info 时钟信号的频率就是CPU的主频。
第九章:控制单元的功能 - 图7 :::

多级时序系统

机器周期、节拍状态构成了多级时序系统:
定长机器周期
不定长机器周期
由上面两张图可以知道,机器周期包含的时钟周期个数不是固定的。CPU的主频越快,说明机器的运行速度越快。
举个例子: :::info 题目:某CPU的主频为8MHz,若已知每个周期包含4个时钟周期,该机的平均指令执行速度为0.8MIPS,试求该机的平均指令周期及每个指令周期含几个机器周期?若改用时钟周期为0.4微秒的CPU芯片,则计算机的平均指令执行速度为多少MIPS?若要得到平均每秒40万次的指令执行速度,则应采用主频为多少的CPU芯片? ::: 解答

  1. 根据平均指令执行速度为0.8MIPS,求得平均指令周期为1/0.8=1.25μs
  2. 每个指令周期含1.25/0.5=2.5个机器周期
  3. 0.4μs的芯片,主频为1/0.4=2.5MHZ,根据平均指令速度与机器主频有关,的平均指令执行速度为(0.8MIPS×2.5MHZ)/8MHZ=0.25MIPS

    书上P387页的例9.3也可以看一下。

控制方式

同步控制方式

所谓同步控制,就是所有的指令以及微操作都是事先确定好的,受到统一的基准信号控制。
同步控制方式有三种:
(1)采用定长的机器周期
特点:所有的指令都按照拥有最长微操作序列和最繁琐的微操作作为标准,采用完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期

比如说一个指令,假设微操作时间都相同,指令的取值周期需要3个微操作,执行需要4个微操作,指令的机器周期按照4个微操作作为标准,也就是4个时钟周期。

(2)采用不定长的机器周期
采用不定长的机器周期,代表着每一个机器周期内包含的节拍数量可以不相等,这种方式可以解决微操作执行时间的不同意的问题。

通常情况下,大多数微操作会安排在一个较短的机器周期内完成 复杂的微操作会通过延长机器周期或者增加节拍的方式来解决。

(3)采用中央控制和局部控制的方法
这种方案就是:

  • 把简单的指令放在统一的,较短的机器周期内完成,称为中央控制
  • 把复杂的指令采用局部控制的方式来完成

    异步控制方式

    采用应答的方式控制,没有基准信号,固定的周期节拍和严格的时钟同步,通过专门的应答线保证某一条指令完成结束之后立刻开始下一个指令。这样CPU就可以没有空闲状态

    联合控制方式

    联合控制是将异步控制同步控制相结合的一种控制方式。

    人工控制

  1. Reset(复位键)

    用于机器复位,相当于重启。

  2. 连续或者单条执行转换开关

    用于观察完成一条指令后的机器状态或者观察连续运行形成之后的结果

  3. 符合停机开关

    用于停止机器运行。