计算机组成与汇编语言第四章笔记整理.docx
《计算机组成与汇编语言第四章笔记整理.docx》由会员分享,可在线阅读,更多相关《计算机组成与汇编语言第四章笔记整理.docx(52页珍藏版)》请在冰豆网上搜索。
计算机组成与汇编语言第四章笔记整理
计算机组成与汇编语言笔记整理
第4章:
CPU及其控制器
●本章要点
CPU的功能、组成和寄存器组
一条运算指令的完整执行过程
8086微处理器的功能结构,8086的寄存器组,8086的存储器组织
组合逻辑控制器的结构和基本原理
微程序控制的基本原理
4.1CPU概述
4.1.1CPU的功能
程序是指令的有序集合。
程序被装入主存。
运行程序时,CPU自动地、逐条从内存取出指令并解释指令,形成一组控制信号,去指挥操作部件实现相应的操作,完成对数据的加工和处理。
同时,CPU自动修改指令地址,给出后继指令地址在内存中的位置,以便连续取指令并分析执行,直到该程序执行结束。
在运行过程中CPU还能自动处理某些紧急的异常事件。
CPU在计算机系统中起着核心的作用,它的功能具体可归结为5个方面。
(1)指令控制:
严格控制程序的执行顺序,保证机器按照规定执行是CPU的首要任务。
(2)操作控制:
一条指令的执行,要涉及计算机中的若干个部件。
CPU能够对指令进行译码产生一组控制和操作信号,传送给被控部件,并能检测各个部件发送的信号,从而协调各个工作部件实现指令所规定的操作。
举例:
实现指令MOVB,A
(3)时序控制:
对由指令译码所得的各种操作信号的产生时间、稳定时间、撤销时间及相互之间的关系都应有严格的要求。
对操作信号施加时间上的控制,称为时序控制。
只有严格的时序控制,才能保证各功能部件组合构成有机的计算机系统。
(4)数据加工处理:
即在前三种控制的条件下,对数据进行算术运算和逻辑运算,以及其他非数值数据的处理,并将处理结果送到指令规定的地方存储。
数据加工处理,是完成程序功能的基础,是CPU的根本任务。
(5)异常事件处理:
在程序的正常运行过程中,可能出现机器本身的异常情况,如掉电、复位、以零做除数等,也可能有外部设备要求紧急处理比如键盘中断等情况,这时CPU必须具有以某种方式比如中断处理的方式来停下当前执行的程序,转而处理突发的重要的事件的能力。
4.1.2CPU的组成
传统CPU主要由控制器和运算器两大部件组成,为了配合这两部分工作,一般CPU内部还包含有一些寄存器。
控制器由程序计数器PC、地址寄存器AR、指令寄存器IR、指令译码器ID、时序产生器和操作控制器等部分组成。
运算器由算术逻辑部件ALU、累加器AC、数据缓冲寄存器、寄存器组和程序状态寄存器PSW组成,它是数据加工处理部件。
运算器接受控制器的命令完成具体的数据加工任务。
4.1.3CPU的寄存器
寄存器用来保存运算和控制过程中的中间结果、最后结果、控制信息和状态信息。
各种CPU的寄存器可能有所差异,一般CPU都具有数据缓冲寄存器、指令寄存器、程序计数器、地址寄存器、累加寄存器和状态寄存器等6种寄存器。
1.数据和指令缓冲寄存器DR
数据和指令缓冲寄存器DR用来存放CPU从主存读来的一个指令字或一个数据字,简称缓冲寄存器。
当CPU要将数据传送给主存时,也先将数据保存到缓冲寄存器中,再通过DR将数据经数据总线送到内存储器中。
可见,缓冲寄存器作为CPU与主存、外围设备之间的信息中转,对数据起缓冲作用,平衡CPU与主存、外围设备之间的操作时间差异;同时,数据缓冲寄存器为算术逻辑部件ALU提供另一个操作数。
2.程序计数器PC
程序计数器PC存放要取的指令地址,它具有自动计数的功能。
当CPU按照程序计数器的内容取来指令到指令缓冲寄存器中后,程序计数器PC自动修改计数,指出下一条要执行的指令在主存中的存放地址。
有两种修改计数值的情况:
(1)当CPU顺序执行指令时,程序计数器根据当前已取指令的长度(字节数),自动计数。
(2)当CPU执行分支转移指令时,如果是相对寻址,程序计数器的值修改为当前地址加上一个偏移量(有符号数),得到转移目的指令在主存中的地址;如果是直接寻址,则将转移指令中的绝对转移地址送给程序计数器。
这样,CPU便按照PC寄存器的内容去取得转移目标的第一条指令。
3.指令寄存器IR
CPU取得的指令经缓冲寄存器转送给指令寄存器IR,由指令寄存器保存当前CPU要执行的一条指令,为指令译码与分析作准备。
一条指令由地址码和操作码两部分组成。
指令寄存器中操作码部分送指令译码器ID译码,地址码部分送程序计数器(对程序转移指令)或地址寄存器(以便取操作数)。
4.地址寄存器AR
地址寄存器AR用来存放当前CPU所要访问的主存单元或I/O端口的地址。
当CPU要对主存或外围设备的信息进行存取时,必须进行地址定位。
地址定位是CPU将地址寄存器AR中的地址信息传送到地址总线上,再由主存中的地址译码电路实现对要访问的主存单元定位。
在地址定位的过程中,地址信号必须稳定。
因此,地址信息要由一个寄存器来保存,这个寄存器就是地址寄存器。
在CPU访问外设的过程中,地址寄存器AR同样实现对I/O端口的定位。
5.累加寄存器AC
简称累加器。
累加器的入口是从缓冲寄存器取得要运算的源数据,或者存放来自算术逻辑单元的运算结果数据。
它的数据出口是算术逻辑单元,即为算术逻辑单元提供一个操作数。
之所以命名累加器,是因为算术逻辑单元最基本的操作是加法。
一个运算器至少有一个累加器。
有的甚至更多,如采用2个、4个、8个等多累加器结构。
在多累加器结构的运算器中,累加器也可作通用寄存器,这些寄存器都可以为算术逻辑单元提供操作数,或存放操作结果。
6.状态寄存器PSW
状态寄存器用来反映执行算术逻辑运算指令及各类测试指令时的运算结果状态,这些结果状态主要包括运算结果进位标志、运算结果为零标志、运算结果溢出标志、运算结果符号标志、运算结果奇偶标志等。
状态寄存器与运算器直接相连,自动产生并保存各类状态标志,这些标志为后续指令的执行提供判断条件。
状态寄存器还保存一些控制标志,如中断允许标志、单步标志、方向标志等。
控制标志是通过专用指令设置的。
一条运算指令的完整执行过程
(1)取指令
程序计数器PC存放要取的指令地址,经地址寄存器AR在地址总线上发出地址信号,存储器中的指令由数据总线进入CPU的缓冲寄存器,存放到指令寄存器IR中。
同时,程序计数器PC自动修改计数,指出下一条要执行的指令在主存中的存放地址。
(2)分析指令
CPU对指令译码器IR中的指令操作码进行识别和解释,通过操作控制器产生相应的微操作信号,并由时序产生器产生相应的时序信号,控制微操作信号的作用时序。
同时指令中的操作数地址码被分离出,若是存储器操作数,则将操作数地址送地址寄存器AR,在地址总线上发出地址信号,存储器中的数据由数据总线进入CPU的缓冲寄存器,并送到ALU输入端的数据暂存器。
若是寄存器操作数,则直接送到ALU输入端。
(3)执行指令
由微操作信号按照相应的时序,启动算术逻辑运算部件ALU,完成指令规定的动作,并建立相应的状态标志存放到状态寄存器中。
如果结果是存储器操作数,还要将数据通过数据缓冲寄存器写回存储器。
CPU就是这样不断地取指令、分析指令、执行指令,如此周而复始,除非遇到停机指令,否则直到执行完一个程序的指令序列的最后一条指令。
早期的CPU就是这样以顺序解释方式来完成程序的执行的。
现代CPU往往基于流水解释方式,CPU执行程序速度快。
4.2指令周期
4.2.1指令周期的基本概念
1.微处理器的基本时序
时钟信号CLK的周期长度称为时钟周期T,一般是机器主频的倒数。
机器周期,又称为CPU周期,是微处理器完成各种类型操作所花费的时间,它由若干时钟周期T组成。
因此,时钟周期是处理操作的最基本的时间单位,它又被称为节拍脉冲或T周期。
通常用从主存中取出一条指令的最短时间来规定机器周期。
这就是说,取指所需的时间为一个机器周期。
执行一条速度最快的指令的时间,也至少需要一个机器周期。
对于一些操作相对复杂的指令,则需要更多的机器周期。
1.微处理器的基本时序
(1)T1周期。
地址线有效,AD0~AD15、A16~A19输出20位地址信号,并维持一个T周期。
此时ALE有效,输出一个正脉冲,在其下降沿将地址信号锁存入地址锁存器。
(2)T2周期。
地址信号消失,CPU发出RD有效信号,并一直保持到T3周期结束。
(3)T3周期。
存储器在收到地址信号,并在RD信号作用下,内部对地址译码选中要访问的存储单元,并将访存的16位数据信号送到地址/数据复用总线AD0~AD15上。
CPU在RD信号的上升沿将16位数据读入CPU内的数据缓存器。
(4)T4周期。
完成读存储器数据的任务,所有信号恢复为无效状态。
插入等待周期TW,平衡CPU和主存速度。
通过总线对存储器或I/O接口进行一次访问所需的时间也是一个机器周期,叫做总线周期。
CPU每执行一条指令至少要访问一次存储器(取指令),即至少要进行一次读存储器操作,占用一个读总线周期。
总线操作主要有:
存储器读和I/O读操作、存储器写和I/O写操作、中断响应操作、总线请求等。
2.指令周期的基本概念
指令周期就是CPU从取指令到执行完一条指令的时间,它包括取指周期和执行周期两部分。
对于相同的CPU结构,各条指令的取指过程相同,都有访存周期。
一般地,指令周期包括若干个机器周期,而一个机器周期又由若干个时钟周期构成。
但是由于各种指令操作功能不同,指令的操作数不同,使得指令周期长短不一,有的甚至没有执行周期。
如无条件转移指令“JMPLabel”
指令执行如果涉及到访存操作,将使得指令的执行时间要比不需访存的指令长,如果操作数是寄存器操作数,几乎不要一个T就可以取得操作数进入运算;而对存储器操作数的读写访问要花费至少4个T的访存周期,时间要长得多。
CISC(复杂指令计算机)指令指令周期较长
4.2.2几个典型的机器周期
1.取指令周期
取指令周期的操作过程是:
①PCAR,PC+nPC;
②ReadM,指令IR。
其中,PC+nPC表示程序计数器PC自动修改计数,指出下一条要执行的指令在主存中的存放地址。
PC总是指向下一条要执行的指令的地址。
2.间址周期
所谓间址,是指指令中只给出存储器操作数的地址的地址。
也就是说,指令不直接给出操作数的地址,而是给出存放操作数地址的地方。
例如存放在某个寄存器中,因此要取得这个操作数,必须先访问存放操作数地址的地方,即访问相关的寄存器,从而取得操作数的主存地址,这样才能访问主存取得真正的操作数。
寄存器间址周期的操作过程是:
①R(IR(OPDAD))AR;
②ReadM,MDR。
其中,R(IR(OPDAD))表示指令寄存器IR的操作数地址OPDAD所指示的寄存器。
3.执指周期
①IR(OP)CUALU
②ALUR/M
其中,指令的操作码部分OP经译码后,启动算术逻辑运算部件ALU,完成运算后的结果送入到寄存器或者存储器。
例如,指令ADDAL,10H;它的功能是:
将寄存器AL的内容与立即数10H相加,结果存入寄存器AL。
即:
(AL)+10HAL。
该加法指令的指令周期由取指令周期和执指周期两个机器周期组成。
在取指令周期,CPU将指令ADDAL,10H(其指令机器码为0000010000010000,两个字节)取出IR,进行译码。
在执指周期,指令的操作码部分00000100经译码后,启动算术逻辑运算部件ALU进行加法运算,此时两个加数,寄存器AL和立即数10H(由指令的操作数部分00010000分离出)已进入运算器的两个输入端,完成运算后的结果送入到寄存器AL中,同时对标志寄存器设置相应的标志位
总之,指令周期由若干个机器周期组成,所有指令周期的第一个机器周期为取指周期,每个机器周期又由若干个T周期组成。
根据指令操作的复杂程度不同,各个机器周期所需的T周期数也不相同。
每种指令所需的机器周期也不相同。
4.2.3指令执行的微操作流程
每条指令的执行实际上是在时钟周期的节奏控制下,执行一组微操作序列。
一条指令的完整执行过程可分为取指令、分析指令和执行指令三个阶段。
下面结合图4.2举例说明一条指令执行的微操作流程。
设R1R2为寄存器组中的寄存器,M为寻址的存储器单元。
例4.1加法指令ADDR1,R2,功能为:
R1←R1+R2,该指令长度为1字节。
解:
加法指令ADDR1,R2的操作流程如下:
取指令:
①PCAR,PC+1PC;
②ReadM,指令IR。
分析指令:
①IR(OP)CU,IR(OPDAD),即R1,R2ALU
执行指令:
R1+R2R1
例4.2加法指令ADDR1,(R2),功能为:
R1←R1+(R2),(R2)表示用R2间址,即R2的内容是存储器地址,该指令长度为1字节。
解:
加法指令ADDR1,(R2)的操作流程如下:
取指令:
①PCAR,PC+1PC;
②ReadM,指令IR。
分析指令:
①IR(OP)CU,IR(OPDAD),即R1ALU,R2AR;
②ReadM,MDRALU。
执行指令:
R1+(R2)R1
例4.3加法指令ADD(R1),100H,功能为:
(R1)←(R1)+10H,(R1)表示用R1间址,即R1的内容是存储器地址,该指令长度为2字节。
解:
加法指令ADDR1,(R2)的操作流程如下:
取指令:
①PCAR,PC+2PC;
②ReadM,指令IR。
分析指令:
①IR(OP)CU,IR(OPDAD),即10HALU,R1AR;
②ReadM,MDRALU。
执行指令:
①(R1)+10HDR
②WriteM,DRM。
4.38086微处理器
4.3.18086微型计算机系统的硬件结构
由于总线是共享的传输通道,任意时刻只能有一个器件负责发送数据,所以需要总线控制逻辑来控制总线上传输信号的时序。
当发生多个设备需要使用总线时,总线逻辑应具有总线仲裁功能。
4.3.28086微处理器的功能结构
1.总线接口单元BIU
BIU担承着CPU通过总线与存储器和外设接口的联系。
它由四个段寄存器CS、DS、SS和ES,指令指针寄存器IP、指令队列、地址加法器以及总线控制逻辑组成,主要负责CPU与存储器及外设之间的信息传送。
具体过程是,BIU发出地址信号,从内存的指定部分取出指令,送至指令队列中排队;在执行指令时所需要的操作数,也由BIU从内存的指定区域取出,送至EU部分去执行。
8086BIU维护着长度为6个字节的指令队列(8088的指令队列是4个字节),该队列按照先进先出的方式工作。
当指令队列中出现两个字节空缺时,BIU会自动通过总线取指令送入指令队列,当EU单元对一条转移指令进行译码执行跳转时,BIU会自动清空指令队列,通过重新读取指令来形成新的指令队列。
在大多数情况下,指令队列中至少应有一个字节的指令,这样EU就不必等待BIU去取指令。
2.执行单元EU
EU负责执行指令,它由算术逻辑单元ALU、通用寄存器组、16位标志寄存器(Flag)、EU控制电路等组成。
EU在工作时直接从指令队列中取指令代码,对其译码后产生完成指令所需要的控制信息。
ALU进行数据的运算,运算结果的状态保留在标志寄存器Flag中。
算术逻辑单元ALU实际上是计算机的运算器,负责CPU所有计算任务,主要是算术运算和逻辑运算。
ALU有两个操作数入口。
通常由累加器提供一个操作数,暂存器提供另外一个操作数,运算结果返回到累加器,而反映运算结果状态的信息被记录在标志寄存器中。
4.3.38086的寄存器组
8086共有14个寄存器供系统使用,它们分为
通用寄存器(包括AX、BX、CX、DX等4个16位数据寄存器)、
指针变址寄存器(包括SP、BP、SI和DI等4个16位寄存器)、
控制寄存器(包括IP和Flag等两个16位寄存器)、
段寄存器(包括CS、DS、SS、ES等4个16位段寄存器)等四类。
1.通用寄存器
AX、BX、CX及DX等4个通用寄存器,用来暂存操作数。
其中,每个寄存器可以作为一个16位的寄存器使用,也可以作为两个8位寄存器单独使用。
如AX寄存器的低8位寄存器的名称是AL,高8位寄存器的名称是AH。
类推,BX寄存器可分为BL和BH寄存器,CX寄存器可分为CL和CH寄存器,DX寄存器可分为DL和DH寄存器。
作为通用寄存器,这些寄存器以字节或字为单位参加算术运算或逻辑运算,而且这些寄存器又有各自的习惯用法。
AX(Accumulator)称为累加器,所有的I/O指令都使用该寄存器与外设接口传送信息。
BX(Base)称为基址寄存器,在计算机寻址时,常用来存放基地址。
CX(Count)称为计数寄存器,在循环和串操作指令中用作计数器。
DX(Data)称为数据寄存器,在寄存器间接寻址的I/O指令中,存放I/O端口的地址。
在做双字长乘除法运算时,DX与AX合起来存放一个双字长数(32位),其中DX存放高16位,AX存放低16位。
2.指针与变址寄存器
指针与变址寄存器为SP、BP、SI、DI。
虽然这组寄存器也可以用来存放数据,实际上常用来存放不同用途的地址信息,经常使用它们提供段内寻址的偏移地址。
SP(StackPointer)堆栈指针寄存器。
用它指出当前堆栈的栈顶位置,必须与堆栈段寄存器SS联合使用才能确定堆栈的物理地址,进行堆栈操作。
BP(BasePointer)为基址指针寄存器。
与SS联用,确定堆栈段中某一存储单元的物理地址,用于堆栈区中的数据进行操作,即作为堆栈中的一个基地址,访问堆栈的任意位置的存储单元,然而它不具有SP始终指向堆栈顶的功能。
SI(SourceIndex)为源变址寄存器,与数据段寄存器DS联用,用于确定数据段中某一存储单元的地址。
DI(DestinationIndex)为目的变址寄存器,与数据段寄存器DS或辅助段寄存器ES联用,用于确定数据段中某一存储单元的地址。
对SI和DI这两个变址寄存器进行增量或减量计数,作为变址寻址很方便。
3.段寄存器
BIU中有4个16位段寄存器,即
CS(CodeSegment,代码段寄存器)、
DS(DataSegment,数据段寄存器)、
SS(StackSegment,堆栈段寄存器)
ES(ExtraSegment,附加数据段寄存器)。
CS存放当前代码段,即程序所在段的首地址。
CS内容左移四位(即乘16),再加上指令指针寄存器中的内容,即是下一条要取出的指令地址。
DS保存当前程序所用数据段的首地址,数据段用来保存当前程序的操作数据和变量数据。
DS内容左移四位,再加上操作数据或变量在数据段中的有效地址(即偏移地址)EA,即为数据段指定操作单元的地址。
串操作处理时DS作为源串所在段的段基址。
SS存放当前程序所用堆栈段的首地址。
所谓“堆栈”是指这样一段指定的内存区域:
其存取原则是“后进先出”,即先进栈的数据后出栈。
堆栈是一种非常有用的数据结构,它为保护数据、调度数据提供了重要的手段。
SS左移四位,再加上SP形成堆栈栈顶的物理地址。
ES存放辅助数据所在段的首地址。
附加段在进行串操作时,作为目的段地址使用。
附加段是一种附加的数据区。
在串操作时,若要将串从源数据区传送到目的数据区,则DS保存源数据段首地址,SI保存源数据段偏移地址;而目的数据区在附加段中,即ES保存附加段首地址,DI保存附加段偏移地址。
4.指令指针寄存器
指令指针寄存器IP(InstructionPointer),它是取指令专用的16位地址寄存器,有时也被称为“程序计数器”PC(ProgramCounter),它存放下一条要执行指令的有效地址EA(即指令在代码段的偏移地址)。
IP内容由BIU自动修改,通常是进行加计数修改。
当执行转移指令和子程序调用指令时,BIU将转移的目的地址装入IP中。
5.标志寄存器
标志寄存器(FlagRegister)是一个16位的寄存器,用来存放程序状态字PSW(ProgramStatusWord),所以该寄存器又称状态字寄存器。
PSW中一共定义了9个有效位,用来存放状态标志和控制标志。
其中状态标志有6个,它们分别是:
CF、PF、AF、ZF、SF和OF,用来反映运算结果的状态特征,它将影响后面的操作或者作为条件转移的依据。
状态标志一般是算术或逻辑运算指令执行后根据运算结果设置的。
控制标志有3个,它们分别是:
IF、DF、TF,用来控制CPU的操作。
控制标志可以用指令设置,如IF、DF标志,也可以人为通过操作设置,如TF标志。
控制标志一旦设置,便对处理器的操作产生控制作用。
标志寄存器的具体格式
状态标志位:
CF(CarryFlag)进位标志位:
加/减法运算时最高位产生了进位或产生了借位:
CF=1,否则CF=0。
PF(ParityFlag)奇偶标志位:
运算结果中的低8位含“l”个数为偶数时,PF=1;为奇数时PF=O。
AF(AuxiliaryFlag)辅助标志位:
运算过程中若第3位向第4位有进位或借位时,AF=1,否则,AF=0。
该标志用于BCD运算中的十进制调整。
状态标志位:
ZF(ZeroFlag)零标志位:
运算结果为0时,ZF=1;否则,ZF=0。
SF(SignFlag)符号标志位:
运算结果的最高位为1,则SF=1;否则,SF=0。
常用来表示带符号数本次运算结果的正负。
OF(OverflowFlag)溢出标志位:
当带符号数运算结果超出了目标单元所能表示的数值范围时,OF=1,否则,OF=0。
带符号数字节运算的结果超出了-128~+127的范围,或者字运算的结果超出了-32768~+32767的范围时称为溢出。
控制标志位:
IF(InterruptFlag)中断允许标志位:
这是控制可屏蔽中断的标志,IF=1,允许CPU响应可屏蔽中断;IF=0,CPU禁止可屏蔽中断。
用STI指令可使IF置1,CLI指令可使IF清零。
DF(DirectionFlag)方向标志位:
若DF=0,使串操作自动按增地址方式进行;若DF=1,使串操作自动按减地址方式进行。
用STD指令可使DF置l,CLD指令可使DF清零。
TF(TrapFlag)单步跟踪标志位:
调试程序时,可将CPU设置为单步工作方式:
TF=l,即每执行完一条指令就自动产生一次内部中断,使用户可跟踪程序进行调试。
若TF=0时,CPU为连续工作方式。
5.标志寄存器
例4.1将63B5H与749CH两数相加,并说