8086/8088微处理器【微机原理】 您所在的位置:网站首页 8086寄存器结构 8086/8088微处理器【微机原理】

8086/8088微处理器【微机原理】

2024-01-09 04:00| 来源: 网络整理| 查看: 265

8086/8088微处理器【微机原理】​​前言​​​​8086/8088微处理器​​​​80x86微处理器简介​​​​3.2.1 8086/8088内部结构​​​​3.2.2 8086/8088寄存器结构​​​​1、通用寄存器​​​​1)数据寄存器 AX、BX、CX、DX​​​​2)地址寄存器 SP、BP​​​​3)变址寄存器SI、DI​​​​2、段寄存器​​​​3、控制寄存器​​​​IP​​​​FLAGS​​​​1)状态标志位​​​​2)控制标志位​​​​总结​​​​3.2.3 总线周期的概念​​​​3.2.4 8086/8088引脚及其功能​​前言

以下内容源自微型计算机原理(第四版)王忠民主编​

8086/8088微处理器80x86微处理器简介

1.80x86微型计算机按CPU字长划分经历了哪几代?每代CPU的主频是多少?每 CPU有多少根地址引脚?理论上的存储器地址空间有多大?

8086/8088微处理器【微机原理】_嵌入式硬件

2.为了满足微型计算机对存储器系统的高速度、大容量、低成本的要求,目前微机 统通常采用三级存储器组织结构。试说明三级存储器组织结构的组成与工作原理。

三级存储器组织结构,即由高速缓冲存储器Cache、主存和外存组成。

工作原理:当前正在执行的程序或使用的数据必须从外存调入主存后才能被CPU读取并执行,将当前使用频率较高的程序和数据通过一定的替换机制从主存放入Cache,CPU在取指令或读取操作数时,同时对Cache和主存进行访问,如果Cache命中,则终止对主存的访问,直接从Cache中将指令或数据送CPU处理。由于Cache的速度比主存快得多,因此,Cache的使用大大提高了CPU读取指令或数据的速度。

3.2.1 8086/8088内部结构

8086CPU内部结构框图如图3.2所示,从功能上讲可分为两大部分:总线接口单元BIU(Bus Interface Umit)和执行单元EU(Execution Unit)。

8086/8088微处理器【微机原理】_嵌入式硬件_02

1.总线接口单元BIU

总线楼口单元BIU的功能是负责完成CPU与存储器或IO设备之间的数据传送。其具 体任务是:

①读指令——指令队列出现空字节(8088 CPU1个空字节,8086CPU2个空字节时, 从内存取出后续指令。BIU取指令时,并不影响EU的执行,两者并行工作,大大提高了CPU的执行速度,

②读操作数——EU需要从内存或外设端口读取操作数时,根据EU给出的地址从内 存或外设端口读取数据供EU使用。

③写操作数——EU的执行结果由BIU送往指定的内存单元或外设端口。

总线接口单元内有4个16位段寄存器,即代码段寄存器CS(Code Segment)、数据段寄 存器DSData Segmen)、堆栈段寄存器SS(Stack Segment)和附加数据段寄存器ES(Exma Ssegmenl),一个16位的指令指针寄存器IP(Instruction Pointer),一个20位的地址加法器,一个6字节指令队列缓冲器,一个与EU通信的内部寄存器以及总线控制电路等。下面对总线楼口单元中有关部件的功能作详细介绍。

1)段寄存器 886CPU的地址引脚有20根,能提供20位的地址信息,可直接对1M个存储单元进行访问,但CPU内部可用来提供地址信息的寄存器都是16位的,那么如何用16位寄存器实现20位地址的寻址呢?8086/8088采用了段结构的内存管理方法。

将指令代码和数据分别存储在代码段、数据段、堆栈段、附加数据段中,这些段的段 地址分别由段寄存器CS、DS、SS、ES提供,而代码或数据在段内的偏移地址则由有关寄 存器或立即数形式的偏移地址给出。

代码段寄存器CS存储程序当前使用的代码段的段地址。代码段用来存放程序的指令 代码。下一条要读取指令在代码段中的偏移地址由指令指针寄存器IP提供。数据段寄存器 DS用来存放程序当前使用的数据段的段地址。 一般来说,程序中所用到的原始数据、中间 结果以及最终结果都存放在数据段中。如果程序中使用了字符串处理指令,则源字符串也 存放在数据段中。堆栈段寄存器SS用来存放程序当前所使用的堆栈段的段地址。堆栈是在 存储器中开辟的一个特定区域(详见33.1节“堆栈操作”)。附加数据段寄存器ES用来存放 程序当前使用的附加数据段的段地址。附加数据段通常用于存放字符串操作时的目的字符串。

程序员在编写汇编语言源程序时,应该按照上述规定将程序的各个部分放在规定的段 内。每个源程序必须至少有一个代码段,而数据段、堆栈段和附加数据段则根据程序的需 要决定是否设置。

2)指令指针寄存器 指令指针寄存器IP用来存放下一条要读取的指令在代码段中的偏移地址。IP在程序运 行中能自动加1修正,从而使其始终存放的是下一条要读取的指令在代码段的偏移地址。 由于CS和IP的内容决定了程序的执行顺序,因此程序员不能直接用赋值指令对其内容进 行修改。有些指令能使IP和CS的值改变(如跳转指令)或使其值压入堆栈或从堆栈中弹出恢 复原值(如子程序调用指令和返回指令)。

3)20位地址加法器 8086/8088 CPU在对存储单元进行访问以读取指令或读/写操作数时,必须在地址总线 上提供20位的地址信息,以便选中对应的存储单元。那么,CPU是如何产生20位地址的呢? CPU提供的用来对存储单元进行访问的20位地址是由BIU中的地址加法器产生的。 存储器中每个存储单元的地址可有以下两种表示方式: (1)逻辑地址:其表达形式为“段地址:段内偏移地址”。段内偏移地址又称为“有效 地址”(EA,Effective Address)。在读指令时,段地址由代码段寄存器CS提供,当前要读取 指令在代码段中的偏移地址由指令指针寄存器段内偏移地址 IP提供,在读取或存储操作数时,根据具体操作,段地址由DS、ES或SS提供,段内偏移地段寄存器由指令给出。 (2)物理地址:CPU与存储器进行数据交换时在地址总线上提供的20位地址信息称为 物理地址。物理地址的形成过程如图3.3所示。

由逻辑地址求物理地址的公式为: 物理地址=段地址x10H+段内偏移地址

如假设当前(CS)=20A8H,(IP)=2008H,那么,下一条从内存中读取的指令所在存储 单元的物理地址为20A8Hx10H+2008H=22A88H。

4)指令队列缓冲器 条要执行的指令从内存单元读入指令队列。它们采用“先进先出”的原则,按顺序存协 节(对8086而言)或1个空字节(对8088而言)时,BIU就自动执行一次取指令周期,将下 并按顺序取到EU中去执行。

当EU执行跳转、子程序调用或返回指令时,BIU就使指令队列复位,并从指令给出 新地址开始取指令,新取的第1条指令直接经指令队列送EU执行,随后取来的指令将填入指令队列缓冲器。

指令队列的引入使得EU和BIU可并行工作,即BIU在读指令时,并不影响EU单 执行指令,EU单元可以连续不断地直接从指令队列中取到要执行的指令代码,从而减少了CPU为取指令而等待的时间,提高了CPU的利用率,加快了整机的运行速度。

2.执行单元EU 执行单元EU不与系统外部直接相连,它的功能只是负责执行指令。执行的指令从B 的指令队列缓冲器中直接得到。执行指令时若需要从存储器或IO端口读写操作数,由 向BIU发出请求,再由BIU对存储器或I/O端口进行访问。EU由下列部件组成; (1)16位算术逻辑单元(ALU):用于进行算术和逻辑运算。 (2)16位标志寄存器FLAGS:用来存放CPU运算结果的状态特征和控制标志。 (3)数据暂存寄存器:协助ALU完成运算,暂存参加运算的数据, (4)通用寄存器:包括4个16位数据寄存器AX、BX、CX、DX和4个16位指针与变 址寄存器SP、BP与SI、DI。 (5) EU控制电路:它是控制、定时与状态逻辑电路,接收从BIU中指令队列取来的指 令,经过指令译码形成各种定时控制信号,对EU的各个部件实现特定的定时操作。

88CPU内部结构与8086基本相似,两者的执行单元EU完全相同,其指令系统、 址方式及程序设计方法都相同,所以两种CPU完全兼容。区别仅在于总线接口单元BIU,归纳起来主要有以下几个方面的差异:

(1)外部数据总线位数不同。8086外部数据总线为16位,在一个总线周期内可 输入/输出一个字(16位数据);而8088外部数据总线为8位,在一个总线周期内只 输入/输出一个字节(8位数据)。 (2)指令队列缓冲器大小不同。8086指令队列可容纳6个字节,且在每一个总线周期中 从存储器取出2个字节的指令代码填入指令队列:而8088指令队列只能容纳4个字节,在一个机器周期中取出一个字节的指令代码送指令队列。 (3)部分引脚的功能定义有所区别,详见3.2.4节。

3.2.2 8086/8088寄存器结构

8086/8088微处理器【微机原理】_数据_03

1、通用寄存器1)数据寄存器 AX、BX、CX、DX

上述4个寄存器一般用来存放数据,但它们各自都有自己的特定用途:

AX(Accumulator)称为累加器。

BX(Base)称为基址寄存器。

CX(Counter)称为计数器。

DX(Data)称为数据寄存器。

2)地址寄存器 SP、BP

SP(Stack Pointer)称为堆栈指针寄存器。

BP(Base Pointer)称为基址寄存器。

3)变址寄存器SI、DI

SI(Source Index)称为源变址寄存器。DI(Destination Index)称为目的变址寄存器。

2、段寄存器

80861808的4个段寄存器分别为:

CS(Code Segment)称为代码段寄存器,

DS(Data Segment)称为数据段寄存器,

SS(Stack Segmen)称为堆栈段寄存器,

ES(Extra Segment)称为附加数据段寄存器,

在8086/8088系统中,段寄存器和与其对应的存放段内偏移地址的寄存器之间有一种默认组合关系,如表3.2所示。

表3.2

8086/8088段寄存器与提供段内偏移地址的寄存器之间的默认组合

段寄存器

提供段内偏移地址的寄存器

CS

IP

DS

BX、SI、DI或一个16位立即数形式的偏移地址

SS

SP或BP

ES

DI(用于字符串操作指令)

在这种默认组合下,指令中不必专门指定其组合关系,但指令如用到非默认的组合关系,则必须用段超越前缀加以说明。这一点将在第4章中说明。

3、控制寄存器IP

IP(Instruction Pointer)称为指令指针寄存器

FLAGS

FLAGS称为标志寄存器

1)状态标志位

下面分别介绍这6个状态标志位的功能。

CF(Carry Flag)——进位标志位。

PF(Parity Flag)——奇偶标志位。

AF(Auxiliary Flag)——辅助进位标志位。

ZF(Zero Flag) ——零标志位。

OF(Overflow Flag 溢出标志位。

2)控制标志位

它们是:TF(Thap Flag)——跟踪(陷阱)标志位。

IF(Interrupt Flag)——中断允许标志位。

DF(Direction Flag)——方向标志位。

注意:有关寄存器,尤其是在存储器寻址时用来存放操作数在段内偏移地址的地址寄 存器和标志寄存器中各控制标志位的使用方法,在后续章节中涉及时还将进一步详细介绍,请读者务必熟练掌握。

总结

AX                              |—BX                    |–数据寄存器------|                    |         |—CX                    |         |—DX                    |                    |        |—SP            |–通用寄存器------|–地址寄存器------|            |         |         |—BP            |         |            |            |           |—SI            |         |–变址寄存器------|            |                |—DI            |            |      |—CS            |      |—DS8086/8088寄存器结构----|–段寄存器–|            |      |—SS            |      |—ES            |            |         |—IP              |—CF            |–控制寄存器------|             |—PF                    |       |–状态标志位------|—AF                    |       |         |—ZF                    |       |            |—OF                    |–FLAGS—|                            |        |—TF                          |–控制标志位-------|—IF                                   |—DF

         |—AX                           |—BX                    |–数据寄存器------|                    |         |—CX                    |         |—DX                    |                     |         |—SP           |–通用寄存器------|–地址寄存器------|            |        |        |—BP           |         |            |        |       |—SI           |         |–变址寄存器------|           |                 |—DI           |            |       |—CS           |       |—DS8086/8088寄存器结构----|–段寄存器–|            |       |—SS           |      |—ES           |           |        |—IP           |—CF           |–控制寄存器------|              |—PF                    |     |–状态标志位------|—AF                    |     |        |—ZF                    |      |        |—OF                    |–FLAGS—|                         |         |—TF                         |–控制标志位-------|—IF                                 |—DF

3.2.3 总线周期的概念

为了便于对808618088 CPU引脚功能进行说明,本节简要介绍总线周期的概念。

8688 PU在与存储器或IO端口交换数据时需要启动一个总线周期。按照数据 er 传送方向来分,总线周期可分为“读”总线周期(CPU从存储器或I/O端口读取数据)和“E 总线周期(CPU将数据写入存储器或I/O端口)。

8086/8088 CPU基本的总线周期由4个时钟周期组成,如图3.6所示。

8086/8088微处理器【微机原理】_stm32_04

时钟周期是CPU的基本时间计量单位,由CPU主频决定,如8086的主频为5MHz,

1个时钟周期就是200ns。1个时钟周期又称为1个T状态,因此基本总线周期可用T1、T2、T3、T4表示。图3.6(a)给出典型的总线周期波形图。在T1状态CPU把要读/写的存储单元的地址或10端口的地址放到地址总线上。若是“读”总线周期,CPU从T3起到T4从总线上接收数据,在T2状态时总线浮空,允许CPU有一个缓冲时间以把输出地址的写方式转换成给入数据的读方式:若是“写”总线周期,CPU则从T2起到T4,把数据送到总线上,并写入存储器单元或IO端口。

图3.6(b)是具有空闲状态的总线周期。如果在一个总线周期之后不立即执行下一个总线周期,即CPU此时执行的指令不需要对存储器或I/O端口进行访问,且目前指令队列满而不需要到内存中读指令,那么系统总线就处于空闲状态,即执行空闲周期。在空闲周期中可包括一个或多个时钟周期,在此期间,在高4位的总线上,CPU仍驱动前一个总线周期的状态信息:而在低16位的总线上,则根据前一个总线周期是读还是写周期来决定。若前个周期为写周期,CPU会在总线的低16位继续驱动数据信息:若前一个总线周期为读周期,CPU则使总线的低16位处于浮空状态。在空闲周期,尽管CPU对总线进行空操作,但在CPU内部,仍然进行着有效的操作,如执行某个运算、在内部寄存器之间传送数据等。

图3.6(c )是具有等待状态的总线周期。在T状态结束之前,CPU测试READY信号线, 如果为有效的高电平,则说明数据已准备好,可进入T状态;若READY为低电平,则说明数据没有准备好,CPU在T,之后插入1个或多个等待周期Tw。直到检测到READY为有效高电平后,CPU会自动脱离Tw而进入T,状态。这种延长总线周期的措施允许系统使用低速的存储器芯片。

3.2.4 8086/8088引脚及其功能

8086/8088 CPU外部都采用40引脚双列直插式封装,如图3.7所示。

8086/8088微处理器【微机原理】_stm32_05



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有