微机原理与接口技术学习笔记 8086微处理器的结构

发布日期:2018-05-23 编辑整理:甘肃省自考网 【字体:

2.1.1 8086的结构特点

    微处理器执行一段程序通常是通过重复执行如下步骤来完成的,即:

    (1)从内存储器中取出一条指令,分析指令操作码;

    (2)读出一个操作数(如果指令需要操作数);

    (3)执行指令;

    (4)将结果写人内存储器(如果指令需要)。

    在8位微处理器中,上述步骤大部分是一个接一个串行地完成的。微处理器在取操作码、取操作数和存储操作数时要占用总线,而分析操作码和执行指令时不占用总线。由于微处理器以串行方式工作,在执行指令的过程中,总线会出现空闲时间,指令执行时间就较长。为了提高程序的执行速度,充分使用总线,8086微处理器被设计为两个独立的功能部件:执行部件和总线接口部件,如图2-1所示。

    1.总线接口部件BIU(Bus Interface  Unit)

    总线接口部件由段寄存器、指令指针、地址形成逻辑、总线控制逻辑和指令队列等组成。BIU负责从内存指定区域取出指令送到指令队列中排队;执行指令时所需要的操作数(内存操作数和I/O操作数)也由BIU从相应的内存区域或I/O端口取出,传送给执行部件EU。指令执行的结果如果需要存入内存的话,也由BIU写入相应的内存区域。总之,BIU同外部总线连接为EU完成所有的总线操作,并计算形成20位的内存物理地址。

    2.执行部件 EU(Execution Unit)

    执行部件由通用寄存器、标志寄存器、运算器(ALU)和EU控制系统等组成。EU从BIU的指令队列中获得指令,然后执行该指令,完成指令所规定的操作。EU用来对寄存器内容和指令操作数进行算术和逻辑运算.以及进行内存有效地址的计算。EU负责全部指令的执行,向BIU提供数据和所需访问的内存或I/O端口的地址,并对通用寄存器、标志寄存器和指令操作数进行管理。

 

 


        图2-1  8086微处理器的基本框图

     由于EU和BIU这两个功能部件能相互独立地工作,并在大多数情况下,能使大部分的取指令和执行指令重叠进行。这样EU执行的是BfU在前一时刻取出的指令,与此同时,BIU又在取出EU在下一时刻要执行的指令。所以,在大多数情况下,取指令所需的时间“消失”了(隐含在上一指令的执行之中)。大大减少等待取指令所需的时间,提高了微处理器的利用率和整个系统的执行速度。这种取指令和执行指令的重叠过程如图2-2所示。

 

        图2-2  取指令和执行指令的重叠进行

    3.8088与8086的区别

    Inte1 8088微处理器内部采用16位结构,实质上与 8086基本上是相同的,其内部的两个功能部件中EU与8086一样,而BIU略有区别。第一,8086的指令队列是6字节长,而8088的指令队列为4字节长;第二,8086是真正的16位机,同BIU相连的8086总线中数据总线是16位总线,而8088是准16位机,同BIU相连的8088总线中数据总线为8位总线。

 

            2.1.2 8086的寄存器结构

    对8086的程序员而言,掌握其编程结构——寄存器结构是至关重要的。在8086微处理器中可供程序员使用的有14个16位寄存器,如图2-3所示。

 

        图2-3  8086的内部寄存器

    这14个寄存器按其用途可分为通用寄存器、指令指针、标志寄存器和段寄存器四类。

    1.通用寄存器

    有8个通用寄存器,可分为两组,即:(1)数据寄存器。数据寄存器有4个,包括累加器AX(Accumulator)、基址寄存器BX(Base)、计数寄存器CX(count)和数据寄存器DX(Data)。数据寄存器的特点是,这4个16位寄存器可分为高8位(AH、BH、CH和DH)与低8位(AL、BL、CL和DL),这两组8位寄存器可分别寻址、独立操作。这样,可以将数据寄存器作为一个16位寄存器进行操作,也可用作两个8位寄存器。

    数据寄存器可以用来存放8位或16位的二进制操作数,这些操作数可以是参加操作的数据、操作的中间结果,也可以是操作数的地址。大多数算术和逻辑运算指令都可以使用这些数据寄存器。

    (2)指针寄存器和变址寄存器。另外4个通用寄存器是:堆栈指针SP(Stack Pointer),基址指针BP(Base Pointer)、源变址寄存SI(Source Index)和目的变址寄存器DI(Destination Index)。这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。其中SP、BP用于堆栈操作,SP用来确定堆栈在内存中的地址,BP来存放在现行堆栈段的一个数据区的“基地址”。SI、DI用于变址操作,存放变址地址。这4个寄存器也可用作数据寄存器。

    在8086的指令系统中,许多情况下,一条指令只能用一个特定的寄存器或寄存器组来完成其功能,对某些用来完成特定操作的8086指令,上述通用寄存器具有一些隐含用法,如表2-1所示。

           表2-1 通用寄存器的隐含用法

寄存器

       

AX

在字乘/字除指令中用作累加器
在字I/O操作时作为数据寄存器

AH


前一单元fix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />AL

字节乘、字节除
LAHF指令中用作目的寄存器

在字节乘、字节除指令中用作累加器
在字节中I/O操作时作为数据寄存器
BCD
ASCII码数据运算时作累加器
XLAT指令中作累加器

BX

间接寻址时,作为地址寄存器和基址寄存器
XLAT指令中用作基址寄存器

CX

串操作时的循环次数计数器
循环操作时的循环次数计数器

CL

在循环移位和移位操作时用作环移和移位次数的计数寄存器

DX

字乘、字除指令中用作辅助寄存器
I/O
指令间接寻址时作端口地址寄存器

SP

堆栈指针

SI

间接寻址时,作为地址寄存器和变址寄存器
串操作时的源变址寄存器

DI

间接寻址时,作为地址寄存器和变址寄存器
串操作时的目的变址寄存器

2.指令指针IP(Instruction Pointer)

    指令指针IP是一个16位专用寄存器。它指向当前需要取出的指令字节,当BIU从内存中取出一个指令字节后,IP就自动加1,指向下一指令字节。注意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。

    程序员不能对IP进行存取操作.程序中的转移指令、返回指令以及中断处理能对IP进行操作。

    3.标志寄存器 FR(Flag Register)

    8086有一个16位的标志寄存器FR,如图2-4所示。

 

 

 

 

OF

DF

IF

TF

SF

ZF

 

AF

 

PF

 

CF

图2-4 8086的标志寄存器

    在16位的标志寄存器FR中有意义的有9位,其中6位是状态位,3位是控制位,简述如下:

(1)       状态位。

    ①进位标志 CF(Carry Flag)。反映算术运算后,最高位(字节操作为D7位,字操作为D15位)出现进位(或借位)的情况,有则为‘1’。CF主要用于加、减法运算,移位和环移指令也会改变CF值。

    ②奇偶(校验)标志PF(Parity Flag)。反映操作结果低8位中“1”的个数的情况,若为偶数,PF置“1”,主要在数据通信中用来检查数据传送有无出错。

    ③辅助进位标志AF(Auxiliary Carry Flag)。反映一个8位量(或16位量的低位字节)的低4位向高位(即D3向D4)有无进位(或借位)的情况,有则置“1”,AF用于BCD码算术运算指令。

    ④零标志ZF(Zero Flag)。反映运算结果是否为零的情况,结果为零,ZF置“1”。

    ⑤符号标志 SF(Sign Flag)。反映带符号数运算结果符号位的情况,结果为负数,SF

置“1”,SF的取值与运算结果的最高位(字节操作为D7,字操作为D15)取值一致。

    ⑥溢出标志OF(Overflow Flag)。反映带符号数(以二进制补码表示)运算结果是否超过机器所能表示的数值范围的情况,对字节运算为-128~+127,对字运算为-32768~+32767。若超过上述范围,称为“溢出”,OF置“1”。

    注意:“溢出”与“进位”是两种不同的概念,某次运算结果有“溢出” 不一定有“进

位”,反之有“进位”也不一定有“溢出”。

    上述6个状态标志由执行部件EU设置,反映算术或逻辑运算结果的某些特征,这些状态标志常用来影响或控制某些后续指令(例如,条件转移指令、循环指令等)的执行。不同指令对状态标志的影响不一样,有些指令不影响状态标志。另外,进位标志CF可由指令设置。

    (2)控制位。

    ①方向标志DF(Direction Flag)。在进行字符串操作时,每执行一条串操作指令,对源或/与目的操作数的地址要进行一次调整(对字节操作为加 1或减1,对宇操作为加2或减

2),由DF决定地址是递增还是递减。若DF=“1”为递减,即从高地址向低地址进行,DF

=‘0’为递增。

    ②中断允许标志IF(Interrupt Fnable Flag)。表示系统是否允许响应外部的可屏蔽中断,若IF=1,表示允许响应。IF对不可屏蔽中断请求以及内部中断不起作用。

    ③陷阱标志TF(Trap Flag)。当TF=“1’时,微处理器每执行完一条指令便自动产生一个内部中断,转去执行一个中断服务程序,可以借助中断服务程序来检查每条指令的执行情况;称为“单步工作方式”,常用于程序的调试。

    上述3个控制标志用来控制微处理器的某些操作.可以由指令来设置。

 

    4.段寄存器(Segment Register)

    在微机系统的内存中通常存放着三类信息,即:

    (1)代码(指令)——指示微处理器执行何种操作;

    (2)数据(字符、数值)——程序处理的对象;

    (3)堆栈信息——被保存的返回地址和中间结果。

    在8086系统中,这三类信息通常分别存放在各自的内存区域中——8086存储系统中的不同存储段。

    8086系统中把可直接寻址的1M字节内在空间分为称作“段”的逻辑区域,每个段的物理长度为64K字节,而段的起始地址由称为“段寄存器”的4个16位寄存器决定,这4个段寄存器为:

    (1)代码段寄存器CS(Code Segment),指向当前的代码段,指令由此段中取出;

    (2)堆栈段寄存器SS(Stack Segment),指向当前的堆栈段,堆栈操作的对象就是该段中存储单元的内容;

    (3)数据段寄存器DS(Data Segment),指向当前的数据段,通常用来存放程序变量

(存储器操作数);

    (4)附加段寄存器ES(Extra Segment),指向当前的附加段,通常也用来存放数据。

    8086利用上述段寄存器的内容,通过适当转换可以访问这4个存储段——代码段、堆栈段、数据段和附加段。

 

    2.1.3  8086系统中的存储器组织及物理地址的形成

 

    1.存储器组织

    8086微处理器有20条地址线、可以配置1M字节(1048576字节)的内存储器,地址编号为00000H~FFFFFH。存储空间都按8位字节进行组织,每个存储单元存储一个字节数据,若存放“字”数据(16位),则存放在相邻两个存储单元中,高字节存放在高地址单元、低字节存放在低地址单元,如图2-5所示。

 

 

     图2-5 “字”数据存放情况

    如果不考虑数据存取的速度,则指令、字节数据和字数据可以自由地存放在内存的任何

字节地址中,而不必考虑“对准”问题。因此代码可以紧凑地存放在存储器中,从而节省了

存储空间。至于“对准”问题,将在第三章中讨论。

    2.存储器分段

    (1)为什么要分段。因为8086微处理器内部数指通路和寄存器皆为16位,内部ALU只能进行16位运算,在程序中也只能使用16位地址,寻址范围局限在216=65536(64K)字节,为了能寻址1M字节地址,所以要引入“分段”概念。

    (2)分段。8086程序把1M字节的存储空间看成为一组存储段,各段的功能由具体用途而定,分别为代码段、堆栈段、数据段和附加段。一个存储段是存储器的一个逻辑单位,其长度可达64K字节,每个段都由连续的存储单元构成,并是存储器中独立的、可分别寻址的单位。每段第一个字节的位置称为“段起始地址”,可由软件指定。对段起始地址的要求是:必须能被16整除(起始地址为XXXX0H)。段寄存器中存放了与段起始地址有关的16位“段基值”(Segment Base Value),一旦4个段寄存器的内容确定后,程序就可访问4个段中的任一存储单元。若程序超过64K字节,则必须通过给段寄存器重新送新值,把超出部分转到新段中。注意,几个段可以相互重叠,也可指向同一个64K字节空间。

    (3)物理地址与逻辑地址。

    ①在具有地址变换机构的计算机中,有两种存储器地址,一种是允许在程序中编排的地址——逻辑地址(Logical Address);另一种是信息在存储器中实际存放的地址——物理地址

(Physical Address)。在8086系统中每个存储单元也有两种地址。

    ②8086系统中,8086微处理器与内存储器之间所有信息交换都要使用20位的物理地址。而在程序中所涉及的地址都是16位的逻辑地址。对给定的任一存储单元而言有两部分逻辑地址:“段基值”——决定该段第一个字节的位置;“段内偏移量”(Offset)——该存使单元相对于该段起始单元的距离。

    “段基值”存放在段寄存器(CS、SS、DS和ES)中,而“段内偏移量”由 SP、BP、SI、DI、IP以及上述寄存器的组合而形成。

    ③物理地址的生成。存储单元的20位物理地址是通过将16位的“段基值”左移4位再加上 16位的“段内偏移量”(又称“偏移地址”)而生成的,如图2-6所示。

 

 

          图2-6 物理地址的形成

    a.当取指令时,8086会自动选择CS值作为段基值,再加上由IP提供之偏移量形成物理地址;

    b.当涉及堆栈操作时,8086会自动选择SS值作为段基值,再加上由SP提供之偏移量形成物理地址;

    c.当涉及一个操作数(存储器操作数)时,8086会自动选择DS值为段基值(若以BP为基地址,则SS为段基值),再加上16位偏移量形成物理地址,这16位偏移量可以来自:

     *指令中提供的直接地址——16位的位移量;

     *某一个16位地址寄存器之值;

     *指令中的位移量加上16位地址寄存器之值。

    d.ES用于串操作指令中的数据块传送指令。

    总之,8086系统中逻辑地址的来源可归纳如表2-2所示。

            表2-2  逻辑地址的来源

操作类型

隐含的段基值

可替换的段基值

偏移地址

取指令

CS

IP

堆栈操作

SS

SP

BP用作基地址寄存器

SS

CSDSES

EA

通用数据读写

DS

CSESSS

EA

字符串操作(源地址)

DS

CSESSS

SI

字符串操作(目的地址)

ES

DI

EA(Effective Address)----有效地址,反映操作数的段内偏移地址。



免责声明

1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。

2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:952056566@qq.com


甘肃自考便捷服务

  • 微信交流群
  • 微信公众号


微信扫一扫加入考生微信群
①学习交流、②考试提醒、③自考解答
④自考资料、⑤新闻通知、⑥备考指导


  • 视频课程
  • 真题下载
英语(二)

英语(二)

行政法学

行政法学

文学概论(一)

文学概论(一)

内科护理学(一)

内科护理学(一)

思修(03706)

思修(03706)

中国近现代史纲要

中国近现代史纲要