单片机:微型计算机的工作过程

微型计算机的工作过程

    • [1. 引言](#1. 引言)
    • [2. 指令](#2. 指令)
    • [3. 工作过程](#3. 工作过程)
      • [3.1 执行第一条指令的过程](#3.1 执行第一条指令的过程)
      • [3.2 执行第二条指令的过程](#3.2 执行第二条指令的过程)
      • [3.3 执行第三条指令的过程](#3.3 执行第三条指令的过程)
    • [4. 总结](#4. 总结)

1. 引言

为了说明微型计算机的工作过程,以一个简单的的例子来介绍微型计算机的工作过程。即3+5=?

2. 指令

在介绍微型计算机的工作过程之前,先了解一下计算机的指令:

  • 指令:完成一个基本操作的命令。
  • 指令系统:一台计算机的全部指令的集合。
  • 操作码:指令功能的编号。
  • 操作数:为指令提供操作的数据或地址的编码。

3. 工作过程

以3+5=?为例的汇编语言程序和机器语言目标程序如下

汇编语言 机器语言 功能
MOV A, #03H 74 03H 把03H送入累加器A
ADD A,#05H 24 05H 05H与累加器A中内容相加,结果存入A
SJMP $ 80 FEH 死循环,循环到本身,程序持续循环,保持运行状态

编译好的机器语言目标程序有6个字节,假设存储器地址从00H开始。

3.1 执行第一条指令的过程

取第一条指令的过程

①当前程序计数器P内容(00H)送往地址寄存器AR。

②PC自动+1,(01H),指向下一个存储器单元。即第一条指令的操作数

③地址寄存器AR的内容00H通过地址总线AB送至存储器,经地址译码器选中相应的00H单元。

④CPU发出存储器"读"命令。

⑤在读命令的工作下,选中00H存储单元中的内容74H被读至数据总线DB上。

⑥读出的内容经数据总线DB送至数据寄存器DR。

⑦指令译码。因为取出来的是指令的操作码,所以数据寄存器DR的内容被送至指令寄存器IR中,然后再送至指令译码器ID,译码后由控制器发出执行这条指令的各种控制命令。

执行第一条指令

当指令译码器ID对操作码74H译码后,CPU就知道这是一条把下一个存储单位的数据(操作数)送至累加器A的指令,所以,该指令就把下一个存储器单元中的数据取出来送至累加器A的指令,所以,执行该指令就把下一个存储器单元中的数据取出来送至累加器A ,其操作过程如下:

①将当前程序计数器PC的内容01H送至地址寄存器AR。

②PC自动+1,(02H),这里指向下一条指令,为取下一条指令做好准备。

③地址寄存器AR的内容01H通过地址总线AB送至存储器,经地址译码器译码后选中存储器01H单元。

④CPU发出存储器"读"命令。

⑤在读命令的控制下,所选中的01H存储单元的内容03H被读至数据总线DB上。

⑥读出的内容金数据总线DB送至数据寄存器DR。

⑦因为经过译码已经知道本次读出的内容送到累加器A,所以数据寄存器DR的内容03H通过内部数据总线送至累加器A。此时第一条指令执行完毕,操作数03H被送到累加器A中。

3.2 执行第二条指令的过程

第一条指令执行完成后,程序计数器PC的值为02H,指向第二条指令在存储器中的首地址,计算机再次重复取指令和执行指令。过程如下:

取第二条指令

这个过程与取第一条指令的过程相似,这里不在重复。 取第二条指令后程序计数器PC的内容为03H。

执行第二条指令

①将当前程序计数器PC的内容03H送至地址寄存器AR。

②PC自动+1,(04H),这里指向下一条指令,为取下一条指令做好准备。

③地址寄存器AR的内容03H通过地址总线AB送至存储器,经地址译码器译码后选中存储器03H单元。

④CPU发出存储器"读"命令。

⑤在读命令的控制下,所选中的03H存储单元的内容05H被读至数据总线DB上。

⑥读出的内容金数据总线DB送至数据寄存器DR。

⑦数据寄存器DR的内容通过内部数据送至ALU的一个输入端。

⑧累加器A中的内容03H送至ALU的另一个输入端,在ALU中执行加法操作。

⑨相加的结果08H由ALU输出经内部数据总线送回累加器A中。

3.3 执行第三条指令的过程

第二天指令执行结束后,程序计数器PC的值为04H,指向第三条指令在存储器中的首地址,计算机再次重复取指令和执行指令,进入第三条指令的执行过程。

取第三条指令

这个过程与取第一条指令的过程相似,这里不在重复。 取第三条指令后程序计数器PC的内容为05H。

执行第三条指令

当第三条指令的操作码80H取出送指令译码器ID译码后,CPU就知道这是一条无条件相对位移指令,功能是把下一个存储单元的内容与当前程序计数器PC中的内容相加,加得的结果送回当前程序计数器PC。所以,执行该指令就把下一个存储单元中的数据取出来送至ALU的一端。PC的内容送至ALU的另一端,相加后ALU送回PC中。

①将当前程序计数器PC的内容05H送至地址寄存器AR。

②PC自动+1,(06H),这里指向下一条指令,为取下一条指令做好准备。

③地址寄存器AR的内容05H通过地址总线AB送至存储器,经地址译码器译码后选中存储器05H单元。

④CPU发出存储器"读"命令。

⑤在读命令的控制下,所选中的05H存储单元的内容FEH被读至数据总线DB上。

⑥读出的内容金数据总线DB送至数据寄存器DR。

⑦数据寄存器DR的内容通过内部数据送至ALU的一个输入端。

⑧PC中的内容06H送至ALU的另一个输入端,在ALU中执行加法操作。(6-2=4,见下面注意内容理解为什么是-2)

⑨相加的结果04H由ALU输出至PC中。

注意:

FEH 是补码 转化为二进制是 1111 1110B

转换为 反码是 1111 1101B

转换为 原码是 1000 0010B

转换为 十进制 是 -2。

取指,PC自增:CPU开始执行这条 SJMP $ 指令时,会先将这条2字节的指令从存储器中取出。为了指向下一条指令,PC 会先自动加2(即 PC = PC + 2)。此时,PC指向的是这条 SJMP 指令之后的地址。

计算跳转目标:接着,CPU根据偏移量 rel 计算最终要跳转到的地址。计算公式为:目标地址 = (PC当前值) + rel。

计算过程:目标地址 = (原地址 + 2) + (-2) = 原地址。这个计算结果就是 SJMP $ 指令自身的起始地址。

4. 总结

微型计算机的工作过程本质上是 在 CPU 控制器指挥,通过总线与内存、I/O 设备交换数据,并周而复始地执行"取指-译码-执行"循环 的过程。