第三章
8086/8088微处理器及系统本章内容
§ 3.1 8086/8088微处理器结构
§ 3.2 8086微处理器的 引脚功能
§ 3.3 8086CPU的工作时序
§ 3.4 8086的存储系统
§ 3.1 8086/8088的内部结构
8086CPU
总线接口部件
( bus interface unit,BIU)
执行部件
( execution unit,EU)
★
1.执行部件( EU)
负责指令的执行,将指令译码并利用内部的寄存器和 ALU对数据进行处理。
通用寄存器组专用寄存器组算术逻辑运算单元( ALU)
标志寄存器内部控制逻辑
( 1)通用寄存器组 (16位 )
用来存放操作数和中间结果处理,字,指令时,用 16位寄存器处理,字节,指令时,用 8位寄存器
AX( AH,AL)累加器存放参加运算的操作数和运算结果,有些指令约定 AX( AL)寄存器为累加器,如乘法、
除法、输入 /出指令。
AX (AH,AL)
BX (BH,BL)
CX (CH,CL)
DX (DH,DL)
BX( BH,BL)基址寄存器计算地址时用作 基地址寄存器,用于扩展寻址,
起变址作用。
CX( CH,CL)计数寄存器在某些指令中作 隐含的计数器 。例如循环操作、
串操作及移位操作等。
DX( DH,DL)数据寄存器存放操作数和列表数据,在某些 I/O操作期间,
用来保存 I/O端口地址,在乘除运算中有专用。
( 2)专用寄存器组 (16位 )
SP 堆栈指针寄存器访问堆栈段的栈顶单元栈是一种 先进后出 的数据结构,最后入栈的数据为栈顶数据,其单元地址称为栈顶地址。
SP→
入栈:“船高水涨”
出栈:“水落船低”
15HSP→
16H
17H
SP BP SI DI
SP →
SP → 18H
BP 堆栈区基地址寄存器对堆栈段寄存器相对寻址的基地址寄存器,可访问堆栈段的任意单元。
SI 源变址寄存器源操作数偏址存于 SI
DI 目的变址寄存器目的操作数偏址存于 DI
寄存器间接寻址、
相对寻址、
基址变址寻址、
相对基址变址、
访问数据段的任意单元在数据串中专用
( 3)算术逻辑单元 (ALU)
加法器,完成 16位或 8位算术逻辑运算
( 4)标志寄存器 (FR)
功能 条件(状态)标志( 6位)
控制标志( 3位)
① 状态标志:用于寄存器程序运行的状态信号,由硬件根据运算结果自动设定,用作后续指令判断依据。
CF( carry flag):进 /借位标志,当做 16位或 8位加减法运算时,最高位有进 /借位,则 CF=1,否则 CF=0。
PF( Parity flag):奇偶标志 /奇偶校验位运算结果中,若低 8位中的,1”的个数为偶数,PF=1,
若为奇数 PF=0(奇校验方式)
SF( Sign Flag)符号标志与运算结果的最高位相同,若运算结果为负数,
则 SF=1,若为正数 SF=0。
AF(Auxiliary Carry Flag),辅助进 /借位标志当作 16位或 8位加减法运算时,最低四位向高四位有进 /借位,AF=1,否则 AF=0,用于 BCD码的调整。
ZF( Zero Flag):零标志当算术或逻辑与计算指令生成结果为零,ZF=1,
否则 ZF=0。
OF(Over Flag)溢出标志当运算结果超出了机器数所能表示的范围时,
称为溢出 OF=1,否则 OF=0。
字节 -128~ +127 字 –32768~+ 32767
通常 CF用于无符号数运算结果的溢出判断,而
OF则用于有符号数的运算结果溢出判断。在 8086
系统中,有一条中断指令 INTO(中断类型 4)能够在发生溢出时,产生一个内部中断,CPU自动转入溢出中断服务程序中,并对溢出作相应处理,一般在指令运算后加上该指令。
11001010
+ 01111000
101000010
CF=1,PF=1,AF=1,ZF=0,
SF=0,OF=0
看作无符号数运算:
202+120=322,显然超出了 8位二进制数所能表示的最大无符号数 255,运算结果溢出 CF=1。
看作有符号数运算:
-54+( +120) =+66,运算结果不溢出 OF=0。
② 控制标志
IF( Interrupt Flag) 中断标志可由指令设置。当 IF=1时,CPU开中断;当 IF=0时,
CPU关中断,IF只能对可屏蔽中断产生影响,而对非屏蔽中断和内部中断无影响。
DF( Direction Flag) 方向标志在串处理指令中,用于控制串处理的方向。当 DF=0
时,SI,DI自动增量;当 DF=1时,SI,DI自动减量;
该指令由方向控制指令设置或清除。
TF( Trap Flag)(跟踪) 陷阱标志可由指令设置。当 TF=1时,表示以单步方式执行程序,即 CPU每执行完一条指令,就自动产生一次内部单步中断 〈 中断类型 1〉 (也称为陷阱),进入系统控制程序,利用此功能可跟踪指令的执行状况,
用于程序调试。
( 5)内部控制逻辑电路从指令对列缓冲器中取出指令,进行译码,产生各种控制信号,控制各种部件的工作。
负责与存储器,I/O端口传送数据,包括对存储器的读写数据操作,对 I/O端口的读写操作以及取指令操作,即 BIU管理在存储器中读写程序和数据的实际处理能力。 段寄存器指令指针寄存器地址加法器内部暂存器指令队列缓冲器
I/O控制逻辑(总线控制逻辑)
★
2.总线接口部件( EIU)
8086/8088CPU寻址空间为 1MB,地址范围为:
00000H~ FFFFFH,为了和 8位机在软件上保持兼容,
将 1MB空间分成 16段,每段最大为 64KB,每段的首地址必须能被 16整除 (即凡是能被 16整除的地址均可定义为段首地址 ),各段之间可以是连续、分开、部分重叠或完全重叠的。当段首地址确定后,段内的 16位地址称为偏移地址。由于 8086存储系统数据存储器和程序存储器是统一编址的,分段可以使他们隔离,互不相扰。
⑴ 段寄存器逻辑地址:程序中出现的地址是逻辑地址,是用符号地址表示的。逻辑地址包括段基址和偏移地址,CPU执行程序时,需要 将逻辑地址转换为物理地址,称为 地址重定位 。
物理地址:是指信息在存储器中实际有效的地址单元号,CPU访问内存是按物理地址寻址的。每一个物理地址是由段地址和段内偏移量组成。
物理地址=段基地址 × 16+偏移量物理地址和逻辑地址
1MB的存储空间可分为四种类型的段(代码段、
数据段、堆栈段、附加段),段基址分别存放在对应的段寄存器中。
CS 代码段寄存器保存当前执行程序所在段的段基址,CS中的数乘 16,再加上指令指针寄存器 IP中的内容,即是下一条将要取出指令的代码的地址。
CS=2000H,IP=2200H
物理地址= 2000H× 16+ 2200H=22200H
DS 数据段寄存器保存有数据段的段基址。数据段是用来保存当前程序中的操作数和变量。
SS 堆栈段寄存器保存有堆栈段的段基址,SS中的数据乘 16,加上堆栈指针寄存器 SP中的数形成栈顶地址。
ES 附加段寄存器进行字符串操作时,作为目的段地址使用,是一种附加的数据区,若要使用附加段,必须对 ES置初值。在附加段中,DI寄存器用于存放附加段的偏移量。
⑵ 指令指针寄存器 IP 16位寄存器用来存放将要取出指令的偏移地址,每执行一条指令,IP自动增量,其大小与已执行指令的字节长度有关。
程序以代码的形式存在于存储器中,每一条指令都有一个存放地址,IP总要指向下一条将要执行的指令地址。
⑶ 地址加法器用于产生 20位的物理地址。物理地址的获得方法:
将段寄存器中的内容左移 4位(或者乘以 16)与偏移地址(即对段首的偏移量)在地址加法器内相加,产生 20位的物理地址。
⑷ 指令队列缓冲器
8086有 6字节缓冲器,8088有 4字节缓冲器。在执行部件执行指令的同时,可以从内存中取出下一条或下几条指令放到缓冲器,一条指令执行完后,可立即译码执行下一条指令,从而解决了以往 CPU取指令期间,运算器的等待问题。由于取指令和执行指令并行进行,从而提高了 CPU的效率。
⑹ 内部暂存器用于内部数据的暂存,该部分对用户 透明,用户无权访问。
⑸ 输入 /出控制电路输入 /出控制电路控制 CPU与外部电路的数据交换。
8086有 20条地址线,16条数据线,由输入 /出控制电路控制分时复用的 CPU芯片的 16个引脚。
§ 3.2 8086微处理器的引脚功能
8086为 40引脚双列直插式封装,某些引脚具有双重功能,称为引脚复用。
分时复用:在同一个总线周期中不同的时钟周期内功能不同(马路跑车);
模式复用:根据工作模式的不同引脚定义不同。
8086引脚分配图
AD15~AD0 地址 /数据复用总线引脚,双向,分时复用构造总线必须加 锁存器,8088的高 8位不做复用,
地址引脚是单向的。
A16/S3~A19/S6地址 /状态复用引脚,单向,分时复用访问存储器时,在总线周期的 T1时刻,做高 4位地址,T2,T3,TW,T4状态时,用于输出状态信息。
访问 I/O端口时,输出均为低电平,8086最多可访问
64K个 I/O端口。
S6=0,8086/8088当前与总线相连
S5=1,允许可屏蔽中断
S5=0,禁止一切可屏蔽中断
S4 S3
0 0 ES
0 1 SS
1 0 CS
1 1 DS
NMI 非屏蔽中断,输入,上升沿有效当该引脚出现有效信号时,CPU执行完指令后,
立即响应中断,不受 IF影响,软件也屏蔽不掉,中断类型号是 2。
INTR 可屏蔽中断,输入,高电平有效
CPU在执行每一条指令的最后一个时钟周期采样该引脚,若为高电平(若 IF=1),则响应中断。
CLK 时钟,输入
CPU和总线控制的基准定时脉冲,一个时钟周期内具有 1/3有效高电平(即占空比 33%),其频率为
4MHz,5MHz,8 MHz,10 MHz等,CPU的所有操作都是在时钟同步下进行的。
RESET 复位信号,高电平有效
8086/8088要求复位信号至少维持 4个时钟周期的高电平,以完成 CPU内部寄存器的复位操作。复位后
CPU从 FFFF0H单元启动,在此处安排一条长转移指令,
使 CPU执行一条特定的启动程序,称为引导程序。系统复位后各寄存器的状态如下:
DT/R 数据发送 /接收控制,输出当数据总线需要双向驱动时,用来做方向控制 ;
当为高电平时,则进行数据发送,当为低电平则为数据接收。
DEN 数据允许,输出,低电平有效在最小模式下作为输出信号的输出端,有时数据总线需要加双向驱动器( 8286,74LS245)就用 DEN作为驱动器的选通信号,在每个存储器读、写,I/O读、
写或中断响应周期中,DEN都变为有效低电平。
RD 读信号、输出,低电平有效当 CPU执行存储器或 I/O读操作指令时,RD 为低电平。
M/IO 存储器 /外设访问控制,输出当 M/IO为高电平时,表示 CPU访问存储器,若为低电平时,表示 CPU执行输入 /出 (IN\OUT)指令对外设进行访问。
WR 写信号、输出,低电平有效当 CPU执行存储器或 I/O写操作指令时,WR为低电平。
HLDA 总线请求回答信号,输出,高电平有效
HLDA=1,表示 CPU同意让出总线。
HOLD 请求占用总线,输入,高电平有效当系统中其它模块或部件需要占用总线时,向
CPU发出申请。
在 DMA(直接存储器存取)工作方式时,DMA控制器( DMAC)向 CPU发出请求占用总线信号
( HOLD=1),希望 CPU让出对总线的控制权。 CPU
接到该请求后,在执行完当前操作后,通知 DMAC可以使用总线,此时总线均为高阻状态,CPU不再拥有总线控制权,只能进入等待。当 HOLD变为低电平时,表示 DMAC占用总线结束,CPU也将 HLDA变为低电平,
CPU可重新获得总线控制权。
磁盘的存取就属于 DMA方式。
READY,准备好”信号,输入,高电平有效用来使 CPU和慢速的存储器(或 I/O设备 )之间的速度匹配,当被访问的设备、数据没有准备好之前,
该信号为低电平使 CPU自动插入等待状态 TW来延长总线周期,当数据或设备准备好时,该信号为高电平,CPU继续执行该总线周期。为避免失误设备送来的 READY信号,必须先经过时钟发生器 8284,
与时钟 CLK同步后,再送入 CPU的 READY引脚。
TEST,测试信号,输入,低电平有效当执行 WAIT指令时,每隔 5个时钟周期,
CPU就对该引脚采样,若为高电平,就使 CPU重复执行 WAIT指令而处于等待状态,直到变为低电平,CPU脱离等待继续执行下一条指令。该引脚与 WAIT配合,可以实现 CPU与外设同步工作。
INTA:中断响应、输出、低电平有效。
CPU响应外部中断请求后,发给请求中断请求设备的回答信号,在每个中断周期的 T2,T3和 TW期间,它变为低电平。一般发送两个负脉冲信号,第一个通知外设,它发生的中断请求已被响应,第二个通知中断源送出中断矢量码(即读取矢量码的选通信号)
ALE 地址锁存允许信号、输出、高电平有效在总线周期 T1期间,ALE的下降沿将出现在
AD15~ AD0总线上的地址信息锁在锁存器的输出端,并保持到数据的输入 /输出完成。 ALE不能浮空。
MN/MX 最小 /最大模式控制信号,该引脚固定接到 +5V电源时,CPU处于最小工作模式,如果接地,CPU处于最大工作模式。
BHE/S7 高 8位数据总线允许 /状态复用引脚,输出在总线周期的 T1时刻,输出低电平,表示总线高 8位 AD15~ AD8上的数据有效。在 T2~ T4期间,
输出 S7状态( S7在当前的 8086芯片中未被定义),
BHE与地址线 A0组合,可对存储器读写时的数据格式实现控制。
LOCK 封锁信号,低电平有效,输出。
当 LOCK为低电平时,就封锁了总线,其它设备不能获得总线控制权的机会,它的状态可由指令设置,如果 CPU执行一条加有 LOCK前缀的指令(例 LOCK XCHG AX,SEM)则在指令执行过程中 LOCK引脚一直输出低电平,直到加前缀的指令执行完毕。使用此功能,可以防止某条指令在执行过程中被打断,在 DMA期间,LOCK
被置为高阻状态。
计算机是在时钟控制下进行工作的,若干个时钟完成一个基本操作,一个基本操作就是一个总线周期,
CPU有若干种典型操作,构成相应的总线周期。如存储器的读写总线周期,I/O读写总线周期等。执行一条指令的时间称为指令周期,指令周期是由若干总线周期构成。 8086/8088的基本总线周期是由 4个时钟周期组成,在执行 WAIT指令或 READY引脚输入的状态为低电平时,都需要在 T3和 T4之间插入 1个或若干个等待时钟周期 Tw。
1,8086微处理器的总线周期
§ 3.3 8086CPU的工作时序
T1状态,CPU向多路复用总线上发送地址信息,指出要寻址的内存单元地址或 I/O端口地址。这期间 CPU
还要送出 ALE(正向脉冲),在 ALE下降沿将内存单元地址或 I/O端口地址打入地址锁存器。
T2状态,CPU从总线上撤销有效地址,使地址总线低 16位呈高阻状态,为数据传输做准备。总线的高 4位
( A19~ A16)输出总线周期的状态信息,用于表示中断允许状态及正在使用的段寄存器名。
T3状态,A19~ A16上的状态信息不变,地址总线低 16
位上出现 CPU要写出的或准备读入的数据。若外设与内存来不及与总线交换数据,则应通过 CPU的 READY信号,
在 T3前沿向 CPU申请插入等待状态 TW,在 T3及 TW前沿查询 READY信号,查到高电平则结束等待状态,进入下一状态,否则继续插入等待。
T4状态:总线周期结束在一个总线周期之后,若不立即进入下一个总线周期,即 CPU不与内存或外设交换数据或者指令队列已满,系统总线处于空闲状态,CPU执行总线空闲周期,总线空闲周期一般由一个或多个时钟周期组成。
2.8086CPU的两种工作模式最小工作模式(单 CPU系统)
最大工作模式(多 CPU系统)
8086最小工作模式结构图当 8086CPU的 MN/MX引脚接到+ 5V时,就处于最小工作模式 。
时钟发生器( 8286)
石英晶体振荡器 (晶振) 6MHz,8MHz,10MHz等时钟发生器产生系统需要的时钟信号 CLK,同时对外部 READY信号和系统复位信号 RESET进行同步,输出送向相应的 8086引脚,保证 READY信号能够出现在总线周期的 T3时刻。
(1) 最小工作模式下的操作时序地址锁存信号要一直有效,8282输出允许端 OE要接地(低电平有效),在 T1状态,CPU输出地址锁存允许信号 ALE,将 ALE接向 8282的选通输入端 STB,
当 ALE=1时,8282输出跟随输入变化,用 ALE的下降沿将总线上的已稳定的信号锁入 8282。
地址锁存器( 8282/74LS373)
用于 20位地址和 BHE信号锁存,使得整个总线周期地址信号始终有效,以支持 8086CPU地址 /数据总线分时复用的工作方式。一片 8282只能锁存 8位的地址,所以至少要 3片才能完整的锁存 20位的地址。
总线收发器
8286 当系统中所连的存储器或外设较多时,需要增加数据总线的驱动能力,可以接总线驱动芯片 8286
一片 8286只能驱动 8位数据线,需 2片。 OE端为输出使能端低电平有效,当 OE=1时,控制门关,8286两端均处于高阻状,该信号由 DEN控制。数据传送方向受 T端控制,当 T=1时,数据传送方向 A→B,当
T=0时,数据从 B →A 。
BHE和 A0作为基地址存储体和偶地址存储体的选通信号地址锁存允许信号有效时,从 ALE输出一个正脉冲,在其下降沿将地址锁存。
T1状态:在指令执行过程中,执行部件可能需要从内存或外设端口读取数据而进入总线读周期,
在进入总线读周期之前,即 T1前沿之前,M/IO信号应该有效。若要读内存则 M/IO上升为高电平,若要读 I/O端口,则 M/IO降为低电平。 CPU读取的数据单元或 I/O端口地址是 20位的。地址信号是通过多路复用总线输出的,高 4位地址通过地址 /状态线 A16/S3~
A19/S6送出,低 16位通过地址 /数据总线 AD15~AD0
送出。
BHE有效时,高 8位数据线上的信息可以使用,BHE信号常用作奇地址存储体的体选信号,配合地址信号 A19~A1,
实现奇地址存储器寻址,所以 BHE信号和地址信号一起由
ALE信号锁入到地址锁存器之中,当系统中接有总线缓冲器时数据传输方向控制信号 DT/R应降为低电平,说明现在为总线读。
T2状态:地址信号消失,地址数据复用总线进入高阻状态。
为总线读操作做准备,A19~A1及 BHE线上输出 S7~S3(在
8086系统没用)。
DEN信号降为低电平,使数据线缓冲使能。
RD信号有效,该信号送到内存或 I/O端口,使他们将选中的数据送上数据线。
读存储器的总线周期时序写存储器的总线周期时序
8086最大工作模式结构图
§ 3.4 8086的存储系统
8086/8088微处理器及系统本章内容
§ 3.1 8086/8088微处理器结构
§ 3.2 8086微处理器的 引脚功能
§ 3.3 8086CPU的工作时序
§ 3.4 8086的存储系统
§ 3.1 8086/8088的内部结构
8086CPU
总线接口部件
( bus interface unit,BIU)
执行部件
( execution unit,EU)
★
1.执行部件( EU)
负责指令的执行,将指令译码并利用内部的寄存器和 ALU对数据进行处理。
通用寄存器组专用寄存器组算术逻辑运算单元( ALU)
标志寄存器内部控制逻辑
( 1)通用寄存器组 (16位 )
用来存放操作数和中间结果处理,字,指令时,用 16位寄存器处理,字节,指令时,用 8位寄存器
AX( AH,AL)累加器存放参加运算的操作数和运算结果,有些指令约定 AX( AL)寄存器为累加器,如乘法、
除法、输入 /出指令。
AX (AH,AL)
BX (BH,BL)
CX (CH,CL)
DX (DH,DL)
BX( BH,BL)基址寄存器计算地址时用作 基地址寄存器,用于扩展寻址,
起变址作用。
CX( CH,CL)计数寄存器在某些指令中作 隐含的计数器 。例如循环操作、
串操作及移位操作等。
DX( DH,DL)数据寄存器存放操作数和列表数据,在某些 I/O操作期间,
用来保存 I/O端口地址,在乘除运算中有专用。
( 2)专用寄存器组 (16位 )
SP 堆栈指针寄存器访问堆栈段的栈顶单元栈是一种 先进后出 的数据结构,最后入栈的数据为栈顶数据,其单元地址称为栈顶地址。
SP→
入栈:“船高水涨”
出栈:“水落船低”
15HSP→
16H
17H
SP BP SI DI
SP →
SP → 18H
BP 堆栈区基地址寄存器对堆栈段寄存器相对寻址的基地址寄存器,可访问堆栈段的任意单元。
SI 源变址寄存器源操作数偏址存于 SI
DI 目的变址寄存器目的操作数偏址存于 DI
寄存器间接寻址、
相对寻址、
基址变址寻址、
相对基址变址、
访问数据段的任意单元在数据串中专用
( 3)算术逻辑单元 (ALU)
加法器,完成 16位或 8位算术逻辑运算
( 4)标志寄存器 (FR)
功能 条件(状态)标志( 6位)
控制标志( 3位)
① 状态标志:用于寄存器程序运行的状态信号,由硬件根据运算结果自动设定,用作后续指令判断依据。
CF( carry flag):进 /借位标志,当做 16位或 8位加减法运算时,最高位有进 /借位,则 CF=1,否则 CF=0。
PF( Parity flag):奇偶标志 /奇偶校验位运算结果中,若低 8位中的,1”的个数为偶数,PF=1,
若为奇数 PF=0(奇校验方式)
SF( Sign Flag)符号标志与运算结果的最高位相同,若运算结果为负数,
则 SF=1,若为正数 SF=0。
AF(Auxiliary Carry Flag),辅助进 /借位标志当作 16位或 8位加减法运算时,最低四位向高四位有进 /借位,AF=1,否则 AF=0,用于 BCD码的调整。
ZF( Zero Flag):零标志当算术或逻辑与计算指令生成结果为零,ZF=1,
否则 ZF=0。
OF(Over Flag)溢出标志当运算结果超出了机器数所能表示的范围时,
称为溢出 OF=1,否则 OF=0。
字节 -128~ +127 字 –32768~+ 32767
通常 CF用于无符号数运算结果的溢出判断,而
OF则用于有符号数的运算结果溢出判断。在 8086
系统中,有一条中断指令 INTO(中断类型 4)能够在发生溢出时,产生一个内部中断,CPU自动转入溢出中断服务程序中,并对溢出作相应处理,一般在指令运算后加上该指令。
11001010
+ 01111000
101000010
CF=1,PF=1,AF=1,ZF=0,
SF=0,OF=0
看作无符号数运算:
202+120=322,显然超出了 8位二进制数所能表示的最大无符号数 255,运算结果溢出 CF=1。
看作有符号数运算:
-54+( +120) =+66,运算结果不溢出 OF=0。
② 控制标志
IF( Interrupt Flag) 中断标志可由指令设置。当 IF=1时,CPU开中断;当 IF=0时,
CPU关中断,IF只能对可屏蔽中断产生影响,而对非屏蔽中断和内部中断无影响。
DF( Direction Flag) 方向标志在串处理指令中,用于控制串处理的方向。当 DF=0
时,SI,DI自动增量;当 DF=1时,SI,DI自动减量;
该指令由方向控制指令设置或清除。
TF( Trap Flag)(跟踪) 陷阱标志可由指令设置。当 TF=1时,表示以单步方式执行程序,即 CPU每执行完一条指令,就自动产生一次内部单步中断 〈 中断类型 1〉 (也称为陷阱),进入系统控制程序,利用此功能可跟踪指令的执行状况,
用于程序调试。
( 5)内部控制逻辑电路从指令对列缓冲器中取出指令,进行译码,产生各种控制信号,控制各种部件的工作。
负责与存储器,I/O端口传送数据,包括对存储器的读写数据操作,对 I/O端口的读写操作以及取指令操作,即 BIU管理在存储器中读写程序和数据的实际处理能力。 段寄存器指令指针寄存器地址加法器内部暂存器指令队列缓冲器
I/O控制逻辑(总线控制逻辑)
★
2.总线接口部件( EIU)
8086/8088CPU寻址空间为 1MB,地址范围为:
00000H~ FFFFFH,为了和 8位机在软件上保持兼容,
将 1MB空间分成 16段,每段最大为 64KB,每段的首地址必须能被 16整除 (即凡是能被 16整除的地址均可定义为段首地址 ),各段之间可以是连续、分开、部分重叠或完全重叠的。当段首地址确定后,段内的 16位地址称为偏移地址。由于 8086存储系统数据存储器和程序存储器是统一编址的,分段可以使他们隔离,互不相扰。
⑴ 段寄存器逻辑地址:程序中出现的地址是逻辑地址,是用符号地址表示的。逻辑地址包括段基址和偏移地址,CPU执行程序时,需要 将逻辑地址转换为物理地址,称为 地址重定位 。
物理地址:是指信息在存储器中实际有效的地址单元号,CPU访问内存是按物理地址寻址的。每一个物理地址是由段地址和段内偏移量组成。
物理地址=段基地址 × 16+偏移量物理地址和逻辑地址
1MB的存储空间可分为四种类型的段(代码段、
数据段、堆栈段、附加段),段基址分别存放在对应的段寄存器中。
CS 代码段寄存器保存当前执行程序所在段的段基址,CS中的数乘 16,再加上指令指针寄存器 IP中的内容,即是下一条将要取出指令的代码的地址。
CS=2000H,IP=2200H
物理地址= 2000H× 16+ 2200H=22200H
DS 数据段寄存器保存有数据段的段基址。数据段是用来保存当前程序中的操作数和变量。
SS 堆栈段寄存器保存有堆栈段的段基址,SS中的数据乘 16,加上堆栈指针寄存器 SP中的数形成栈顶地址。
ES 附加段寄存器进行字符串操作时,作为目的段地址使用,是一种附加的数据区,若要使用附加段,必须对 ES置初值。在附加段中,DI寄存器用于存放附加段的偏移量。
⑵ 指令指针寄存器 IP 16位寄存器用来存放将要取出指令的偏移地址,每执行一条指令,IP自动增量,其大小与已执行指令的字节长度有关。
程序以代码的形式存在于存储器中,每一条指令都有一个存放地址,IP总要指向下一条将要执行的指令地址。
⑶ 地址加法器用于产生 20位的物理地址。物理地址的获得方法:
将段寄存器中的内容左移 4位(或者乘以 16)与偏移地址(即对段首的偏移量)在地址加法器内相加,产生 20位的物理地址。
⑷ 指令队列缓冲器
8086有 6字节缓冲器,8088有 4字节缓冲器。在执行部件执行指令的同时,可以从内存中取出下一条或下几条指令放到缓冲器,一条指令执行完后,可立即译码执行下一条指令,从而解决了以往 CPU取指令期间,运算器的等待问题。由于取指令和执行指令并行进行,从而提高了 CPU的效率。
⑹ 内部暂存器用于内部数据的暂存,该部分对用户 透明,用户无权访问。
⑸ 输入 /出控制电路输入 /出控制电路控制 CPU与外部电路的数据交换。
8086有 20条地址线,16条数据线,由输入 /出控制电路控制分时复用的 CPU芯片的 16个引脚。
§ 3.2 8086微处理器的引脚功能
8086为 40引脚双列直插式封装,某些引脚具有双重功能,称为引脚复用。
分时复用:在同一个总线周期中不同的时钟周期内功能不同(马路跑车);
模式复用:根据工作模式的不同引脚定义不同。
8086引脚分配图
AD15~AD0 地址 /数据复用总线引脚,双向,分时复用构造总线必须加 锁存器,8088的高 8位不做复用,
地址引脚是单向的。
A16/S3~A19/S6地址 /状态复用引脚,单向,分时复用访问存储器时,在总线周期的 T1时刻,做高 4位地址,T2,T3,TW,T4状态时,用于输出状态信息。
访问 I/O端口时,输出均为低电平,8086最多可访问
64K个 I/O端口。
S6=0,8086/8088当前与总线相连
S5=1,允许可屏蔽中断
S5=0,禁止一切可屏蔽中断
S4 S3
0 0 ES
0 1 SS
1 0 CS
1 1 DS
NMI 非屏蔽中断,输入,上升沿有效当该引脚出现有效信号时,CPU执行完指令后,
立即响应中断,不受 IF影响,软件也屏蔽不掉,中断类型号是 2。
INTR 可屏蔽中断,输入,高电平有效
CPU在执行每一条指令的最后一个时钟周期采样该引脚,若为高电平(若 IF=1),则响应中断。
CLK 时钟,输入
CPU和总线控制的基准定时脉冲,一个时钟周期内具有 1/3有效高电平(即占空比 33%),其频率为
4MHz,5MHz,8 MHz,10 MHz等,CPU的所有操作都是在时钟同步下进行的。
RESET 复位信号,高电平有效
8086/8088要求复位信号至少维持 4个时钟周期的高电平,以完成 CPU内部寄存器的复位操作。复位后
CPU从 FFFF0H单元启动,在此处安排一条长转移指令,
使 CPU执行一条特定的启动程序,称为引导程序。系统复位后各寄存器的状态如下:
DT/R 数据发送 /接收控制,输出当数据总线需要双向驱动时,用来做方向控制 ;
当为高电平时,则进行数据发送,当为低电平则为数据接收。
DEN 数据允许,输出,低电平有效在最小模式下作为输出信号的输出端,有时数据总线需要加双向驱动器( 8286,74LS245)就用 DEN作为驱动器的选通信号,在每个存储器读、写,I/O读、
写或中断响应周期中,DEN都变为有效低电平。
RD 读信号、输出,低电平有效当 CPU执行存储器或 I/O读操作指令时,RD 为低电平。
M/IO 存储器 /外设访问控制,输出当 M/IO为高电平时,表示 CPU访问存储器,若为低电平时,表示 CPU执行输入 /出 (IN\OUT)指令对外设进行访问。
WR 写信号、输出,低电平有效当 CPU执行存储器或 I/O写操作指令时,WR为低电平。
HLDA 总线请求回答信号,输出,高电平有效
HLDA=1,表示 CPU同意让出总线。
HOLD 请求占用总线,输入,高电平有效当系统中其它模块或部件需要占用总线时,向
CPU发出申请。
在 DMA(直接存储器存取)工作方式时,DMA控制器( DMAC)向 CPU发出请求占用总线信号
( HOLD=1),希望 CPU让出对总线的控制权。 CPU
接到该请求后,在执行完当前操作后,通知 DMAC可以使用总线,此时总线均为高阻状态,CPU不再拥有总线控制权,只能进入等待。当 HOLD变为低电平时,表示 DMAC占用总线结束,CPU也将 HLDA变为低电平,
CPU可重新获得总线控制权。
磁盘的存取就属于 DMA方式。
READY,准备好”信号,输入,高电平有效用来使 CPU和慢速的存储器(或 I/O设备 )之间的速度匹配,当被访问的设备、数据没有准备好之前,
该信号为低电平使 CPU自动插入等待状态 TW来延长总线周期,当数据或设备准备好时,该信号为高电平,CPU继续执行该总线周期。为避免失误设备送来的 READY信号,必须先经过时钟发生器 8284,
与时钟 CLK同步后,再送入 CPU的 READY引脚。
TEST,测试信号,输入,低电平有效当执行 WAIT指令时,每隔 5个时钟周期,
CPU就对该引脚采样,若为高电平,就使 CPU重复执行 WAIT指令而处于等待状态,直到变为低电平,CPU脱离等待继续执行下一条指令。该引脚与 WAIT配合,可以实现 CPU与外设同步工作。
INTA:中断响应、输出、低电平有效。
CPU响应外部中断请求后,发给请求中断请求设备的回答信号,在每个中断周期的 T2,T3和 TW期间,它变为低电平。一般发送两个负脉冲信号,第一个通知外设,它发生的中断请求已被响应,第二个通知中断源送出中断矢量码(即读取矢量码的选通信号)
ALE 地址锁存允许信号、输出、高电平有效在总线周期 T1期间,ALE的下降沿将出现在
AD15~ AD0总线上的地址信息锁在锁存器的输出端,并保持到数据的输入 /输出完成。 ALE不能浮空。
MN/MX 最小 /最大模式控制信号,该引脚固定接到 +5V电源时,CPU处于最小工作模式,如果接地,CPU处于最大工作模式。
BHE/S7 高 8位数据总线允许 /状态复用引脚,输出在总线周期的 T1时刻,输出低电平,表示总线高 8位 AD15~ AD8上的数据有效。在 T2~ T4期间,
输出 S7状态( S7在当前的 8086芯片中未被定义),
BHE与地址线 A0组合,可对存储器读写时的数据格式实现控制。
LOCK 封锁信号,低电平有效,输出。
当 LOCK为低电平时,就封锁了总线,其它设备不能获得总线控制权的机会,它的状态可由指令设置,如果 CPU执行一条加有 LOCK前缀的指令(例 LOCK XCHG AX,SEM)则在指令执行过程中 LOCK引脚一直输出低电平,直到加前缀的指令执行完毕。使用此功能,可以防止某条指令在执行过程中被打断,在 DMA期间,LOCK
被置为高阻状态。
计算机是在时钟控制下进行工作的,若干个时钟完成一个基本操作,一个基本操作就是一个总线周期,
CPU有若干种典型操作,构成相应的总线周期。如存储器的读写总线周期,I/O读写总线周期等。执行一条指令的时间称为指令周期,指令周期是由若干总线周期构成。 8086/8088的基本总线周期是由 4个时钟周期组成,在执行 WAIT指令或 READY引脚输入的状态为低电平时,都需要在 T3和 T4之间插入 1个或若干个等待时钟周期 Tw。
1,8086微处理器的总线周期
§ 3.3 8086CPU的工作时序
T1状态,CPU向多路复用总线上发送地址信息,指出要寻址的内存单元地址或 I/O端口地址。这期间 CPU
还要送出 ALE(正向脉冲),在 ALE下降沿将内存单元地址或 I/O端口地址打入地址锁存器。
T2状态,CPU从总线上撤销有效地址,使地址总线低 16位呈高阻状态,为数据传输做准备。总线的高 4位
( A19~ A16)输出总线周期的状态信息,用于表示中断允许状态及正在使用的段寄存器名。
T3状态,A19~ A16上的状态信息不变,地址总线低 16
位上出现 CPU要写出的或准备读入的数据。若外设与内存来不及与总线交换数据,则应通过 CPU的 READY信号,
在 T3前沿向 CPU申请插入等待状态 TW,在 T3及 TW前沿查询 READY信号,查到高电平则结束等待状态,进入下一状态,否则继续插入等待。
T4状态:总线周期结束在一个总线周期之后,若不立即进入下一个总线周期,即 CPU不与内存或外设交换数据或者指令队列已满,系统总线处于空闲状态,CPU执行总线空闲周期,总线空闲周期一般由一个或多个时钟周期组成。
2.8086CPU的两种工作模式最小工作模式(单 CPU系统)
最大工作模式(多 CPU系统)
8086最小工作模式结构图当 8086CPU的 MN/MX引脚接到+ 5V时,就处于最小工作模式 。
时钟发生器( 8286)
石英晶体振荡器 (晶振) 6MHz,8MHz,10MHz等时钟发生器产生系统需要的时钟信号 CLK,同时对外部 READY信号和系统复位信号 RESET进行同步,输出送向相应的 8086引脚,保证 READY信号能够出现在总线周期的 T3时刻。
(1) 最小工作模式下的操作时序地址锁存信号要一直有效,8282输出允许端 OE要接地(低电平有效),在 T1状态,CPU输出地址锁存允许信号 ALE,将 ALE接向 8282的选通输入端 STB,
当 ALE=1时,8282输出跟随输入变化,用 ALE的下降沿将总线上的已稳定的信号锁入 8282。
地址锁存器( 8282/74LS373)
用于 20位地址和 BHE信号锁存,使得整个总线周期地址信号始终有效,以支持 8086CPU地址 /数据总线分时复用的工作方式。一片 8282只能锁存 8位的地址,所以至少要 3片才能完整的锁存 20位的地址。
总线收发器
8286 当系统中所连的存储器或外设较多时,需要增加数据总线的驱动能力,可以接总线驱动芯片 8286
一片 8286只能驱动 8位数据线,需 2片。 OE端为输出使能端低电平有效,当 OE=1时,控制门关,8286两端均处于高阻状,该信号由 DEN控制。数据传送方向受 T端控制,当 T=1时,数据传送方向 A→B,当
T=0时,数据从 B →A 。
BHE和 A0作为基地址存储体和偶地址存储体的选通信号地址锁存允许信号有效时,从 ALE输出一个正脉冲,在其下降沿将地址锁存。
T1状态:在指令执行过程中,执行部件可能需要从内存或外设端口读取数据而进入总线读周期,
在进入总线读周期之前,即 T1前沿之前,M/IO信号应该有效。若要读内存则 M/IO上升为高电平,若要读 I/O端口,则 M/IO降为低电平。 CPU读取的数据单元或 I/O端口地址是 20位的。地址信号是通过多路复用总线输出的,高 4位地址通过地址 /状态线 A16/S3~
A19/S6送出,低 16位通过地址 /数据总线 AD15~AD0
送出。
BHE有效时,高 8位数据线上的信息可以使用,BHE信号常用作奇地址存储体的体选信号,配合地址信号 A19~A1,
实现奇地址存储器寻址,所以 BHE信号和地址信号一起由
ALE信号锁入到地址锁存器之中,当系统中接有总线缓冲器时数据传输方向控制信号 DT/R应降为低电平,说明现在为总线读。
T2状态:地址信号消失,地址数据复用总线进入高阻状态。
为总线读操作做准备,A19~A1及 BHE线上输出 S7~S3(在
8086系统没用)。
DEN信号降为低电平,使数据线缓冲使能。
RD信号有效,该信号送到内存或 I/O端口,使他们将选中的数据送上数据线。
读存储器的总线周期时序写存储器的总线周期时序
8086最大工作模式结构图
§ 3.4 8086的存储系统