第二章 8086微处理器
微处理器的基本结构 8086微处理器的主要特性和内部结构 8086CPU的工作模式和引脚信号 8086的存储器管理 8086的总线操作和时序
微处理器(Microprocessor)是一种采用大规模(LSI)或超大规模集成电路(VISI)技术的半导体芯片,集成了计算机的主要部件:控制器、运算器和寄存器组。微处理器又被称为中央处理器(Central Processing Unit),字长16位、即一次能处理16位数据的称16位CPU,如Intel8086CPU。 CPU是微型计算机的核心部件,其性能和特点基本上决定了微型计算机的性能。因此,了解CPU的组成结构、引脚功能、操作时序等是学习微机原理与接口技术,进行微机应用系统开发设计的基础。
§2.1 微处理器的基本结构 一、微处理器的结构框图
1. ALU (Arithmatic Logic Unit) 各部分的功能: 1. ALU (Arithmatic Logic Unit) 算术逻辑单元,是计算机中的运算部件,执行算术运算,逻辑运算及移位操作等。 2. 累加器 运算中的专用寄存器,存放操作数和运算结果。
3. 通用寄存器组 4. 标志寄存器FR 存放数据和地址。 反映指令执行时的状态标志信号,如进位标志C、零标志Z、符号标志S、奇偶标志P、溢出标志O等。
5. 程序计数器PC (Program Counter) 又称指令指针寄存器IP(Instruction Pointer), 指向下一条要执行的指令所在存储单位的地址。取出指令后,PC自动加1。 6. 堆栈指针SP (Stack Pointer) 堆栈操作时,栈顶在内存中的具体位置。
7. 变址寄存器 8. 数据总线缓冲器DR 用于变址寻址时存放存储器的地址,也可作通用寄存器使用。 寄存从MEMORY中读出或要写入的数据或指令。
9. 地址总线缓冲器AR 存放指令的地址或操作数地址。 10. 指令寄存器IR 存放从MEMORY中取出的将要被执行的指令。
11. 指令译码器ID 12. 时序和控制逻辑 对IR中的指令译码,确定要执行的操作。
二、程序执行过程举例 1. 查指令系统,编写程序: 以7+10=? 为例,说明程序执行过程。 MOV AL,7 ; 7 AL B0H 07H ADD AL,10;10+AL AL 04 H 0AH HLT ;处理器暂停 F4H
2. 汇编源程序 3. 机器码放入存储器 地址 00H B0H MOV AL,07H 01H 07H 02H 04H ADD AL,10 0AH F4H 00H 01H 02H 03H 05H MOV AL,07H ADD AL,10 HLT
4. 机器的执行过程 取指令 执行指令
(1) 第一条指令 (MOV AL, 07H) 的取指过程: PC的值(00H) AR PC+1 PC (PC = 01H) AR中的内容(00H) AB MEMORY,译码选中00H存储单元。 CPU发出“ 存储器读”信号 (00H) = B0H DB DR IR ID
(2) ID译码指令,确定操作(07H AL),执行指令。 PC的值(01H) AR PC+1 PC (PC = 02H) AR中的内容(01H) AB MEMORY,译码选中01H存储单元 CPU发出“ 存储器读”信号 (01H) = 07H DB DR AL
三、指令执行过程小结 1.取指令 (1) 程序计数器PC将指令地址经地址缓冲器送到微处理外部地址总线,然后送到存储器进行地址译码。 (2) 访问存储器某一单元,同时CPU向存储器发“存储器读”控制信号(且PC←PC+1)。
(3) 经过几百ns,在外部数据总线上出现指令的第一字节,即操作码,它经由CPU内部数据缓冲器→内部总线→指令寄存器。 (4) 对于多字节指令,控制部件还会发出再去存储器取指令第二或第三字节的信号,每取一个字节,PC←PC+1。
2.指令译码 3.取操作数 经指令译码,如果需要取操作数,则CPU将给出操作数地址,再次访问存储器。
4.执行指令 5.存放运算结果 微处理器就是不断重复以上过程,逐条执行指令。
§2.2 8086 微处理器的 主要特性和内部结构 2.2.1 8086 的主要特性 8086微处理器是美国Intel公司1978年推出的一种高性能的16位微处理器。 8086CPU采用高速运算性能的HMOS工艺制造,内含29000多个晶体管,封装在标准的40引脚双列直插式塑封管壳内,采用单个+5V电源供电。
主要特性有: 1、数据线:16位 2、地址线:20位,其中低16位与数据总线复用。 3、内存空间:20位地址线可直接寻址1MB存储空间。 4、端口地址:16位端口地址线可寻址64K个I/O端口。 5、寻址方式:7种基本寻址方式提供了灵活的操作数存取方法。
6、指令系统:99条基本指令系统,除能完成数据传送、算术运算、逻辑运算、控制转移和处理器控制功能外,内部还设有硬件乘法指令及串处理指令电路,可以对位、字节、字节串、字串、压缩和非压缩BCD码等多种数据类型进行处理。 7、时钟频率:8086标准主频为5MHZ,8086-2主频为8 MHZ。 8、中断功能:可处理内部软件中断和外部硬件中断,中断源多达256个。 9、工作模式:支持单处理器、多处理器系统工作。 10、兼容性:与8080、8085在源程序一级兼容。
2.2.2 8086 的功能结构
1. 执行部件EU (Execution Unit) 从功能结构看,分两部分: 1. 执行部件EU (Execution Unit) 2. 总线接口部件BIU (Bus Interface Unit)
一、执行部件EU 1. EU的功能: 负责指令的执令。译码指令并利用内部寄存器和ALU来处理数据。
2. 结构组成 四个通用寄存器AX,BX,CX,DX。 四个专用寄存器: 基数指针寄存器BP,堆栈指针寄存器SP, 源变址寄存器SI,目的变址寄存器DI。 标志寄存器FR。 算术逻辑单元ALU。
3. 8086 CPU中EU的特点 四个通用寄存器AX,BX,CX,DX可以作为 16位寄存器使用,也可以分别作为 两个8位寄存器使用。 AH AL BH BL CH CL DH DL
AX又称累加器,指令系统中许多指令都是利用AX来实现的。 FR共有16位,其中7位未用,各位的定义如下: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 OF DF IF TF SF ZF AF PF CF 图3.3 标志寄存器 状态标志(6个) 根据功能,有两类标志 控制标志(3个)
表2.1 8086 CPU 标志位情况 名 称 符 号 功能 与运算结果的最高位相同,当数据用补码表示时,负数的最高位为1,所以符号标志表示运算执行后的结果是正还是负 符号标志 SF 零标志 ZF 当前的运算结果为零,当前的运算结果为非零 奇偶标志 PF 运算结果所含的1的个数为偶数 当执行一个加法运算使最高位产生进位时,或者执行一个减法运算引起最高位产生借位时,此外,循环指令也影响这一标志 进位标志 CF 辅助 进位标志 加法运算时,如果第3位往第4位有进位;减法运算时,如果第3位往第4位有借位。辅助进位标志一般在BCD码运算中作为是否进行十进制调整的判断依据 AF 运算过程中产生溢出时,所谓溢出,是指当字节运算的结果超出了范围 128~ +127,或者当字运算的结果超出了范围 32768~ +32767时称为溢出 溢出标志 OF 控制串操作指令用的标志。 DF=0, 串操作过程中的地址会不断增值;DF=1, 串操作过程中的地址会不断减值 方向标志 DF 控制可屏蔽中断的标志。 IF=0, CPU不能对可屏蔽中断请求作出响应; IF=1, CPU可以接受可屏蔽中断请求 中断标志 IF 跟踪标志 TF CPU按跟踪方式执行指令
例1:执行以下两数的加法操作,判断各标志位的状态。 执行以上操作后,各状态标志位的状态应是: CF=0,PF=0,AF=0,ZF=0,SF=0,OF=0
例2:执行加法操作。 各状态标志位的状态应是: CF=1,PF=1,AF=0,ZF=0,SF=1,OF=0
例3:执行加法操作。 执行以上加法操作后,各状态标志位的状态应是: CF=0,PF=0,AF=0,ZF=0,SF=1,OF=1
二、总线接口部件BIU 1. BIU的功能: 负责与存储器、I/O接口电路传送信息。
2. BIU的组成 (1) 四个段地址寄存器 CS ––– 16位代码段寄存器 DS ––– 16位数据段寄存器 ES ––– 16位附加段寄存器 SS ––– 16位堆栈段寄存器
(2) IP ––– 16位指令指针寄存器 指向下一条要取出的指令。 (3) 20位地址加法器 16位内部寄存器提供的信息经地址加法器产生20位地址信息。
例:指令的物理地址 = CS 16 + IP 若CS = 1000H, IP = 3050H, 则 PA = 10000H + 3050H = 13050H
(4) 六字节的指令队列 取指令与执行指令并行工作,即在一条指令的执行过程中,可以取出下一条或多条指令,在指令队列中排队。
三、BIU和EU的并行工作 BIU 取指1 取指2 取指3 取指4 取数据 取指5 … EU 等待 执行1 执行2 执行3 执行4
§2.3 8086CPU的工作模式与引脚信号 2.3.1 8086 CPU的两种工作模式 根据不同的应用环境,8086可以工作在两种模式:最小模式和最大模式。
1. 最小模式 系统中只有8086一个微处理器,所有的总线控制信号均由8086产生,系统的总线控制信号被减至最少。
2. 最大模式 用于中规模或大型的8086系统中。 8086作为主微处理器以外,还有其它的微处理器协助工作。 8087:数值运算的协处理器。 8089:输入/输出 (I/O) 协处理器
2.3.2 8086 CPU 的引脚信号
1. 最小模模式的引脚信号 (1) 地址/数据总线 AD15 ~ AD0 双向,三态。 地址 锁存器 STB AB DB AD15 ~ AD0 ALE
(2) 地址/状态信号线 A19 / S6 ~ A16 / S3 输出,三态。 在一个总线周期的T1,输出地址信号的最高4位,在其他的时钟周期,输出状态信号S6 ~ S3。 (1) S6为低,表示8086当前与总线相连 (2) S5 = IF。
3. S4、S3 的组合指出当前使用的段码寄存器情况 意义 当前正在使用ES附加段 1 当前正在使用SS堆栈段 1 当前正在使用CS或者未使用任何寄存器 1 1 当前正在使用DS数据段 同样,这4个引脚信号也要用外电路将地址信号锁存。
(3) BHE/S7 高8位数据总线允许/ 状态线 输出,三态。 在总线周期的T1,为BHE信号,表示高8位数据线D15 ~ D8 上的数据有效。 在其他的总线周期,为S7状态信号,8086 中 S7未作定义。
BHE和A0结合控制CPU与存储器之间数据传送的格式。 数据传送格式 同时传送高、低字节 (AD0 ~ AD15) 1 奇数地址的高位字节 (AD8 ~ AD15) 1 偶数地址的低位字节 (AD0 ~ AD7) 1 1 无效 以上1~3 为地址、数据总线信号,下面介绍引脚中的控制信号。
(4) MN/MX 最大/最小模式控制信号。 (5) RD 读信号 输出,三态,低电平有效。
(6) M/IO 存储器/输入输出控制信号 输出,三态。 RD与M/IO组合对应的操作 M/IO RD 操作 1 读存储器 读I/O端口
(7) WR 写信号 输出,三态,低电平有效。 WR与M/IO组合对应的操作 M/IO WR 操作 1 写存储器 写I/O端口
(8) ALE地址锁存允许信号 (9) READY准备好信号 输出,高有效。每一总线周期的T1有效。 输入,高有效。CPU访问存储器或外设时,READY有效,表示存储器或外设已准备好传送数据。
(10) INTR可屏蔽的中断请求信号 输入,高有效,表示外设向CPU提出中断申请,若FR中IF=1,CPU在当前指令后即响应。
(11) INTA中断响应信号 输出,三态,低电平有效。CPU响应INTR后,用INTA读取外设提供的中断类型号,以取得中断服务程序的入口地址。
(12) NMI非屏蔽中断请求信号 输入, 有效。不受FR中IF的影响,CPU在当前指令后响应。
(13) RESET系统复位信号 输入,高有效, 4T 复位重新启动后,第一条指令地址FFFF0H。 CPU中的部分 内容 标志位 清除 指令指针(IP) 0000H CS寄存器 FFFFH DS寄存器 SS寄存器 ES寄存器 指令队列 空 复位重新启动后,第一条指令地址FFFF0H。
(14) DT/R 数据收发控制信号 输出,三态,控制数据总线驱动器的数据传送方向。 82862 A OE T B AD0 ~ AD15 D0 ~ D15 DEN DT/R B DT/R = 1, 即T = 1,A B (CPU 内存或外设) DT/R = 0, 即T = 0,B A (内存或外设 CPU)
(15) DEN数据允许信号 输出,三态,低有效,控制CPU外接的数据收发器。
(16) HOLD总线保持请求信号 (17) HLDA总线保持响应信号 输入,高有效,表示其它的总线主设备申请对总线的控制权。 输出,高有效,表示CPU响应HOLD 信号,让出总线控制权。
(18) TEST测试信号 输入,低电平有效,与WAIT指令配合使用。 WAIT指令 TEST有效? 执行后续指令 Yes No
(19) CLK系统时钟输入信号 最大时钟频率为5MHZ,占空比1/3。 (20) GND地和VCC电源引脚 VCC:+5直流电源。
2. 最大模式下的引脚信号 在最大模式下,仅24~31引脚信号与最小模式不同,如表2-6所示。 表2-6 两种模式下8086的24~31引脚信号 引脚编号 最小模式 最大模式 24 25 26 27 28 29 30 31 QS1 QS2 ALE DT/ M HLDA HOLD RQ/GT1 RQ/GT0
输出。这两信号组合起来提供了8086内部指令队列的状态,以便外部对其动作进行跟踪。QS1和QS0编码和对应的队列状态如表2-7所示。 1 1 空操作 取走指令的第一个字节 队列空 从队列里取出的字节是指令的后续字节
输出,三态。这三个状态信号组成的编码表示了当前总线周期是何种操作周期,如表2-8所示。 (2) 2, 1和 0总线周期状态信号 输出,三态。这三个状态信号组成的编码表示了当前总线周期是何种操作周期,如表2-8所示。 表2-8 2, 1和 0编码总线周期 总线周期 1 1 1 发中断响应信号 读I/O端口 写I/O端口 暂停 取指令 读存储器 写存储器 无源状态
当8086工作在最大模式时,必须连接总线控制器,如Intel8288。8288将利用以上状态信息产生最大模式下的存储器和I/O控制信号。
(3) 总线封锁信号 输出,三态、低电平有效。当此信号为低电平有效时,系统中其他总线主部件不能占有总线。此信号由前缀指令LOCK使其有效,并一直保持到LOCK前缀后面的一条指令执行完毕。另外,在8086的两个中断响应脉冲之间, 信号也自动变为有效电平,以防其他总线主部件在中断响应过程中占有总线,使一个完整的中断响应过程被间断。
(4) 和 总线请求/允许信号 双向。这两个信号可供CPU以外的两个处理器用以发出使用总线的请求信号和接收CPU对总线请求信号的应答信号,总线请求信号和允许信号在同一引脚上传输,但方向相反。其中, 的优先级高于 。
2.4 8086 的存储器管理 2.4.1 存储器的分段和物理地址的形成
1.存储器的分段 8086可寻址空间为1M字节,对整个存储器空间寻址需要20位的地址码,而8086CPU内的所有寄存器都是16位,只能寻址64K字节,为了能对1M字节的存储器进行寻址,8086系统采用了巧妙的存储器分段技术,即将1M字节的存储器空间分成若干个逻辑段,每个段最长64K字节,段内地址是连续的,仍可采用16位寻址方法。逻辑段可在整个存储空间内浮动,段与段之间可以是连续的,也可以是分开的或重叠的(部分重叠或完全重叠),如图2-11所示。
2.物理地址的形成 物理地址:20位绝对地址 逻辑地址:段基址和段内偏移量。 物理地址 = 段基地址×16 + 偏移地址 其意思是:将段寄存器(CS,DS,SS或ES)中的内容向左移4位(相当于乘16),然后和偏移地址相加便得出20位物理地位。物理地址的计算是在CPU的总线接口部件BIU中的地址加法器中实现的。
例如:某指令在代码段中逻辑地址为:段首址CS=1000H,段内偏移地址IP=5F62H,则其物理地址为CS×16+IP=10000H+5F62H=15F62H,如图2-13所示。
显然,若该指令的段的基址为CS=1200H,而IP=3F62H,则20位的物理地址仍为15F62H。也就是说,同一个物理地址可以由不同的段地址和偏移地址组合得到。即指向同一物理地址的段地址和偏移地址不是唯一的。
3.逻辑地址的来源 8086CPU在运行程序过程中,访问存储器的操作类型是各种各样的,如取指令访问存储器,取操作数访问存储器等等。访问存储器的操作类型不同,总线接口部件BIU访问存储器时所使用逻辑地址的来源就不同,不同操作类型的逻辑地址的来源如表2-9所示。
表2-9 逻辑地址来源 堆栈操作 SS 无 SP SS×16+SP 操作类型 正常使用的(隐含)段基址 可替换段地址 偏移地址 物理地址计算 表2-9 逻辑地址来源 操作类型 正常使用的(隐含)段基址 可替换段地址 偏移地址 物理地址计算 取指令 CS 无 IP CS×16+IP 堆栈操作 SS 无 SP SS×16+SP BP间址 SS CS,DS,ES 有效地址EA SS×16+EA 存取变量 DS CS,ES,SS 有效地址EA DS×16+EA 源字符串 DS CS,ES,SS SI DS×16+SI 目标字符串 ES 无 DI ES×16+DI
图2-14所示为段寄存器与其他寄存器组合寻址存储单元的示意图。
2.4.2 8086系统中存储器的分体结构 在8086系统中,将总容量为1M字节的存储器分为两个存储体,即奇地址存储体和偶地址存储体,各为512K字节,如图2-15所示。
奇地址体与系统数据总线的高8位(AD15~AD8)相连,偶地址体与系统数据总线的低8位(AD7~AD0)相连。选择偶地址体还是奇地址体由体选信号BHE,A0(最低位地址线)决定。两个体与系统数据总线间的连接如图2-16所示。
表2-10 和A0的代码组合及对应的存取操作 通常,从偶地址开始的字称为规则字,读/写规则字只需一个总线周期;把从奇地址开始的字称为非规则字,读/写非规则字需要用二个总线周期,相对来说需要较长时间。所以,为了加快程序运行速度,编程时应注意从偶地址开始存放字数据。
2.4.3 8086系统的堆栈 堆栈是按照“ 后进先出”(Last in First out) 原则组织的一段特殊的内存区域。 堆栈由SP自动管理,SP始终指向当前的栈顶。 堆栈主要用于中断调用,子程序调用以及数据的暂时存储等。 堆栈有压入和弹出两种操作。 8086CPU的堆栈在压栈时,由上往下生长(堆栈指针减量修改)。
2.5 8086 的总线操作和时序 2.5.1 指令周期、总线周期和时钟周期 指令周期(Instruction Cycle):CPU执行一条指令所需要的时间。 总线周期(Bus Cycle):CPU与外部电路之间进行一次数据传送所需的时间。 时钟周期(Clock Cycle):控制CPU基本操作的时钟,是CPU处理动作的最小时间单位,又称T状态。
一个指令周期由一个或若干个总线周期组成,一个总线周期至少包含4个T状态。
2.5.2 8086的典型总线周期 一、典型总线周期的时序
8086CPU的一个基本总线周期由4个时钟周期(T1~T4)组成。时钟周期T也称为T状态,即T1状态、T2状态、T3状态和T4状态。CPU在每个时钟周期(状态)内完成若干基本操作,具体是:
T1状态:CPU向20位地址/状态(A19/S6~A16/S3),地址/数据(AD15~AD0)分时复用总线上发送读写存储器或I/O端口的地址。
T2状态:CPU从总线上撤消地址,若为读周期,则使低16位地址/数据总线(AD15~AD0)为高阻抗状态,以便CPU有足够的时间从输出地址方式转变为输入数据方式。若为写周期,则向低16位地址/数据总线(AD15~AD0)上送出写数据,准备进行写操作。由于输出地址和输出数据都是写总线过程,CPU不必要改输出为输入方式,因而不需要缓冲时间。T2状态总线的高4位(A19/S6~A16/S3)上输出本总线周期状态信息S6~S3。这些状态信息用来表示中断允许状态、当前正在使用的段寄存器等。
T3状态:CPU在总线的高4位(A19/S6~A16/S3)继续输出总线周期状态信号S6~S3。在总线的低16位(AD15~AD0)地址/数据线上继续发送要写的数据,或者从存储器或I/O端口读入数据。
TW等待状态:如果被选中的存储器或I/O设备不能及时配合CPU传送数据,则必须通知CPU数据“未准备好”,迫使CPU在T3状态后插入等待状态TW。“未准备好”信号必须在T3前送给CPU。TW状态的总线活动与T3周期的活动相同。当选中的存储器或I/O端口有足够的时间来完成读写操作时,就发出“准备好”(Ready)信号,迫使CPU脱离TW状态并继续工作。如果执行的总线周期是读周期,CPU则在T3或最后一个等待状态结束时读取数据。
T1空闲状态:如果在一个总线周期之后,不立即执行下一个总线周期,或者当指令队列是满的,执行部件EU又没有访问总线的要求,这时BIU就处于空闲状态。在空闲状态中,可以包含一个或几个时钟周期。在空闲状态,总线高4位(A19/S6~A16/S3)仍输出与前一总线周期相同的状态信号。如果前一个总线周期是写周期,则CPU在总线低16位(AD15~AD0)上继续驱动数据信息;如果前一个总线周期是读周期,则总线低16位(AD15~AD0)为高阻状态。
由上可知,正常情况下,8086CPU的一个基本总线周期由4个时钟周期(T1~T4)组成,但当所连接的存储器或I/O设备不能及时配合CPU进行数据的读写时,还要适当增加一个或几个等待状态。
二、学习时序的目的 1. 可以深入了解指令的执行过程。 2. 有利于编程时,选择合适的指令,以缩短程序的执行时间。 3. 有利于在CPU与存储器以及I/O端口连接时,实现时序上的配合。 4. 实时控制时,正确估算操作所需的时间,以便与控制过程配合。
2.5.3 8086CPU典型总线周期分析 一、8086的读总线周期 包括存储器的读周期和I/O端口的读周期。 图2-21 读总线周期 T1 图2-21 读总线周期 T1 T2 T3 T4 一个总线周期 CLK 地址输出 状态输出 A19/S6 ~ A16/S3 BHE/S7 数据输入 AD15 ~ AD0 ALE 低=I/O读,高=存储器读 M/IO RD DT/R DEN
如果在T3周期结束之前,存储器或外设未准备好数据传送,在T3和T4之间就会插入一个或多个TW等待周期,直到READY变高,转入T4周期,完成读操作。
二、8086的写总线周期 包括存储器的写周期和I/O端口的写周期。 图2-22 写总线周期 T1 T2 T3 T4 一个总线周期 CLK 地址输出 状态输出 A19/S6 ~ A16/S3 BHE/S7 数据输出 AD15 ~ AD0 ALE 低=I/O写,高=存储器写 M/IO WR DT/R DEN
三、8086进入和退出保持状态的时序 ~ CPU在每一个T状态的正向边沿采样HOLD信号,若有效,则在当前总线周期结束时响应。 图2-23 总线保持请求 / 响应时序 ~ T4或T1 CLK HOLD HLDA AD15 ~ AD0 A19/S6 ~ A16/S3 CPU在每一个T状态的正向边沿采样HOLD信号,若有效,则在当前总线周期结束时响应。
四、中断响应周期 CPU在每条指令的最后一个T状态,采样INTR信号,若有效,且IF=1,则CPU在当前指令执行完毕以后响应,进入中断响应周期。 图2-25 中断响应周期 ~ T1 T2 T3 T4 类型矢量 ALE AD0 ~ AD15 INTA DEN 浮空