微计算机原理及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 微计算机基本工作原理

在开始接触到微计算机结构时,一个现代微计算机结构显得太复杂了。为便于分析,先从一个以实际系统为基础、经过简化的微处理器系统的典型模型着手,分析其基本结构和工作原理,然后再过渡到实际的微计算机。因此,这里暂不考虑外部设备及其接口,而是先从一个由CPU和一片半导体存储器构成的最简单的模型机着手进行分析。图1-7示出这种模型微计算机结构。

1.6.1 系统连接

我们知道CPU是微计算机的核心。这个核心是靠3组总线将系统其他部件、存储器、I/O接口连接起来的。这3组总线是数据总线DB(Data Bus),地址总线AB(Address Bus)和控制总线CB(Control Bus)。

1.数据总线DB

数据总线是传输数据或代码的一组通信线,其条数与处理器字长相等。例如,8位微处理器的DB有8条,分别表示为D0~D7,D0为最低位。数据在CPU与存储器(或I/O接口)间的传送是双向的,因此DB为双向总线,其双向的实现借助于双向数据缓冲器,如图1-8所示。当三态控制信号TSC=1时,输入门开放,数据由存储器(或I/O接口)流进CPU;而当时,则输出门开放,数据自CPU内部传输到存储器(或I/O接口)。TSC信号由CPU内部产生。不同的微处理器用做TSC的信号也不同。常用的信号是R/W(读/写控制信号)。

图1-7 模型计算机结构

图1-8 由双向数据缓冲器实现数据双向传输

2.地址总线AB

地址总线是传送地址信息的一组通信线,是微处理器用来寻址存储器单元或I/O接口的端口用的总线。例如,8位微处理器的地址总线条数为16,分别用A0~A15表示,其中A0为最低位。由16位地址线可以指定216=65536个不同的地址(常略称为64K内存单元)。地址常用16进制数表示,地址范围为0000H~FFFFH。计算机中常常又将256个单元称为一个页面,例如将0000H~00FFH的256个单元称为零页页面。

3.控制总线CB

控制总线是用来传送各种控制信号的。这些信号是微处理器和其他芯片间相互反映情况和相互进行控制用的。有的是CPU发给存储器或I/O接口的控制信号,称输出控制信号。有的又是外设通过接口发给CPU的控制信号,称输入控制信号。控制信号间是相互独立的,其表示方法采用能表明含义的缩写英文字母符号,若符号上有一横线,则表示用负逻辑(低电平有效),否则为高电平有效。

1.6.2 微处理器的内部结构

典型微处理器的内部结构框图如图1-9所示。由图可见,微处理器内部主要由4部分组成。为了减少连线占用面积,采用内部单总线,即内部所有单元电路都挂在内部总线上,分时使用总线。

1.寄存器阵列

寄存器阵列包括通用寄存器R1~R8和专用寄存器SP、PC等,用来暂时存放数据和地址,是微处理器内部的临时存储单元。由于CPU可以直接处理其中的数据和地址,因此可以减少访问存储器的次数,从而提高运算速度。通用寄存器R和内部数据总线进行双向连接,由多路转换器确定哪个寄存器参加工作。

图1-9 典型微处理器的内部结构框图

程序计数器PC(Program Counter)的位数等于地址总线的条数。它是专门设置来存放现行指令地址的。每当取出现行指令地址后,PC就自动加1(转移时除外),以指向下一条指令的地址。如果指令是多字节的,则每取一个字节,PC自动加1,当取完一条指令的所有字节之后,PC仍指向下一条指令的地址。一般指令按顺序执行,因此PC用来控制程序执行的顺序,为执行的程序计数。仅当执行转移指令时,PC的内容才由转移地址取代,从而改变程序执行的正常次序,实现程序的转移。

堆栈指示器SP(Stack Pointer)是用来指示RAM中堆栈栈顶地址的寄存器。堆栈存储器是数据暂时堆放的场地,每当一个数据(8位)推入或弹出时,SP的内容自动减1或加1,以保证始终指向栈顶地址。

2.运算器

运算器是在控制器控制下对二进制数进行算术逻辑运算及信息传送的部件,由累加器A、暂存器TMP、算术逻辑单元ALU、标志寄存器F及其他逻辑电路组成。

(1)累加器A(Accumulator):累加器本身没有运算功能,但它是协助算术逻辑单元ALU完成各种算术逻辑运算的关键部件之一。它有两个功能:运算前寄存第一操作数,是ALU的一个操作数的输入端;运算后,存放ALU的运算结算。它既是操作数寄存器又是结果寄存器。累加器电路实际是一个有并行输入/输出能力的移位寄存器,其位数等于微处理器的数据字的字长,如8位的μP,累加器A就由8位触发器组成。

(2)暂存器TMP(Temporary):是用来暂存从内部数据总线送来的、来自寄存器或存储器单元的另一操作数,是ALU的另一个操作数的输入端,它只是一个内部工作寄存器,不能由使用者用程序控制。

(3)算术逻辑单元ALU(Arithmatic Logic Unit):是运算器的核心部件。其功能是在控制命令的作用下,完成各种算术(加、减、乘、除)、逻辑(与、或、异或、取反)运算和其他一些操作。它以累加器A的内容为第一操作数,以暂存器TMP的内容为第二操作数,有时还包括由标志寄存器F送来的进位C。操作结果S送回累加器。与此同时,也把表示操作结果的一些特征送标志寄存器F保存。

(4)标志寄存器F(Flag)或称状态码寄存器:标志寄存器是用来保存ALU操作结果的特征状态的,如运算结果有无进位、是否为零等。不同的微处理器所表示的特征不完全相同,但都可以作为控制程序转移的判断条件。

下面以两个数15H和37H为例来说明运算器的工作情况,如图1-10所示。设累加器A中的数为15H,寄存器B中的数为37H,当执行加法指令ADD A,B时,37H先被取入TMP中,然后在ALU中进行相加,相加结果4CH经内部数据总线送回累加器A。同时操作结果将引起F中相应特征位的变化。

图1-10 两个数15H和37H的相加操作

3.控制器

控制器是计算机系统发布操作命令的部件,犹如人脑的神经中枢一样,是计算机的指挥中心,它根据指令提供的信息实现对系统各部件(包括CPU内和CPU以外)操作的控制。例如计算机程序和原始数据的输入,CPU内部的信息处理,处理结果的输出,外部设备与主机之间的信息交换等,都是在控制器的控制之下实现的。

控制器由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和定时控制电路(Timing and Control)组成。CPU根据程序计数器PC指定的地址,首先把指令的操作码从存储器取出来由数据总线DB输入到IR中寄存,然后由指令译码器ID进行译码产生相应操作的控制电位。每一种控制电位对应一种特定的操作(又称微操作),最后通过定时和控制电路,在外部时钟Φ作用下,将ID形成的各种控制电位,按时间的先后顺序和节拍发出执行每一条指令所需要的控制信号,指挥系统对适当的部件,于适当的时间,去完成适当的操作,有条不紊地完成指令规定的任务。

4.数据和地址缓冲器

数据和地址缓冲器简称总线缓冲器,是数据或地址信号的进出口,用来隔离微处理器的内部总线和外部总线,并提供附加的驱动能力。数据总线缓冲器是双向三态缓冲器,地址总线缓冲器是单向(输出)三态缓冲器。

1.6.3 存储器的内部结构

存储器是存放程序和数据的装置。半导体存储器的内部通常由存储单元阵列、地址寄存器、地址译码器和数据缓冲器以及控制电路5部分组成。

每个存储单元有一个唯一的编址,它可以按字编址,也可以按字节编址。在按字编址时,每个存储单元能存储的二进制信息的长度即为CPU的字长;在按字节编址时,每个存储单元能存储的二进制信息的长度为8位即一个字节。在微计算机中,通常按字节编址来组织存储器。图1-11示出按字节编址的存储器内部结构。

图1-11 存储器内部结构图

当对指定的存储单元进行读或写(统称为访问,Access)时,应该首先将存储器单元的地址(P位二进制数)送入地址寄存器,然后由地址译码器译码,从N=2P个存储单元中选择指定的那个存储单元,并在CPU发来的控制信号(读)或(写)的控制下,将其中存放的数码(m位)读出到数据缓冲器再输出,或者将由数据缓冲器输入的m位数码写入到所指定的存储单元中。前者称为读存储器操作,后者则称为写存储器操作。

1.读操作

读操作之前,存储单元中已经存放有内容(指令代码或操作数)。例如,图1-12(a)中执行读操作,可把地址00H单元中存放的指令代码00111110B(即3EH)读到CPU的指令寄存器,也可把另一地址01H单元中存放的操作数00010101B(即15H)读到CPU的数据寄存器A。

图1-12 存储器操作示意图

2.写操作

写操作是把CPU中某数据寄存器的内容存入某指定的存储单元。例如,图1-12(b)中的写操作是把累加器A的内容4CH通过DB总线存入20H单元。

读/写操作是在执行程序时进行的。下面我们将以一个极简单的例子来说明程序的编制和执行过程,借以了解微计算机的程序存储和程序控制的工作原理。

1.6.4 简单程序的编制和执行过程

1.指令系统简介

汇编语言程序的编制是依赖于CPU的指令系统的。每种CPU都有自己的指令系统,它包括计算机所能识别和执行的全部指令。这里,只对指令系统作一简单介绍。

指令包括操作码(Opcode)和操作数(Operand)或操作数地址两部分。前者指定指令执行什么类型的操作,后者指明操作对象或操作对象存放的地址以及运算结果送往何处。

每种CPU指令系统的指令都有几十条甚至上百条之多。为了帮助记忆,用助记符(Mnemonic Symbol)来代表操作码。通常助记符用相应于指令功能的英文缩写词来表示。如典型微处理器中,数的传送(Load)用LD,加法用ADD,输出用OUT,暂停用HALT。但是,计算机存储、识别和执行都只能按二进制编码形式的指令码进行,为此还应将助记符指令翻译成二进制码。翻译得到的二进制指令码可能为单字节、双字节、三字节甚至四字节。

2.程序的编制

题目:要求计算机执行15H加37H,结果存到20H单元。

步骤1:首先根据CPU的指令系统,用其中合适的指令完成题目任务的要求。这里,可写出完成两数相加的助记符形式表示的程序如下:

LD A,15H      ;将被加数取入累加器A
ADD A,37H     ;累加器内容和加数相加,结果在A中
LD(20H),A   ;将A中内容送到20H单元存放
HALT           ;停机

步骤2:将助记符形式的程序翻译成二进制码形式表示的程序(即机器代码Machine Code)。这一步由查指令表完成。

第一条指令: 00111110 ;LD A,n的操作码
             00010101 ;操作数15H的二进制形式
第二条指令: 11000110 ;ADD A,n的操作码
             00110111 ;操作数37H的二进制形式
第三条指令: 00110010 ;LD(20H),A的操作码
             00100000 ;操作数地址20H
第四条指令: 01110110 ;暂停指令的操作码

步骤3:程序存储。本程序4条指令共7字节。若将它们放在从00H号开始的存储单元中,共需要7个存储单元,如图1-13所示。

图1-13 机器码程序在存储器中的存放

3.程序执行过程

程序通常是按顺序执行的。执行时,应先给程序计数器PC赋以第一条指令的地址,这里为00H,接着开始取第一条指令,执行第一条指令;再取第二条指令,执行第二条指令,……直至遇到暂停指令为止,这个过程可概括为:

(1)取指令1过程

① CPU将PC的内容00H送至地址缓冲寄存器AR。

② 当PC内容送入AR后,PC内容自动加1,变为01H。

③ AR将00H地址信号通过地址总线送至存储器,经地址译码器译码,选中00H单元。

④ CPU经控制总线发出“读”命令到存储器。

⑤ 所选中的00H单元的内容3EH读到数据总线DB上。

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

⑦ 因是取指令阶段,读出的必定为操作码,故DR将它送至指令寄存器IR,经指令译码器ID译码后,发出执行这条指令所需要的各种控制命令。该过程见图1-14。

图1-14 取第一条指令操作示意图

指令经译码后,判定是一条取操作数送累加器A的指令。操作数放在第二字节,因此,执行第一条指令,即取出第二字节中的操作数。

(2)执行指令1的过程

① CPU把PC的内容01H送至AR。

② 当PC内容送至AR后,PC内容自动加1,变为02H。

③ AR将地址信号01H通过地址总线送到存储器,经地址译码后选中01H单元。

④ CPU经控制总线发出“读”命令到存储器。

⑤ 所选中的01H单元内容15H读到数据总线DB上。

⑥ 通过DB总线,把读出的操作数15H送到DR。

⑦ 因已知读出的是操作数,且指令要求送到累加器A,故由DR通过内部数据总线送入A中。此过程读者可以仿照图1-15拟出。至此,第一条指令执行完毕,接着进入第二条指令的取指阶段。

(3)取指令2的过程

① 把PC的内容02H送到AR。

② 当PC的内容送入AR后,PC自动加1,变为03H。

③ AR经地址总线把地址信号02H送至存储器,经地址译码后,选中相应的02H单元。

④ CPU发“读”命令到存储器。

⑤ 所选中的02H单元内容C6H通过数据总线送到DR。

⑥ 因是取指阶段,读出的必为操作码,故DR将它送至指令寄存器IR,经指令译码器ID译码后,识别出这是一条加法指令。将A的内容作为第一操作数,第二操作数在指令第二字节中,因此执行第二条指令的第一步必须取出指令第二字节中的操作数。然后在算术逻辑单元ALU中相加,最后把结果送回累加器A中。

(4)执行指令2的过程

① 把PC的内容03H送至AR。

② 当PC的内容送至AR后PC自动加1,变为04H。

③ AR通过地址总线把地址号03H送至存储器,经地址译码后选中03H单元。

④ CPU发“读”命令到存储器。

⑤ 所选中的03H单元内容37H读至数据总线DB上,送至DR中。

⑥ 因已知读出的是操作数,而且知道要与A中的内容相加,故此操作数通过内部数据总线送至暂存寄存器TMP中。

⑦ 由于算术逻辑单元ALU的两个输入端均有了操作数,故可执行加法操作。

⑧ 相加的结果由ALU输出经内部数据总线送至累加器A中。

上面的⑥、⑦、⑧步的操作过程可以参见图1-11。至此,第二条指令的执行阶段结束,接着转入第三条指令的取指阶段。第三条指令的取指也按上述类似过程进行。最后取回的第四条指令经译码,判定是暂停操作,于是机器暂停下来。

可以看出,程序的执行过程,就是周而复始地取指令、分析指令(译码)和执行指令的过程,直至该程序的全部指令执行完毕,由最后一条暂停指令实现停机。

4.运算结果的存储和输出过程

上面的简单程序执行完后,其结果保留在累加器A中。若按题目要求将运算结果存入存储单元20H中保存,或者希望将此结果通过接口电路送至某一外设(设外设端口为01H),则应在前面程序的基础上加入新的第三条存储指令和第四条输出指令,最后一条仍为暂停指令。

LD A,15H
ADD A,37H
第三条:LD(20H),A ;将累加器A中的结果存入20H单元
第四条:OUT(01H),A ;将结果输出到01H号外设端口
HALT

图1-15 新加入指令的存储

新加入的指令经翻译成二进码后,依次接着第二条指令存放在存储器中,如图1-15所示。

新加入的第三条指令的取指过程与前面指令的取指过程类似。当把04H单元的指令码32H译码后,识别出这是一条存数指令,存数的地址放在第二字节,因此执行这条指令首先需要取出第二字节的操作数地址,这和指令1的操作执行过程类似。但不同的是:第一条指令执行时取回的是操作数15H,放入累加器A;而第三条指令执行时取回的是操作数地址20H,当被取回并放到DR⑥后,接着执行的操作是把DR的内容传到地址缓冲寄存器AR⑦,再由AR把20H地址发至存储器,经地址译码后选中20H单元⑧,CPU发来“写”命令⑨,累加器A中的内容4CH经内部数据总线送至数据缓冲寄存器DR输出到DB总线上,接着就写入到存储单元20H⑩。写入操作过程如图1-16所示。

图1-16 执行第三条指令的写入操作示意图

第三条指令的执行操作分为两部分:前面部分为读操作,即将05H单元中的操作数地址20H读入后并放到AR中(见图1-16的⑤、⑥、⑦)。后面部分为写入操作,即将A中内容写入到20H单元(见图1-16中的⑧、⑨、⑩)。

新加入的第四条指令的取指和执行与第三条类似,但不同的是:取回的指令D3H经译码后知道是一条输出指令,因而执行时前面部分的读操作读回的是外设端口地址01H(而不是存储器地址),于是接着把累加器中的内容4CH写入到端口上去。

综上所述:计算机的工作过程,实质上就是在程序控制下,自动地、逐条地从存储器中取指令,分析指令,执行指令,再取下一条指令,周而复始执行指令序列的过程,这就是冯·诺依曼的程序存储和程序控制的计算机的基本原理。