第2章 微型计算机基础
2.1 微型计算机基本结构
微型计算机是计算机的一种。它体积小,重量轻,一般供个人使用。所以通常称个人计算机(Personal Computer PC)。微型计算机由硬件系统和软件系统两大部分组成,称之为微型计算机系统,其组成如P.27图2-1所示(作解释)。
2.2.1 微型计算机的概念结构
各种微型计算机从概念结构上来说都由运算器、控制器、存储器和输入输出设备等部分组成。这些组成部分往往合并和分解为若干个功能模块,分别由不同的部件予以实现。 从大的功能部件来看,微型计算机的硬件主要由CPU、存储器、I/O接口和I/O设备组成,各部分之间通过数据总线(data bus DB)、地址总线(address bus AB)、控制总线(control bus CB)连接在一起。
DB、AB、CB这三总线通常为系统总线,它是计算机各部件间传送信息的公共通道。这种总线结构形式的优点是设计简单、灵活性强、易于扩展、便于故障诊断和维修。故所有微型计算机系统都采用了总线结构形式。P.28图2-2为微型计算机的结构框图。
1.硬件系统
1)微处理器(或称中央处理单元,CPU)
CPU是微型计算机的核心部件,是整个系统的运算和控制中心。微机性能、档次不同主要取决于CPU。各种CPU均有其特定的指令系统。然而无论哪种CPU,其内部组成总是大同小异的,一般都有运算器、控制器和寄存器三个主要部分。其典型结构如P.29图2-3所示,下面分别对各部分加以说明:
Δ运算器(又称算术逻辑单元Arithmetic and Logic Unit ALU):它是以加法器为基础,辅之以移位寄存器及相应的控制逻辑组合而成的电路,在控制信号作用下,完成各种算术运算和逻辑运算。 Δ控制器:一般由指令寄存器(Instruction Register IR)和指令译码器(Instruction Decoder ID)和控制电路组成,是CPU的指挥控制中心。它从存储器中依次取出程序的各条指令,并根据指令要求向微机各部分发出相应控制信号,使各部分协调工作。
Δ寄存器组:它是CPU内部的若干个存储单元。分为专用寄存器和通用寄存器两种。由于有这些寄存器,CPU在运算时出现中间结果,可暂放在寄存器中,以避免对存储器的频繁访问,而缩短指令执行时间,给编程带来方便。
2)存储器(Memory)
这里所指的存储器是指系统的内存或称主存,是微机的存储和记忆部件,其用途是存放数据和程序。微机的内存一般都由半导体存储器构成。 (1)内存单元的地址和内容
内存由许多单元组成,每个单元存放一组二进制数(例8位二进制数),称为一个字节。一台微机中内存单元的总量称为该机的内存容量,单位为字节。为区别个不同的内存单元,往往要对内存单元进行编址。如8086CPU的内存编址从00000H开始,一直到FFFFFH为止,
11
共2个存储单元。每个存储单元有唯一的地址。CPU如要访问其内存单元,可通过指定该内存地址予以实现。
内存单元中存放的信息称为内存单元的内容,它与内存地址在形式上都是一个二进制数,但在本质是两个完全不同的概念。详见P.29图2-4说明。
(2)内存的操作 CPU对内存单元的操作有读、写两种。P.30图2-5的(a)、(b)两图分别描述了CPU存储器的读、写操作过程(作解释)。 需要指出的是读操作不会改变被读存储器的内容。这一特点称为非破坏性读出(no destructive read out)。反之,写操作将破坏该存储器的内容。
上述类型存储器即可读出也可写入信息,因此这种存储器称为读写存储器,也称为随机存取存储器。
(3)内存的分类
按工作方式不同,内存可分为两大类,即随机存取存储器(random access memory RAM)和只读存储器(read only memory ROM)。 ROM中的信息只能被CPU读取,而不能由CPU任意写入。但ROM中的信息不象RAM那样在机子断电后会丢失,所以ROM往往被用来存放程序,或各种常数及表格等。ROM内容的写入要使用专用设备。
有关存储器的详细内容将在第五章中具体介绍。 3)输入输出设备和输入输出接口。
输入输出设备(简称I/O设备或外设)是微型计算机重要的组成部分。常用的输入设备有键盘、鼠标、扫描仪等。常用的输出设备有显示器、打印机、绘图仪等。而磁带、磁盘等则既是输入设备,又是输出设备。
由于I/O设备种类繁多,结构原理各不相同。与CPU相比,外设的速度较低,且数据格式和逻辑电平一般也与计算机不能直接兼容。因此,一般来说,微机与I/O设备之间的连接与信息交换不能直接进行,而必须通过一个中间部件作桥梁,该部件称作输入输出接口(简称I/O接口),有时又称为I/O适配器(I/O adapter)。
4)总线(bus)
总线是由一组导线和相关电路组成的,是各种公共信号线的集合,用作微机各部分间转送信息所共同使用的“高速信息公路”。在CPU、存储器和I/O接口之间传输信息的总线称为“系统总线”,它包括数据总线、地址总线和控制总线。
(1)数据总线(data bus DB)
数据总线用来传送数据信息,是双向总线。CPU可通过DB从内存或I/O设备输入数据,也可通过DB向内存或I/O设备输出数据。 (2)地址总线(address bus AB)
地址总线用于传送CPU发出的地址信息,是单向总线。传送地址信息的目的为指明与CPU交换信息的内存或I/O设备的地址。
(3)控制总线(control bus CB)
控制总线用来传送控制信号、时序信息和状态信息等。其中有的是CPU向内存或外设发出信息,也有的是内存或外设向CPU发出的消息。因此,CB中每根线的方向是单向的,但CB作为一个整体来讲是双向的。
2.软件系统
软件包括系统软件和应用软件两大类。
应用软件是用户解决各类实际问题而编制的程序(举例)。
20
12
系统软件包括操作系统(OS)和系统实用程序。
操作系统用于管理计算机的硬件与软件资源,进行任务调度,提供文件管理系统等,还包括各种外设的驱动程序。
系统实用程序包括各种高级语言的翻译/编译程序、汇编程序、数据库系统、文本编辑程序、调试程序,以及许多系统工具程序等。
计算机中程序设计语言分为机器语言、汇编语言和高级语言三种。机器语言程序是计算机能识别和直接执行的二进制代码形式的程序。汇编语言程序是用助记符语言表示的程序,计算机要通过“汇编程序”的翻译才能识别。而高级语言是不依赖于具体机型的程序设计语言(举例),由高级语言编写的程序需经过编译程序和解释程序的翻译才能执行。
文本编辑程序是供输入或修改文本用的程序。
另外在编写程序时,往往还需要几种系统程序,如系统程序库、连接程序和装入程序等。
一般操作系统都有一个通用的系统程序库,程序库中的子程序可供调用(以后要讲到)。把待执行的程序与程序库其他已翻译好的程序连接起来成为一个整体的准备程序称为连接程序。另一种准备程序是把执行的程序加载到内存中,称为装入程序。
上面简单地介绍了计算机的硬件和软件,需要强调的是硬件系统和软件系统是相辅相成的,共同构成微型计算机系统,两者是缺一不可的。现代计算机软硬件发展的趋势是两者统一融合,相互促进,使计算机技术不断发展。
2.1.2 微型计算机的工作过程
微型计算机究竟是如何进行工作的,这是学习微机原理必须探讨的一个重要问题。 1.存储程序计算机
目前,一般的微型计算机都为存储程序计算机。所谓“存储程序”,是指把处理问题的步骤和所需的数据事先送入存储器保存。运行时,由计算机的控制部件逐条取出并执行,从而使计算机能自动连续地进行处理。“存储程序”的设计思想是计算机发展史上的一个里程碑。
(1)程序与指令
所谓指令是控制计算机进行各种操作和运算的命令。
所谓程序是计算机为解决某一具体问题所编制的一系列指令的有序集合(见P.33图2-6)。 机器指令必须满足两个条件:一是指令的形式必须是计算机能够理解的(由此,指令也必须用二进制编码形式表示)。二是指令规定的操作必须是计算机能执行的(每条指令都有相应的电子线路来实现)。每台计算机的指令都有自己的格式和具体含义,但他们都有一个共同点,即指令必须指明要进行何种操作(操作码)以及操作的对象(操作数)。 每台计算机都有其特定的指令系统,指令系统的优势决定了计算机的性能。一台计算机的指令种类是有限的,但在人的精心设计下,可实现信息处理的任务可以无限多,计算机能忠实地按照程序,有条不紊地执行规定的操作,完成预定的任务。
(2)存储程序工作原理
多年来,尽管计算机的体系结构发生了重大变化,性能不断提高,但存储程序控制始终是现代计算机的结构基础。
“存储程序”是指把程序和数据送到具有记忆功能的存储器中保存起来,计算机工作时,只要给出程序中第一条指令的地址,控制器便根据存储器中的指令周而复始地取出指令、分析指令、执行指令,直至指令全部执行完毕为止。
13
2.微型计算机的工作过程
微型计算机的工作过程实际上就是逐条执行指令序列的过程。也就是不断地取指令和执行指令的过程,见P.34图2-7(展开解释)
指令通常包括操作码(operation code)和操作数(operand)两部分。操作码表明计算机进行何种操作,而操作数指明操作对象。它可能给出操作的数的本身或其所在的地址,指令根据操作或其操作对象不同而有单字节、双字节或三字节乃至四字节之分,因此,在执行一条指令时,可能要处理1-4个不等字节数的信息代码。
3.模拟机中存储程序工作的例子
以计算机完成5+8 =?这一个简单的任务为例,说明程序编制及微机内部执行该程序各条指令的具体操作过程(详细介绍P.36~P.39四个操作示意图及执行三条指令的过程)。
2.2 8088/8086微处理器
本节详细介绍8086微处理器系列中的主导产品8086和8088 CPU的硬件结构。由于这两种CPU的差异很小,本节将以8086为主进行介绍(在没有特别指明时所介绍内容对两者均适用)。
2.2.1 8088/8086微处理器概述
8086和8088均属第三代微处理器。8088存储器和外设进行数据传输的外部数据总线宽度为8位,而8086数据总线的宽度为16位,除此而外,两者几乎无差别。
8086/8088都有40个脚的外部引线,均在单一5V电源下工作。
8086/8088在最小配置下仅需4个外围芯片即可构成一个小型的应用系统,如P.40图2-13所示(作解释)。
8086/8088具有最小和最大两种工作模式,将在以后分别介绍。
2.2.2 8088/8086的指令流水线
在程序执行过程中,CPU有规律地重复以下过程:
Δ从存储器取出下一条指令;
Δ如指令需要,从存储器读取数据(操作数); Δ执行指令;
Δ如指令需要,将结果写入存储器。
在8088/8086未问世前,微处理器用串行方式完成上述过程。从8088/8086开始,CPU采用一种新的结构来完成这些工作。8088/8086将上述步骤分配给两个独立的部件,执行单元(execution unit EU)负责执行指令;而总线接口单元(bus interface unit BIU)负责取指令、取操作数和写结果。当这两个单元独立进行工作时,大多数情况下取指操作和执行指令操作可同时并行进行,从而加快了程序的运行速度。P.41图2-14将并行操作和以前的串行操作方式进行了比较。显示出流水线操作的优越性。
由P.41图2-14可知,指令队列操作过程为:EU不断地从指令队列中取出指令并执行。当EU从指令队列中取走指令,指令队列出现空字节时,BIU即自动执行一次取指令周期,从内存中取出后续指令代码放入队列中(到遇到跳转指令时,BIU使指令队列复位,从新的内存地址取指),指令队列的存在使得EU和BIU并行工作,而减少了为取指而等待的时间,提高了CPU的执行效率和运行速度,同时,也减低了对存储器存取速度的要求。
14
需要指出的是8088/8086中指令队列的个数和级数都很少,远远不能与现在各种新型的CPU(如pentium)相提并论,但它首先在微处理器中采用中流水线结构,从而使8088/8086成为CPU发展史上一个里程碑。
2.2.3 8088/8086的功能结构(原2.2.3 8088外部引脚及其功能放在本节后讲)
1.8088/8086的结构
8088与8086的结构极为相似,都是由执行单元EU和总线接口单元BIU两大部分组成,其内部结构框图如图P.46图2-16所示。
执行单元EU负责执行指令,它由算术逻辑单元(运算器)ALU、通用寄存器、标志寄存器FLAGS和EU控制电路组成。工作时,EU不断地从指令队列取出指令代码,后对其译码,产生完成指令所需要的各种控制信息。数据运算在ALU中进行,运算结果的特征保留在标志寄存器FLAGS中。
总线接口单元BIU负责CPU与存储器及I/O接口之间的信息传送。它由段寄存器、指令指针寄存器、指令队列、地址加法器及总线控制逻辑组成。8088的队列长度为4字节,8086的队列长度为6个字节。
当EU从指令队列中取走指令,指令队列出现空字节时,BIU就自动执行一次取指周期,从内存中取出后续指令放入队列中。当EU需要数据时,BIU据EU给出的地址,从指定的内存单元或外设中取数据供EU使用。当运算结束时,BIU将运算结果送入指定的内存单元或外设。当指令队列空时,EU就等待,直到有指令为止。若BIU正在取指时,EU发出访问总线的请求,则必须等BIU取指完毕后,该请求才能响应。当遇到跳转指令时,BIU使指令队列复位,从新的地址取指,并由EU取执行。
指令队列的存在,使EU和BIU并行工作,从而提高CPU的工作效率,加快了整机的运行速度。
BIU中的地址加法器用来产生20位的物理地址,由于8086/8088的寄存器都是16位的(见下说明)无法装载20位的物理地址。为解决此矛盾,8086/8088采用了将地址空间分段的方法,即将220(1MB)的地址空间分成若干个64KB的段,然后用段基址加上段内偏移地址的方法来访问地址为20位的物理存储器。具体方法如P.47图2-17所示。8086/8088规定段的起始地址最低四位总是0,即XXXXOH,这样每个段的基地址只需用16位便可表示(即XXXXOH中的XXXXH),也即段基址实际上是段起始地址的高16位,由于段基址的这一特点,因此将段基址左移4位后和段内偏移量(16位)相加,即可获得物理地址。
2.8088/8086的内部寄存器
8088/8086内部有14个16位寄存器。按其功能分为三大类:第一类是通用寄存器(8个),第二类是段寄存器(4个),第三类是控制寄存器(2个),具体见P.47图2-18。
(1)通用寄存器
通用寄存器包括数据寄存器、地址寄存器和变址寄存器。 ①数据寄存器AX、BX、CX、DX
数据寄存器一般用于存放参与运算的数据或运算的结果。每个数据寄存器都是16位寄存器,但又可将高、低8位分别作为两个独立的8位寄存器使用。其高8位记作AH、BH、CH、DH,低8位记作AL、BL、CL、DL,这种灵活的使用方法给编程带来方便,使之既可处理16位数据,也能处理8位数据。
数据寄存器除作为通用寄存器使用外,还有其各自的习惯用法:
AX(accumulator)为累加器。是最常用的寄存器,用于存放算术逻辑运算中的操作数。另外,所有的I/O指令都通过累加器与外设接口之间传送信息。
15