CPU如何执行一个程序(一条指令)?取指—译码—执行—写回过程

简介

对于一个CPU来说,执行指令一般要经过四个流程:
1.取指 2.译码 3.执行 4.写回

1 取指

在此图中,有程序计数器(PC)、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)、控制器(CU)、内存(Memory)五个组件。内存当前的指令为(ADD:R1,R2),内存地址为101。

  1. 程序计数器指向当前指令在主存的位置。即PC指向内存的101地址。PC所指向的内容会放到指令地址总线上,对指令启动读命令。在一条指令取出后,PC指针指向的地址会加1,即指向102地址。

  2. 控制器将PC中的指令地址通过内部总线传输到MAR中。

  3. MAR存储了指令或数据的内存地址。MAR将控制指令传输到地址总线上。

  4. 控制单元通过MAR提供的地址,发送信号访问存储器并进行读操作。

  5. 存储器通过地址译码器查到存储地址为101的存储单元的内容(ADD:R1,R2),并将存储单元的内容传送到MDR中。

  6. MDR中保存的数据通过内部总线传送给IR寄存器(指令寄存器)。

至此,取指令部分完成!

2 译码

  1. MDR中保存的数据通过内部总线传送给IR寄存器。指令包含操作数和地址码两部分。

  2. IR寄存器会分析出操作码部分和地址码部分。将操作码送入解码器,解析出ADD是加操作。

  3. 控制单元接收到解码器译码后的指令后,发出取数的操作命令。

  4. (对应图中6-2)IR寄存器中的地址码部分会送到MAR寄存器,从内存中读出R1,R2中的数。读出的R1,R2会存储在MDR中,之后送入ACC(累加器)。

3 执行

根据不能的操作码,进行不同的操作。

3.1 加减法

ACC:累加器
ALU:算术逻辑单元
MQ:乘商寄存器

第一步:取数操作将 被加数/被减数 存取至ACC寄存器中。

第二步:将[M]地址空间的数据存放在X寄存器中。

第三步:ACU累加器对数进行 加/减 操作,结果存放在ACC中。

3.2 乘法

第一步:取数操作将 被乘数 存取至ACC寄存器中。

第二步:将[M]地址空间的数据存放在MQ寄存器中。

第三步:将ACC中的数据存放在X寄存器中。

第四步:将ACC寄存器清空。

第五步:ACU累加器对数进行 乘 操作,高位存放在ACC中,低位存放在MQ寄存器中。

3.3 除法

第一步:取数操作将 被除数 存取至ACC寄存器中。

第二步:将[M]地址空间的数据存放在X寄存器中。

第三步:ACU累加器对数进行 除 操作,余数存放在ACC中,商存放在MQ中。

4 写回

读取和写回操作其实执行存取指令。

写回:将ACC中的数据送至MDR寄存器,然后进行存操作。

0

Leave a Reply

Your email address will not be published.