1.3k likes | 1.61k Views
本章内容 2.18086 微处理器 Intel X86 系列微处理器 8086微处理器的编程结构 8086的引脚信号与工作模式 8086的操作和时序 8086的中断系统 8086的存储器组织和 IO 组织. 第 2 章 8086微处理器. 取指令, IP 值加 1. Y. 停机?. N. 译码并执行. 结束. 微处理器 性能指标 主要有 2 项: 1. 字长: 指 CPU 能同时处理的数据位数 如: 8086 为 16 位字长, 80386 为 32 位字长 2. 主频: 即 CPU 时钟频率,主频越高,速度越快
E N D
本章内容 • 2.18086微处理器 • Intel X86系列微处理器 • 8086微处理器的编程结构 • 8086的引脚信号与工作模式 • 8086的操作和时序 • 8086的中断系统 • 8086的存储器组织和IO组织 第2章 8086微处理器
取指令,IP值加1 Y 停机? N 译码并执行 结束 • 微处理器性能指标主要有2项: 1. 字长:指CPU能同时处理的数据位数 • 如:8086为16位字长,80386为32位字长 2. 主频:即CPU时钟频率,主频越高,速度越快 • 如:8086为5MHz,80386为16MHz,Pentium IV可达3GHz • 指令执行过程 • 取指令 指令译码 指令执行 • 微型计算机的工作过程, • 也就是不断地取指令、译码 • 和执行的过程,直到遇到停机 • 指令时才结束机器的运行。 • 流水线的概念
Intel X86系列微处理器 • 8080 • 8085 • 8086 • 80186(嵌入式版本) • 80286 • 80386,80486,pentium, pentiumII, pentiumIII, pentiumIV • P2,P3,P4…
2.1.1 8086微处理器的编程结构 • 简介 • 地址线:20 • 数据线:16 • 时钟:5,10,8MHz • 关于8088
8086编程结构图 两个组成部分 总线接口单元 执行单元
总线接口部件(BIU)组成 • 4个16位段寄存器CS,DS,SS,ES; • 16位指令偏移地址寄存器IP; • 6个字节指令队列ISQ; • 形成20位物理地址的加法器∑; • 与EU通讯的内部寄存器; • 总线控制逻辑;
总线接口部件(BIU)功能 • 指令队列中出现两个字节为空时自动按CS值和IP值组成20位实际地址到存储器中去取指令,一次取两个字节指令存放到指令队列中; • 由EU从指令队列中取走指令,并根据EU请求BIU将20位操作地址传送给存储器; • 取来操作数经总线控制逻辑传送到内部EU数据总线,由EU完成内部操作; • 操作结果若EU提出请求,则由BIU负责产生20位实际目标地址,将结果写入存储器里;
由逻辑地址获得物理地址的计算公式: • 物理地址=段基值X16+偏移量
举例 段寄存器 XXXX 偏移量 YYYY 例如:CS=FE00H, IP=0200H 指令的物理地址:FE200H
执行单元EU组成 • ALU(算术逻辑单元); • 通用寄存器组 AX,BX,CX,DX; • BP(基址指针寄存器) • SP(堆栈指针寄存器) • SI(源变址寄存器) • DI(目的变址寄存器) • 标志寄存器FR • 执行部件控制电路 • 功能:负责执行指令
EU功能 • 取指令-从BIU指令队列中读取指令; • 分析指令-由EU控制电路对指令进行译码分析,指出操作性质及对象; • 执行指令 • 在EU中计算出操作数的16位地址偏移量送给BIU,由BIU的∑形成20位绝对地址; • 将取来的操作数经系统数据总线送ALU进行指定操作; • 运算结果经内部总线送到指定位置;
8086的寄存器 • 在8086/8088CPU中,把寄存器分成5大类: • 数据寄存器; • 地址指针寄存器; • 段基址寄存器; • 状态标志寄存器; • 指令指针寄存器;
(一)数据寄存器 • 用来存放操作数及中间结果的通用寄存器称为数据寄存器。 • 16位寄存器:AX,BX,CX,DX • 8位寄存器:AH,AL,BH,BL,CH,CL,DH,DL • 寄存器有特殊功能:AX和AL为累加器,BX和BP可以作为基址指针,CX做计数器,DX存放输入输出端口地址
(二)地址指针寄存器(SP BP SI DI) • 地址指针寄存器用于存放操作数的地址,编程时通过修改寄存器的内容达到修改地址的目的。 • 可以用来指示地址的寄存器有: • SP:堆栈指针,指示堆栈段(关于段SS)中的栈顶位置,专门用于数据进栈和出栈的位置指示; • BP:基址指针,指示堆栈段中一个数据区中的基址位置; • 此外:BX,SI,DI也可以用做指示地址。 • SI:源指针 • DI:目的指针
堆栈的概念-后进先出 • 后进先出(先进后出) • 队列(先进先出) • PUSH • SP-2 • BYTE(L)在低地址 • BYTE(H)在高地址 • POP • 弹出一个字 • SP+2 SP
(三)段地址寄存器(CS DS SS ES) 段基址寄存器用于存放4个当前段的起始地址。4个段为:代码段CS,数据段DS,堆栈段SS和附加段ES。 1、存储器的段 8086/8088CPU对可寻址的1MB空间划分为很多个逻辑段,每个逻辑小于64KB,段内地址是连续的。 CPU规定4个段寄存器存放当前可寻址的段基址。 • CS指示当前的代码段; • DS指示当前的数据段; • SS指示当前的堆栈段; • ES指示当前的附加段; 2、逻辑地址与实际地址 (1)对存储器的任一位置的访问都是在该位置所在的段基址下进行的。 逻辑地址形式为: 段基址:段内位移 (物理地址)20 =(段基址)╳16+(段内偏移) 如访问一个地址C85F:109A对应的实际地址为C85F0+109A=C968AH (2)同一个实际地址可以采取不同的逻辑地址形式表示,即不同段可以相互重叠。 例如:地址12345H可以表示为1200:0345或1230:0045
进位标志 方向标志 控制标志 奇偶标志 中断标志 半进位标志 跟踪标志 零标志 Trace Flag 符号标志 溢出标志 标志寄存器 • 标志寄存器的格式及各位的含义 状态标志
状态标志 • 1.零标志ZF(Zero Flag):若运算结果为0,则ZF=1;否则ZF=0。 • 例1:MOV AL,4 • SUB AL,4 • 例2:XOR AX,AX • 执行后,ZF也一定为1。
2.进位标志CF(Carry Flag): 它反映: • 加法时,最高位(字节操作时的D7位,字操作时的D15位)是否有进位产生。 • 减法时,最高位(字节操作时的D7位,字操作时的D15位)是否有借位产生。 例1: 例2: MOV AL,3; MOV AL,92H SUB AL,4; ADD AL,0A0H 执行后,CF=1。
3.奇偶标志PF(Parity Flag):若运算结果低8位中“1”的个数为偶数,则PF=1;否则PF=0。 例:MOV AL,2 ADD AL,1 执行后,PF位为1。
4.辅助进位标志AF(Auxiliary carrry Flag): • 也称“半进位标志”,它反映: • 加法时,第3位向第4位有进位; • 减法时,第3位向第4位有借位。 • FEDC BA98 7654 3210 • FEDC BA98 7654 3210
5.溢出标志OF(Overflow Flag):若运算过程中发生了“溢出”,则OF=1。 • 定义:运算结果超出计算装置所能表示的范围,称为溢出。 • 判断: • 次高位向最高位产生了进位,而最高位没有向前产生进位。(正溢) • 次高位没有产生进位,而最高位产生进位。(负溢)
溢出=Saf *. Sbf *. Sf + Saf . Sbf . Sf* • X=1110 y=1011 • 补码:1010 1101 • 1010 • 1101 • 10111 溢q • 出(负溢) X=0111 y=0101 0111 0101 1100 溢出(正溢)
关于状态标志(1) • 0010 0011 0100 0101 • 0011 0010 0001 1001 (+ • 0101 0101 0101 1110 • mov ax,2345h • add ax,3219h • SF=0, ZF=0, PF=0, CF=0, AF=0, OF=0 • NV UP EI PL NZ NA PO NC
关于状态标志(2) • 0101 0100 0011 1001 • 0100 0101 0110 1010 (+ • 1001 1001 1010 0011 • mov ax,5439h • add ax,456ah • SF=1, ZF=0, PF=1, CF=0, AF=1, OF=1 • OV UP EI NG NZ AC PE NC
控制标志 • (1)DF:方向标志位 • DF=1串操作指令以递减顺序处理数据串;DF=0以递增顺序处理数据串。 • (2)IF:中断允许位 • 若IF=1,CPU允许接受外部可屏蔽中断请求,即开中断;IF=0关中断 • (3)TF:跟踪标志位 • TF=1处理器处于单步工作方式,每执行完一条指令产生一个软件中断;TF=0正常工作。
关于方向标志 H E L L O • 用途:串操作指令使用 X X X X X MOV SI, 0400H MOV DI, 0E2DH MOV CX, 0005H CLD REP MOVSB
关于中断标志 • IF=1:CPU可以响应中断 • IF=0:CPU不响应中断 STI 使IF置“1”,即开放中断。 CLI 使IF清“0”,即关闭中断 • 注:只对可屏蔽中断有效
8086编程结构小结 • (1)传统的CPU执行指令的过程是:取指令->分析指令-〉执行指令->再取指令->……,串行执行。 • 8086是把“取指令”和“执行指令”分别由BIU和EU两个部件来完成。当EU正在执行指令时,BIU可以从内存中取出指令字节,放在指令队列中。这样,使得“取指令”和“执行指令”的操作在时间上是并行的。 • BIU和EU协调配合,使EU可以连续不停一条接一条地执行事先已进入指令队列中地指令。显然,这种工作方式可以加快程序地执行,提高了CPU地效率。体现了“流水线计算机”(PipeLine Computer)的初步特点。 • (2)地址加法器用来产生20位的物理地址。 • 一个存储单元具有两种地址属性:物理地址和逻辑地址。 • 物理地址:CPU访问存储器时,在地址总线上实际送出的地址。它的范围(如8086系统)是00000H~FFFFFH,即有220=1M字节的地址空间。
2.1.28086引脚与工作模式 • 最小模式 • 当8086的引脚MN/MX*接成高电平时CPU处于最小模式工作方式,此时系统中仅有一个处理器。总线控制逻辑减到最少,故称最小模式。 最大模式 • 当8086的引脚MN/MX*接成低电平时CPU处于最大模式工作方式,此时系统可有多个处理器。 • 最大模式,也称“多处理器系统”,即系统中包含两个或多个处理器,其中一个为主处理器(8086),其他的处理器为“协处理器”(CO-Processor) • 通常,和8086配合使用的协处理器有两个:一个是数值运算协处理器8087,一个是输入/输出协处理器8089。
引脚功能 1)公共引脚 2)最小模式引脚 3)最大模式引脚 功能复用
1)公共引脚 (1)VCC, GND (2)AD0~AD15:地址数据复用总线 • 双向,三态,高电平有效。分时传送16位数据和地址的低16位。由ALE锁存地址信息。 • 8086/8088不同
(3)A16/S3~A19/S6:地址/状态复用引脚 • 输出,三态,高电平有效。分时输出地址的高4位或CPU当前状态。地址信息由ALE锁存。 • T1状态:输出地址高4位 • T2~T4输出状态 • S6=0:8086连到总线上 • S5=1 当前允许中断 • S4 S3(当前使用的段) • 00 ES • 01 SS • 10 CS • 11 DS
公共信号 • (4)BHE*/S7:高8位数据总线允许/状态复用引脚 • 输出,三态,低电平有效。BHE*为低电平表示高8位数据线D15~D8上数据有效。BHE*由ALE锁存。BHE*和A0可用于分别选中奇偶地址。 • BHE* A0 • 0 0 AD15-1D0 • 1 0 AD7-AD0 • 0 1 AD15-AD8 • 0 1, AD15-AD8 • 1 0 AD7-AD0 访问偶地址的字 访问偶地址的字节 访问奇地址的字节 访问奇地址的字
8086的字地址/字节地址 D8-D15 D0-D7 • 寻址字节时0,1,2,3,4… • 寻址字时0,2,4,6… 偶数字节地址是字地址 BHE* A0 0 0 AD15-AD0 1 0 AD7- AD0 0 1 AD15-AD8 0 1, AD15-AD8 1 0 AD7-AD0 奇数地址 偶数地址
D7-D0 D15-D8 D15-D8奇 体SEL A18-A0 D7-D0偶 体SEL A18-A0 BHE A0 A19 -A1 8086系统中的存储器采用奇、偶分体结构: • 将1M字节的存储空间分成两个512K的存储体,一个叫奇体,一个叫偶体。 BHE* A0 • 0 0 AD15-AD0 • 1 0 AD7-AD0 • 0 1 AD15-AD8 • 0 1, AD15-AD8 • 1 0 AD7-AD0 下面的情况BHE*=? MOV AL,(1H) ; (1H) to AL MOV AL,(2H); (2H) to AL MOV AX,(0H); (0H) to AL, (1H) to AH;需要一个总线周期 MOV AX,(1H); (1H) to AL, (2H) to AH;需要两个总线周期
8088的存储器(与8086不同) 存储体 (1Mbyte) D0-D7 A0-A19
公共信号 (5)NMI (Non-Maskable Interrupt request):非屏蔽中断请求信号,输入,正跳变有效。“不受IF的影响”。 (6)INTR可屏蔽(Maskable)中断请求信号,输入,高电平有效。 (7)RD*读信号,输出,三态,低电平有效。 (8)CLK时钟信号(单相,占空比为1/3) • 8086 5MHZ • 8086-1 10MHZ • 8086-2 8MHZ (9)RESET复位信号 • 输入,高电平有效。使CPU停止现行操作,并进行初始化: • 标志寄存器,IP,DS,SS,ES及指令队列清零; • CS设置为FFFFH。复位结束时CPU从FFFF0H开始执行程序;
(10)公共信号-READY 8086 Memory 或I/O BUS READY Ready
T1 T2 T3 Tw T4 CLK READY • READY • 输入,高电平有效。高电平表示存储器或I/O口已准备好接收数据,外部使READY为低电平CPU要插入等待周期。
(11)公共信号-test 8086 TEST +5V BUSY 8087 *8087—Math. CO-Processor • TEST:测试信号,输入,低电平有效。 • 在多处理器环境中,例如具有协处理器8087的系统中,将8087的“BUSY”接至主处理器8086的TEST,每当8086执行WAIT指令时,反复采样TEST信号,直至TEST变为低电平,8086才脱离等待状态,继续执行下一条指令。 • TEST信号是为WAIT指令而设计的。 … … WAIT … …
(12)公共信号-MN/MX* • MN/MX* • =1最小模式 • 系统中只有一个处理器;MN/MX* 为高电平 • =0最大模式 • 系统中包括两个或多个处理器; MN/MX* 为低电平 • PC机工作于哪种模式?
2) 最小模式引脚信号 (1)INTA*中断响应信号 • 输出,低电平有效。表示外设的中断申请得到响应。
关于中断信号功能 外部设备 8086 INTR INTA* 可屏蔽中断INTR, INTA*
(2)ALE • ALE(Address latch Enable):地址锁存允许信号,输出,高电平有效。 由于8086/8088的一部分地址线和数据线采用分时复用。在一个总线周期内总线上先传送地址,接着传送数据。但在一般情况下,存储器或I/O接口电路,要求在整个总线周期内保持稳定的地址信息。这样,就需要将这些地址信息保存起来。
关于ALE的使用 DB CPU 锁存器 8282/ 74xx373 AB 利用ALE信号分离出地址总线和数据总线 ALE
(3)DEN*(Data Enable):数据允许,输出,三态,低电平有效。作为总线收发器(8286/8287—数据总线驱动器)的控制信号。 • (4)DT/R*(Data Transmit/Receive):数据发送/接收控制,输出,三态。 • Intel 8286 /8287 8位双向总线驱动器。
CPU MEMORY 数据总线 驱动器 8286 DB DB DEN* DT/R* DEN* 、DT/R*信号的使用