1.4 微型计算机基本工作原理
计算机的结构大体有两类:一是哈佛(Harvard)结构,二是冯·诺依曼(Von Neumann)结构(也称普林斯顿结构)。
哈佛结构是由哈佛大学的物理学家A.Howard提出的,世界上第一台通用计算机ENIAC,就采用了哈佛结构。哈佛结构是程序和数据空间独立的体系结构,不仅采用不同的存储模块,而且通过各自的总线进行访问。其优点是可以并行访问程序和数据,从而提升了运行效率;其缺点是硬件结构复杂,对输入/输出设备的连接与处理要求高。
冯·诺依曼结构是由美籍匈牙利数学家冯·诺依曼提出的。相对于哈佛结构,其程序和数据共享存储空间和总线,由此带来的缺点是,将分时实现程序和数据的访问,影响了数据处理的速度;但其显著的优点是结构简单、易于实现。
冯·诺依曼结构的基本思想的主要内容是:
(1)计算机应由运算器、控制器、存储器、输入和输出设备等五大部分组成。
(2)存储器不但能存放数据,也能存放程序。计算机具有区分指令和数据的能力。而且数据和指令均以二进制数形式存放。
(3)将事先编好的程序存入存储器中,在指令计数器控制下,自动高速运行(执行程序)。
由于体系结构实现的便利和总线结构的易于扩展,使得冯·诺依曼结构成为PC机的主流体系标准。本书的主要内容也是针对冯·诺依曼体系结构的微型计算机。
微型计算机系统由硬件和软件两大部分组成。硬件是指那些为组成计算机而有机联系的电子、电磁、机械、光学的元件、部件或装置的总和;软件包括计算机运行所需的各种程序。硬件和软件系统本身还可细分为更多的子系统,如图1-3所示。
图1-3 微型计算机系统组成
1.4.1 微型计算机硬件系统组成
通用微型计算机的硬件系统由五部分组成:① 微处理器(CPU);② 内存储器(RAM、ROM);③ 总线(地址总线AB、数据总线DB、控制总线CB);④ 接口芯片(I/O接口);⑤ 输入/输出设备(外设,I/O)。
图1-4表示典型的通用微型计算机硬件系统结构。
图1-4 通用微型计算机硬件系统结构
1.微处理器CPU
微处理器是整个微型计算机硬件的控制指挥中心。不同型号的微型计算机性能的差别,首先体现在微处理器性能的不同。微处理器性能又与它的内部结构、硬件配置有关。但无论哪种微处理器,基本部件是相同的,可分为运算部分和控制部分。运算部分由算术逻辑单元ALU(Arithmetic Logic Unit)、累加器ACC(ACCumulator)、状态寄存器FR(Flags Register)和通用寄存器组RS(Register Series)组成;控制部分则包括程序计数器PC(Program Counter)、指令寄存器IR(Instructional Register)、指令译码器ID以及控制逻辑PLA等。图1-5是通用微处理器基本组成示意图。
图1-5 通用微处理器组成示意图
(1)ALU是微型计算机运算部分的核心。在控制信号作用下它可完成加、减、乘、除四则运算,还可进行与、或、非和异或等逻辑运算。
(2)ACC是通用寄存器中的一个,通用微型计算机中至少包含一个ACC。它往往提供送入ALU的两个运算操作数中的一个,而运算后的结果通常也是由ALU送回ACC。因为它跟ALU联系特别密切,常把它归在ALU中,而不归在通用寄存器组中。
(3)RS用来加快运算和处理速度。访问寄存器要比访问存储器快得多,因此在需要重复使用某些数据或中间结果时,可将其暂时存放在寄存器中,避免反复访问存储器,以提高执行速度。
(4)FR记录计算机运行的某些重要状态,必要时,根据这些状态控制CPU的运行。所谓“状态”是指:运算是否发生溢出,运算结果是否为零,运算结果是否为负,是否有进位等。
(5)堆栈和堆栈指针SP。堆栈是一组寄存器或指定存储器中的某一区域。在计算机中广泛使用“堆栈”作为信息的一种存取方式,尤其是在子程序(过程)调用和中断处理中经常使用。在堆栈中信息的存入(进栈Push)与取出(弹出Pop)过程好像货物堆放的过程,最先存放的货物堆在底部,而取货时只能将最后存放的先取出;最后存放的货物,堆放在顶部,因而最先取出。这种方式称为“后进先出”(LIFO)或称“先进后出”(FILO)。
堆栈指针SP(Stack Point)用来指示栈顶,其初值由程序员设定。在堆栈操作中,SP值会自动变化,其变化方向依据堆栈的类型而定。堆栈可分为向上生长型和向下生长型。一般来讲,对于向下生长型堆栈,将数据压入堆栈时,SP自动减1,向上浮动而指向新的栈顶;当数据从栈中弹出时,SP自动加1,向下浮动而指向新的栈顶。
(6)PC指示当前要执行的指令地址码。程序中的各条指令一般是按执行的顺序存放在存储器中。开始时,PC中的地址码为该程序第一条指令所在的地址编号。每取出一条指令,PC将自动加上该指令所占字节长度以指向第二条指令所在地址,这样就能顺序执行程序中的各条指令。在需要改变执行顺序时,PC根据程序的安排,设置新的值以指向新的指令地址。因此,PC是维持微处理器有序地执行程序的关键寄存器,是任何微处理器不可缺少的。
(7)IR、ID和控制逻辑PLA。这部分是整个微处理器的指挥控制中心,对协调整个微型计算机有序工作极其重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器中,通过指令译码(分析)确定应该进行什么操作,然后通过控制逻辑在确定的时间,向确定的部分发出控制信号。这部分对微处理器的设计者来说是核心部分,而使用微处理器的用户可以不必过多关心它。
需要指出的是,上文所述的CPU基本结构主要是针对通用处理器(典型的如Intel和AMD的CPU)的,目前应用广泛的还有微控制器MCU(典型的如MCS-51单片机)、数字信号处理器DSP(典型的如TMS320VC5000)和嵌入式微处理器(典型的如ARM9或ARM Cortex A-8),它们在各自的系统中承担主控处理器的作用,核心部分和通用处理器类似,但结构功能略有差异。
通用处理器可按体系结构分为IA-16(Intel Architecture,16-bit)、IA-32和IA-64(EM64T)。其中IA-16包括8088、8086、80286及兼容的16位微处理器,IA-32包括从80386到P4及兼容的32位微处理器,IA-64(EM64T)为目前迅猛发展中的64位微处理器。IA-16和IA-32微处理器也可合称为x86。从IA-16到IA-64(EM64T)的发展,主要体现在内部数据线、外部数据线、外部地址线宽度的提升,时钟频率的提高,指令执行速度的提高,CPU寻址方式、指令处理方式的改进等方面,可以说,它是高性能微处理器的发展之路。
划分微处理器的另一种方式是依据其使用的指令系统,可分为复杂指令集CISC(Complex Instruction Set Computing)和精简指令集RISC(Reduced Instruction Set Computing)。CISC是早期的微处理器(x86系列及其兼容CPU)使用的指令集。RISC是在CISC指令系统基础上发展起来的,相对于CISC型CPU,RISC型CPU指令种类很少,可采用超标量和超流水线结构,大大增加了并行处理能力,在同等频率下,采用RISC架构的CPU比CISC架构的CPU性能高很多。为了与同系列低端微处理器保持兼容,大多数PC机中使用的微处理器仍使用CISC指令集,但考虑到RISC在设计和指令结构等方面的优势,现在的CISC结构的微处理器都结合了部分RISC技术,形成以RISC为内核、CISC为外围的微处理器,如典型的有Intel Pentium系列和AMD K6系列等。
2.内存储器
微计算机系统的内存储器由大规模(LSI)或超大规模(VLSI)集成电路芯片构成,主要用来存储数据和程序。具体来讲,内存储器中存放着两类信息,一类是待处理的数据和运算结果,另一类是处理数据的程序。
内存储存器的工作过程大致如下:在执行程序前,预先把程序和原始数据存放于内存储器中,在处理过程中,由它向控制器提供指令代码,然后根据处理需要,随时向运算器提供数据,并把运算结果或中间结果存储起来,从而保证机器能按照程序自动地进行工作。因此,在冯·诺依曼计算机结构中,内存储器是极其重要的部件之一。
内存储器要保存数以万计的数据,如何把这些数据有规律地存放,以便存取数据时方便、迅速,是很重要的问题。其存放方法是,把内存储器分成一个个单元。每个单元存放着固定位数的二进制数据,这就是前面介绍的字节。每个单元都有一个编号与之对应,称为地址(地址码),只要指明地址,就可以到存储器的成千上万个单元中按所指地址存入或取出所需数据。
图1-6表示一个有m个单元(字),每个单元为8位二进制位的存储器。地址从小到大顺序编号,由0号单元至m-1号单元。地址码用二进制编码表示。由于二进制数读/写不方便,常用十六进制数表示地址。
现代通用微型计算机的字长为8、16、32、64位共4种规格。如市场销售的计算机存储器存储容量64KB,即表示该存储器有64×1024=65536字节的容量。
对存储器某地址的数据进行读或写(即取数或存数)操作统称为访问(Access)。为了实现存数和取数的目的,存储器除核心部分的存储体外,还需要一些辅助电路来支持其工作。这些部件包括存储器地址寄存器(MAR)和地址译码器,存储器数据寄存器(MDR)和控制整个存储器协调工作的控制电路,如图1-7所示。
图1-6 存储单元组织及地址表示
图1-7 存储器结构示意图
当CPU部件需要访问存储器的某个地址时,首先把地址码送到存储器的地址寄存器,经过译码电路选中相应地址单元。取数时,取出的数据送到存储器的数据寄存器,以供要用该数据的CPU适时取走。存数时,把要存入的数据送入数据寄存器,通过写操作将其存入指定地址的单元内。控制电路则根据本次访问存储器是取或存数,产生一定顺序的控制信号和脉冲。控制电路把存储器内部各部件有机联系在一起,并使它们协调地按一定节拍工作。
设存储器0003号单元已存放二进制信息10110110。现在要读出此信息,其过程是:首先将地址0003送往地址寄存器,地址译码器将地址译码后产生选中0003号单元的信号,随后在控制电路作用下发出读控制信号,0003号单元的内容10110110被读出并送往数据寄存器。若是写数据,过程类似,只是当译码器产生选中地址单元信号后,控制电路将发出写控制脉冲,将数据寄存器内容写入相应单元中。请注意,存储单元的地址及单元的内容是不相同的。
微型计算机存储器通常有两类:随机访问存储器RAM(Random Access Memory)和只读存储器ROM(Read Only Memory)。RAM可以随时写入内容,亦可进行修改。ROM事先存储规定好的内容,只能将规定内容读出,不能改写。
3.总线
计算机的各个组成部分必须有机地连接在一起,才能相互协调地工作。连接的方法有多种,最直观和最简单的方法是,把任何两个有联系的部件用导线直接连接起来。这种连接,虽然有直接传送、独立使用和传送速度快等优点,但其致命弱点是,各组成部分相互关系繁多,致使连线多且乱。因此,微处理器及微型计算机系统一般采用“总线”(Bus)结构把各个组成部分连接起来。
总线,实际上是一组导线,是各种信息线的集合,用来作为所有各个组成部分共同使用的“公路”。总线一般包括数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus)三种,如图1-4所示。
数据总线用来传输数据,通常包括CPU与内存储器或输入/输出设备之间、内存储器与输入/输出设备或外存储器之间交换数据的双向传输线路。地址总线用来传送地址,它一般是从CPU传送至内存储器、输入/输出设备。控制总线用来传送控制信号、时序信号和状态信息等,其中每根线的方向是一定的、单向的,但作为整体,控制总线是双向的。
微型计算机系统的总线可按连接对象的不同层次分为以下三类。
(1)内总线。又称板内总线,它把CPU、ROM、RAM、基本I/O接口、定时器及总线控制逻辑等部件连成一个系统,成为微机的基本硬件系统。内总线是微机系统的一级总线。
(2)系统总线。又称板间总线,它由CPU通过总线控制逻辑进行管理,在该总线上装有5~8个通用I/O扩展插槽,不同设备的接口电路都将通过该扩展槽与主机连接。系统总线是微机插板级总线,如8位PC/XT总线,16位ISA总线,32位VESA总线和32位或64位PCI总线等。
(3)外部总线。用于设备与设备之间连接,常用的有RS-232、IEEE-488、IEEE1394和USB总线等。
另一方面,根据总线组织方法的不同,总线结构又可分为单总线、双总线、多层(双层)总线,如图1-8所示。
单总线结构就是前面所述的三总线结构,早期的大多数微机都采用这种结构,其逻辑简单,成本较低。双总线结构中,I/O和存储器各自拥有连接至CPU的总线通路,相当于拓展了总线带宽,提高了总线的数据传输速率,但另一方面,这样的结构下,CPU要负责两条总线的通信,往往需要增加专门的I/O管理芯片来分担CPU的管理任务,中期的微机采用这种结构。
双层(多层)总线的设计思路是,速度差异较大的器件使用不同总线,而速度相近的器件使用同一类总线,这种结构不仅可以增加总线挂载数量,而且在系统规模增加时,使总线设计相对简单,能充分发挥各种总线的效率。
例如,图1-8中的双层总线分为局部总线和全局总线,前者连接CPU和局部I/O接口及局部存储器(速度较高),后者连接全局I/O接口、全局存储器及局部总线部分(速度相对低)。当CPU通过局部总线进行通信时,其工作方式与单总线相同。当CPU需要访问全局I/O或全局存储器时,必须由总线控制逻辑统一进行安排,此时CPU就是系统的主控设备。这种总线结构可以实现双层总线(局部总线和全局总线)并行工作,同时增加了等效总线带宽,提高了系统数据处理和数据传输的效率。大多数后期的微机和工作站都采用这种双层或多层总线结构。
4.输入/输出设备与接口芯片
输入/输出设备是微型计算机系统与周围世界(包括用计算机的人)通信联系的渠道。微型计算机的输入/输出设备种类繁多。输入设备有键盘、条形码识别装置、音像识别以及模/数转换器等。输出设备有显示器、打印机、绘图仪以及数/模转换器等。常用作外存储器的磁盘、磁带既是输入又是输出设备。输入/输出设备又称外围设备(Peripheral Equipment)。
尽管输入/输出设备繁多,但它们有两个共同特点:① 常采用机械或电磁原理工作,所以速度较慢,难以与纯电子的CPU及内存储器的工作速度相匹配;② 要求的工作电平常常与CPU和存储器等采用的电平不一致。为了把输入/输出设备与计算机的CPU连接起来,需要一个中间环节——接口(Interface),用来锁存、变换、隔离和外设选址,以保证信息和数据在外设与CPU和内存之间正常传送,这类功能电路通常集成为可编程接口芯片。
图1-8 微型计算机的三种总线结构
1.4.2 微型计算机软件系统
为了运行、管理和维护计算机所需的程序总和就是计算机软件。它可分为系统软件和应用软件两大类。系统软件是用来支持应用软件的开发与运行的。它包括操作系统、实用程序和各种语言处理程序。应用软件是用来为用户解决某种应用问题的程序及有关的文件资料。
硬件、系统软件和应用软件相互之间的关系如图1-9所示。它表明计算机的基础是硬件,在此基础上建造了一层系统软件(操作系统和实用程序),再在系统软件基础上又建造各种语言处理程序。最外层是用户,用户通过键盘、显示器等交互设备使用应用软件,应用软件通过系统软件访问底层硬件,最终实现用户所需功能。
图1-9 微型计算机软件系统的层次关系
1.4.3 微型计算机中指令执行的基本过程
1.指令与程序简介
指令是人们规定计算机执行特定操作(加、减、乘、除、移位等)的命令。微处理器就是根据指令指挥和控制计算机各部分协调地动作,以完成指令所规定的操作。计算机全部指令的集合称为计算机指令系统。指令系统定义了计算机的处理能力,不同型号的计算机有不同的指令系统,从而形成各种型号计算机的独自特点和差异。
为解决某一具体问题,将指令和数据编写成一个相互联系的序列(在高级语言中是由语句和数据组成的)叫做程序。如果所用指令编写的程序是计算机能直接理解和执行的二进制代码形式,称作机器语言,相应的程序就叫做机器语言程序。机器语言对使用者来说十分繁琐且容易出错,为克服这些缺点,就用一组便于记忆、缩写、简写英文字母构成的符号(助记符)来代替机器语言指令,这就是汇编语言。汇编语言便于人们记忆和交流,但计算机仍不能直接识别,为此在交付计算机执行前,必须将它翻译成机器语言的目标程序,这个过程称为汇编。关于用汇编语言编制程序的具体内容,将在第4章详细介绍。
2.指令类别
尽管不同类型计算机有不同的指令系统,但一般都包括数据流处理和程序流控制,如下列指令:
(1)算术及逻辑类指令。如算术加、减法,逻辑与、或、异或等指令。
(2)数据传送与交换类指令。如取数、存数、寄存器/存储器与寄存器交换、寄存器与累加器交换等指令。这类指令使用频度最高。
(3)程序控制类指令。主要是影响指令的执行顺序。程序一般是按指令在内存储器中存放的顺序依次逐条执行的,但根据需要(条件),它可以转向别处执行。转移指令包括无条件转移和条件转移。所谓“条件”是指CPU的状态。CPU状态由标志寄存器(FR)反映,该寄存器中的每一位表征一种状态值,如前次运算结果是否为负数、是否溢出,参加比较的两个数是否相等。条件转换指令就根据这些状态条件之一决定是否转向“新的指令”地址。
(4)输入/输出指令。是特殊传送类指令,实现计算机与外部设备的数据交换。
(5)CPU控制类指令。如停机、空操作、复位和处理器状态设置等指令。
3.指令的执行
微型计算机执行一条指令所需的时间称为指令周期。指令周期分成两个阶段:取指令阶段和执行指令阶段。其主要任务是:
(1)取指令阶段。根据PC中的值从存储器读出指令并送到CPU的指令寄存器IR,PC则自动修改,指向下一条指令地址。
(2)执行指令阶段。将IR中的指令操作码译码,并根据译码产生相应的控制电位和定时节拍信号以执行指令所规定的操作。
程序中指令的执行过程就是上面两个阶段的交替过程,直至遇到停机指令时才使整个机器停止运行,如图1-10所示。
由于程序和数据存放于内存储器里,所以在执行指令时,CPU必须频繁地访问存储器。在图1-11所示的指令执行示意图中,给出了CPU访问内存储器的相关寄存器的情况。地址寄存器MAR存放着将访问的地址信息,数据寄存器MDR存放从内存储器读出的或拟向内存储器写入的数据,指令寄存器IR保存待处理指令的操作码。
图1-10 程序中指令执行过程
下面以执行一条“MOV A,00H”指令为例,说明该指令在该假想模型机上的执行过程。该指令机器码为(3EH,00H),即2字节,并存放在内存储器的第100H、101H单元中,其第一字节为操作码3E,表示该指令是立即数传送指令,后面一字节是立即数。其指令功能是将立即数00H送往累加器ACC。根据图1-11所示,该指令的第一字节存于内存储器的第100H号单元,因此在执行本指令前PC值应为100H。
图1-11 指令执行示意图
为了讨论方便,这里使用下列符号:① (x)、[x]表示x单元存储的内容,x可以是寄存器名称,如ACC、PC等,也可以是存储单元地址,如[300]表示存储器第300号单元内的数据(内容)。② →表示数据传送流向。
取指令阶段:
(1)(PC)→ MAR; (2)PC+1→ PC; (3)CPU发“读”信号;
(4)[100H]→MDR; (5)(MDR)→IR; (6)经译码由控制逻辑发相应控制信号。
执行指令阶段:
(1)(PC) →MAR; (2)PC+1→PC; (3)CPU发“读”信号;
(4)[101H]→MDR; (5)(MDR)→ACC。