1、本章主要知识点: 8086的内部组成、引脚功能和工作模式。 2. 8086的最小模式组成原理。 3. 8086微处理器的时序。 本章学习的重点: 1、8086的内部结构组成; 2、8086的四个段寄存器的作用,使用中的差异; 3、8086的通用寄存器的作用,使用中的差异; 4、8086各引脚的意义和功能; 5、8086存储体的组成特点和要求; 6、8085物理地址、偏移地址、段地址之间的关系; 7、8086的总线时序;学习注意事项:用红颜色表出的字均为重点理解和学习中的难点,希望同学们学习时注意!,第2章 8086微处理器,第一节 微型计算机的组成及工作原理,图 2.1 微型计算机的组成,2.
2、1.1 CPU的基本概念和组成微处理器(机)简称CPU,是用来实现运算和控制功能的部件,由运算器、 控制器和寄存器 3 部分组成。1) 运算器用于完成数据的算术和逻辑运算。 2) 寄存器用来暂存参加运算的操作数和运算结果。 3) 控制器由指令寄存器、指令译码器和控制电路组成。指令是一组二进制编码信息,主要包括两个内容: 告诉计算机进行什么操作; 指出操作数或操作数地址。 控制电路根据指令的要求向微型机各部件发出一系列相应的控制信息,使它们协调有序地工作。,2.2.2 存储器,1)存储器的作用: 图 2.1 中的存储器是指微型计算机的内存储器,用来存放程序、原始操作数、运算的中间结果数据和最终结
3、果数据。 2)程序的组成和格式: 程序是按解题顺序编排、用一系列指令表示的计算步骤。程序和数据在形式上均为二进制码,它们均以字节为单位存储在内存储器中,一个字节占用一个存储单元,并具有唯一的地址号。CPU可以对内存储器执行读/写两种操作。,CPU可以对内存储器执行读/写两种操作 3)读操作过程:读存储器操作是在控制部件发出的读命令控制下,将内存中某个存储单元的内容取出,送入CPU中某个寄存器; 4)写操作过程:写存储器操作是在控制部件发出的写命令控制下,将CPU中某寄存器内容传送到存储器的某个存储单元中。 注意:写操作执行后,存储单元内容被改变; 读操作执行后, 存储单元内容不变。,2.2.3
4、 输入/输出设备及其接口电路输入/输出(缩写为I/O)设备统称外部设备,是微型计算机的重要组成部分。输入设备的任务是将程序、原始数据及现场信息以计算机所能识别的形式送到计算机中,供计算机自动计算或处理用。 微型机中常用的输入设备包括键盘、鼠标器、 数字化仪、扫描仪、A/D转换器等。输出设备的任务是将计算机的计算和处理结果或回答信号以人能识别的各种形式表示出来。 微型机中常用的输出设备包括显示器、打印机、绘图仪、D/A转换器等。软磁盘、硬磁盘及其驱动器对微型机来说, 既是输入设备又是输出设备。只读激光盘(CD-ROM)及其驱动器属于微型机的输入设备。软磁盘、硬磁盘及光盘又统称为计算机的外存储器。
5、,第二节 8086/8088微处理器,2.3.1 8086微处理器结构 1、8086/8088微处理器系列概况 (1)从8080/8085到80868086是16微处理器,内部及对外有16位数据通路,8080/8085只有8位。8088是8位微处理器,但内部有16位数据通路,而对外为8位数据通路。8086/8088寻址空间1MB,8080/8085为64KB。8086有一个初级流水线结构,内部操作与对外操作具有并行性。,2、8086的内部结构组成:,8086的内部主要有以下两大部分组成: 1)总线接口部件 (BIU) 2)执行部件 (EU) 8086的内部结构组成如图2-2,8086的内部结构
6、,内部暂存器,IP,ES,SS,DS,CS,输入/输出控制电路,总线,执行部分控制电路,ALU,标志寄存器,AH AL,BH BL,CH CL,DH DL,SP,BP,SI,DI,通用 寄存器,地址加法器,指令队列,执行部件 (EU),总线接口部件 (BIU),16位,20位,8位,8位,图2-2 8086的内部结构组成,8086微处理器逻辑框图:分EU与BIU两部分:执行部件(EU):由ALU、通用寄存器组、状态寄存器及操作控制器电路组成。 总线接口部件(BIU):由专用寄存器、指令队列缓冲器、地址加法器等功能部件组成。形成对外总线,与存储器、I/O接口电路进行数据传输。,(1)总线接口部件
7、 (BIU),总线接口部件由下列各部分组成: 1)4个段地址寄存器;CS16位的代码段寄存器; DS16位的数据段寄存器; ES16位的扩展段寄存器; SS16位的堆栈段寄存器; 2)16位的指令指针寄存器IP; 3)20位的物理地址加法器; 4)6字节的指令队列缓冲器。,段寄存器:8086CPU的地址引脚有20条线,能提供20位的地址信息,可直接对1M个存储单元进行访问,但CPU内部可用来提供地址信息的寄存器都是16位的,那么如何用16位寄存器实现20位地址的寻址呢?8086/8088采用了段结构的内存管理的方法。 将指令代码和数据分别存储在代码段、数据段、堆栈段、附加数据段中,这些段的段地
8、址分别由段寄存器CS、DS、SS、ES提供,而代码或数据在段内的偏移地址则由有关寄存器或立即数给出。,8086/8088段寄存器的作用: (1)代码段寄存器CS:存储程序当前使用的代码段的段地址。 (2)数据段寄存器DS:存放程序当前使用的数据段的段地址。程序中所用到的原始数据、中间结果以及最终结果都可存放在数据段中。 (3)堆栈段寄存器SS:存放程序当前所使用的堆栈段的段地址。堆栈是在存储器中开辟的一个特定区域。 (4)附加数据段寄存器ES:存放程序当前使用的附加数据段的段地址。附加数据段通常用于存放字符串操作时的目的字符串。,段寄存器在使用中应注意: (1)在编写汇编语言源程序时,应按上述
9、规定将程序的各个部分放在规定的段内。 (2)每个源程序必须至少有一个代码段,而数据段、堆栈段和附加数据段则根据程序的需要决定是否设置。,执行部件的功能就是负责从指令队列取指令并执行。从内部结构图可见,执行部件由下列几个部分组成: 1)4个16位通用寄存器:即AX、BX、CX、DX,也可作为8个8位通用寄存器:即AH,AL、BH、BL、CH、CL、DH、DL 。 2)4个专用寄存器: SP、BP、DI、SI 。 3)标志寄存器FR 4)算术逻辑运算单元ALU,(2)执行部件EU,(3)“流水线”结构,总线接口部件BIU和执行部件EU并不是同步工作的,两者的动作管理遵循如下原则: 每当8086的指
10、令队列中有2个空字节,BIU就会自动把指令取到指令队列中。而同时EU从指令队列取出一条指令,并用几个时钟周期去分析、执行指令。当指令队列已满,而且EU对BIU又无总线访问请求时,BIU便进入空闲状态。在执行转移、调用和返回指令时,指令队列中的原有内容被自动清除。,8086的指令队列有6个字节,当指令队列出现2个空字节,BIU就自动执行一次取指令周期,将下一条要执行的指令从内存单元读入指令队列。它们采用“先进先出”原则,按顺序存放,并按顺序取到EU中去执行。,(4)指令队列缓冲器,8086流水操作示意图,图2-3 8086流水操作示意图,在t0t4时间间隔中,理想情况下 ,8086可执行3条指令
11、。,(4) 8086/8088寄存器,8086/8088 CPU内部寄存器结构,1)通用寄存器通用寄存器包括四个数据寄存器,两个地址指针寄存器和两个变址寄存器。 1)数据寄存器AX、BX、CX、DX数据寄存器一般用于存放参与运算的操作数或运算结果。每个数据寄存器都是16位的,但又可将高、低8位分别作为两个独立的8位寄存器来用。高8位分别记作AH、BH、CH、DH,低8位分别记作AL,BL,CL,DL。,上述4个寄存器一般用来存放数据,但它们各自都有自己的特定用途:AX(Accumulator)称为累加器用该寄存器存放运算结果可使指令简化,提高指令的执行速度。此外,所有的I/O指令都使用该寄存器
12、与外设端口交换信息。BX(Base)称为基址寄存器8086/8088CPU中有两个基址寄存器BX和BP。BX用来存放操作数在内存中数据段内的偏移地址,BP用来存放操作数在堆栈段内的偏移地址(也可用于其它运算使用)。,CX(Counter)称为计数器在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。(也可用于其它运算作为寄存器使用) DX(Data)称为数据寄存器在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数。 (也可用于其它运算作为寄存器使用),2) 地址指针寄存器SP、B
13、PSP(Stack Pointer)称为堆栈指针寄存器在使用堆栈操作指令(PUSH或POP)对堆栈进行操作时,每执行一次进栈或出栈操作,系统会自动将SP的内容减2或加2(16位操作数),以使其始终指向栈顶。 (专用,只能作为堆栈指针寄存器使用) BP(Base Pointer)称为基址寄存器作为通用寄存器,它可以用来存放数据,但更重要的用途是存放操作数在堆栈段内的偏移地址。 (也可用于其它运算作为寄存器使用),3)变址寄存器SI、DI SI (Source Index)称为源变址寄存器。 DI (Destination Index)称为目的变址寄存器。SI、DI通常用在字符串操作时存放操作数的
14、偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数据段内的偏移地址。 4) 控制寄存器 指令指针寄存器IP :用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。 标志寄存器FLAGS:用于反映指令执行结果或控制指令执行形式,它是一个16位的寄存器,但只用了其中9位,这9位包括6个状态标志位,3个控制标志位,如图2-4所示。,图2-4 标志寄存器结构图,状态标志:记录程序运行结果的状态信息,许多指令的执行都将相应地设置它们:CF ZF SF PF OF AF 控制标志:可由程序根据需要用指令设置,用于控制处理器执行指令的方式:DF IF TF,(1)进
15、位标志CF(Carry Flag),设置原则:当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF1;否则CF0,3AH + 7CHB6H, 没有进位:CF = 0 AAH + 7CH(1)26H, 有进位:CF = 1,条件(状态)标志位:,(2)零标志ZF(Zero Flag),设置原则:若运算结果为0,则ZF1;否则ZF0,3AH7CHB6H, 结果不是零:ZF0 84H7CH(1)00H, 结果是零:ZF1结果有进位:CF1,(3)符号标志SF(Sign Flag),设置原则:运算结果最高位为1,则SF1;否则SF0,3AH7CHB6H, 最高位D71:SF1 8
16、4H7CH(1)00H, 最高位D70:SF0,(4)奇偶标志PF(Parity Flag),设置原则:当运算结果最低字节(低8位)中“1”的个数为零或偶数时,PF1;否则PF0,3AH7CHB6H10110110B 结果中有5个“1”,是奇数,PF0,(5)溢出标志OF(Overflow Flag),设置原则:当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。对无符号数无意义。,3AH + 7CHB6H, 产生溢出:OF1 溢出的原因:两个正数相加,结果为负数 AAH + 7CH(1)26H, 没有溢出:OF0 不溢出的原因:一个正数与负数相加,结果不会溢出!,(6)
17、辅助进位标志AF(Auxiliary Carry Flag),3AH7CHB6H, D3有进位:AF1,设置原则:运算时D3位(低半字节)有进位或借位时,AF1;否则AF0,(1)方向标志DF(Direction Flag),设置原则:用于串操作指令中,控制地址的变化方向(由指令改变其值)。 设置DF0,存储器地址自动增加; 设置DF1,存储器地址自动减少,CLD指令复位方向标志:DF0 STD指令置位方向标志:DF1,控制标志位:,(2)中断允许标志IF(Interrupt-enable Flag),设置原则:控制可屏蔽中断是否可以被处理器响应(由指令改变其值)。 设置IF1,则允许中断;
18、设置IF0,则禁止中断,CLI指令复位中断标志:IF0 STI指令置位中断标志:IF1,(3)陷阱标志TF(Trap Flag),设置原则:用于控制处理器进入单步操作方式: 设置TF0,处理器正常工作; 设置TF1,处理器单步执行指令,单步执行指令处理器在每条指令执行结束时,便产生一个编号为1的内部中断(单步中断) 利用单步中断可对程序进行逐条指令的调试单步调试,第三节 8086的引脚功能和工作模式,2.3.1. 8086CPU的引脚信号(图2-5),第三节 8086的引脚功能和工作模式,图2-5 8086CPU的引脚信号,(1)基本引脚信号AD15AD0(I/O,三态):地址/数据复用引脚。
19、 A19/S6 A16/S3(O,三态):地址/状态复用引脚。 BHE/S7 (O,三态):高字节允许/状态复用引脚。 NMI(In):非屏蔽中断请求线,上升边触发。 INTR (In) :可屏蔽中断请求线,高电平有效。 RD (O,三态) :读选通信号,低电平有效。 CLK (In) : 时钟信号,处理器基本定时脉冲。 RESET (In):复位信号,高电平有效。 注:(O)为输出信号;(IN)为输入信号,8086复位后内部寄存器的状态,注意: 8086复位后各寄存器的状态非常重要,它决定了: 1、启动后CPU各(段、通用)寄存器的原始状态; 2、CS和IP的状态决定了指令(程序存储器)的设
20、计要求。,WR (O,三态):写选通信号,低电平有效。 READY (IN):准备好信号,高电平有效。处理器与存储器及I/O接口速度同步的控制信号。当被访问的部件无法在8086 CPU规定的时间内完成数据传送时,应由该部件向8086 CPU发出READY=0(低电平),使8086 CPU处于等待状态,插入一个或几个等待周期T,当被访问的部件完成数据传输时,被访问的部件将使READY=1(高电平),8086 CPU继续运行。 TEST (IN):等待测试控制信号(输入)。在WAIT(等待)指令期间,8086 CPU每隔5个时钟周期对TEST引脚采样。若TEST为高电平,8086 CPU循环在等待
21、状态,若TEST为低电平,则8086 CPU脱离等待状态,继续执行后续指令。,MN/MX (IN):最大/最小工作模式选择信号。硬件设计者用来决定8086工作模式,MN/MX =1, 8086为最小模式。 MN/MX =0, 8086为最大模式。 Vcc (IN): 处理器的电源引脚,接 +5V电源。 GND :处理器的地线引脚,接系统地线。 (O)为输出信号;(IN)为输入信号,(2)最小模式下的有关控制信号INTA (O) :最小模式下的中断响应信号。 ALE (O) :地址锁存允许信号ALE引脚高有效时,AD7 AD0和A19 A16正在传送地址信息,由于地址信息在这些复用引脚上出现的时
22、间很短暂,所以系统需利用ALE引脚将地址锁存起来。 DEN (O,三态) :数据总线缓冲器允许信号。数据允许,输出、三态、低电平有效,有效时,表示当前数据总线上正在传送数据,可利用他来控制对数据总线的驱动,DT/R (O,三态) :数据总线缓冲器方向控制信号。数据发送/接收,输出、三态。该信号表明当前总线上数据的流向: 高电平时数据自CPU输出(发送) 低电平时数据输入CPU(接收) M/IO (O,三态) :存储器或I/O接口选择信号。为低电平时,表示CPU将访问I/O端口,这时地址总线A15 A0提供16位I/O口地址。该引线输出高电平时,表示CPU将访问存储器,这时地址总线A19 A0提
23、供20位存储器地址。(注:书中错) WR (O,三态) :写控制。输出、三态、低电平有效,有效时,表示CPU正在写出数据给存储器或I/O端口 RD (O,三态):读控制,输出、三态、低电平有效,有效时,表示CPU正在从存储器或I/O端口读入数据HOLD (IN) : 总线请求信号。(用于DMA) HLDA (O) :总线请求响应信号。 (用于DMA),M/IO、WR和RD读写控制的组合,M/IO、WR和RD控制信号组合后,控制4种基本的总线周期,第四节 8086的最小工作模式:,由图2-6可知,在8086的最小模式中,硬件连接上有如下几个特点: (1)MN/ MX引脚接+5V,决定了8086工
24、作在最小模式。 (2)有一片8234A,作为时钟发生器。 (3)有三片8282或74LS373,用来作为地址锁存器。 (4)当系统中所连接的存储器和外设比较多时,需要增加系统数据总线的驱动能力,这时,可选用两片8286或74LS245作为总线收发器。,图2-6 8086CPU最小模式下的典型配置,注:74LS373=8282;74LS245=8286,74LS245(8286)引脚图,74LS245真值表,74LS245:三态输出的八总线传送接收器,74LS245:每个引脚最大输出电流为24mA,74LS373引脚图,D0,D1,D2,D3,D4,D5,D6,D7,Q0,Q1,Q2,Q3,Q4
25、,Q5,Q6,Q7,VCC,GND,OE,G,74LS373真值表,数据和地址为独立的线,图2-7 8086CPU最小模式硬件电路图,8086CPU最小模式框图,图2-8 8086CPU最小模式简化图,图2-9 8086CPU最大工作模式下的典型配置,由图2-9可知,最大模式配置和最小模式配置有一个主要的差别: 最大模式下多了8288总线控制器。本部分内容感兴趣的同学自学,不作为教学内容,8086/8088CPU基本的总线周期由4个时钟周期组成,如图2-10所示。时钟周期是CPU的基本时间计量单位,由CPU主频决定,如8086的主频为5MHz,1个时钟周期就是200ns。,图2-10(A) 8
26、086/8088基本总线周期,第五节 8086的总线时序,一个时钟周期又称为一个T状态,因此基本总线周期用T1、T2、T3、T4表示。图2-10(B)给出典型的总线周期波形图。在T1状态CPU把要读/写的存储单元的地址或I/O端口的地址放到地址总线上。,图2-10(B) 8086/8088基本总线周期,若是“写”总线周期,CPU从T2起到T4,把数据送到总线上,并写入存储器单元或I/O端口;若是“读”总线周期,CPU则从T3起到T4从总线上接收数据,T2状态时总线浮空,允许CPU有个缓冲时间把输出地址的写方式转换成输入数据的读方式。,1写周期的时序(图2-11),图2-11 8086写总线周期
27、,2读周期的时序,图2-12 8086读周期,2.6.18086的存储体结构,(BHE和A0的意义),第六节 8086的存储体结构与组成,图2-7 8086系统的存储器高低位连接逻辑结构,2.6.2存储器结构及寻址机制,存储器:计算机存储信息的地方。 数据的存储格式:,(1)计算机中信息的单位 二进制位Bit:存储一位二进制数:0或1 字节Byte:8位二进制数,D7D0 字Word:16位二进制数,2个字节,D15D0 双字DWord:32位,4个字节,D31D0 (2)最低有效位LSB:数据最低位,D0位 (3)最高有效位MSB:数据的最高位,对应字节、字、双字分别指D7、D15、D31位
28、,存储单元及其存储内容,每个存储单元都有一个确定存储器地址 每个存储单元存放一个字节的内容(数据) 多字节数据在存储器中占连续多个存储单元 低字节存入低地址,高字节存入高地址,0002H单元存放有一个数据34H 表达为:0002H=34H或(0002H)=34H,存储器的分段管理,8086/8088CPU有20条地址线 最大可寻址空间为2201MB 物理地址范围从00000HFFFFFH 8086/8088CPU将1MB空间分成许多个逻辑段 每个段最大存储容量为64KB 段地址的低4位为0000B 这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址,8086的存储格式图示:,物理
29、地址和逻辑地址,8088CPU存储系统中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H FFFFFH 分段后在用户编程时,采用逻辑地址,形式为:段基地址 : 段内偏移地址,物理地址 14700H 逻辑地址 1460H:0100H,因为8086中的所有寄存器都为16位,段基地址为16位 : 段内偏移地址为16位,逻辑地址,段基地址说明逻辑段在存储器中的起始位置 8086/8088规定段基地址必须是16的整数倍:xxxx0H 省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址,物理地址和逻辑地址的转换,将逻辑地址中的段地址左移4位,加上
30、偏移地址就得到20位物理地址 一个物理地址可以有多个逻辑地址,逻辑地址 1460:0100、1380:0F00 物理地址 14700H 14700H,逻辑段的分配图示:,2.6.3 8086存储器高低位库选择(奇、偶体选择),存储器分为奇偶体的原因:8086有16条数据线,但常用的存储器为8位数据线,为了实现8086即可存取8位数据,又可存取16数据,8086通过BHE和A0线的逻辑组合将存储器分为两部分:奇地址存储器和偶地址存储器。,8086存储器的段结构特点: 1)8086可用来存放地址的寄存器如IP、SP等都是16位的,故只能直接寻址64KB。为了对1 M个存储单元进行管理,8086采用
31、了段结构的存储器管理方法。 2)8086将整个存储空间(1M字节)分为许多逻辑段,每个逻辑段的容量小于或等于64KB,允许它们在整个存储空间中浮动,各个逻辑段之间可以紧密相连,也可以互相重叠。 3)用户编写的程序(包括指令代码和数据)被分别存储在代码段、数据段、堆栈段和附加数据段中,这些段的段(基)地址分别保存在段寄存器CS、DS、SS和ES中,而指令或数据在段内的偏移地址可由对应的地址寄存器或立即数给出。,4)如果从存储器中读取指令,则段地址来源于代码段寄存器CS,偏移地址来源于指令指针寄存器IP。 5)如果从存储器读/写操作数,则段地址通常由数据段寄存器DS提供(也可通过指令前缀实现段超越
32、,将段地址指定为由CS、ES或SS提供),偏移地址则要根据指令中所给出的寻址方式确定,这时,偏移地址通常由寄存器BX、SI、DI以及立即数等提供,这类偏移地址也被称为“有效地址”(EA)。如果操作数是通过基址寄存器BP寻址的,则此时操作数所在段的段地址由堆栈段段寄存器SS提供(必要时也可指定为CS、SS或ES) 。,6)如果使用堆栈操作指令(PUSH或POP)进行进栈或出栈操作,以保护断点或现场,则段地址来源于堆栈段寄存器SS,偏移地址来源于堆栈指针寄存器SP 。 7)如果执行的是字符串操作指令,则源字符串所在段的段地址由数据段寄存器DS提供(必要时可指定为CS、ES或SS),偏移地址由源变址
33、寄存器SI提供;目的字符串所在段的段地址由附加数据段寄存器ES提供,偏移地址由目的变址寄存器DI提供。 8)以上这些存储器操作时段地址和偏移地址的约定是由系统设计时事先已规定好的,编写程序时必须遵守这些约定。,8086 CPU中有四个段寄存器:CS,DS,SS和ES,这四个段寄存器存放了CPU当前可以寻址的四个段的基值,即可以从这四个段寄存器规定的逻辑段中存取指令代码和数据。一旦这四个段寄存器的内容被设定,就规定了CPU当前可寻址的段,如图2-8所示。,8086存储器的逻辑地址与物理地址,图2-9 存储器分段示意图,8086 微机系统中的每个存储单元在存储体中的位置都可以使用实际地址(物理地址
34、)来表示。 CPU访问存储器时,要形成20位的物理地址,即先找到某段,再找到该段内的偏移量,CPU是以物理地址访问存储器的。 20位的物理地址计算公式: 段寄存器内容 XXXX XXXX XXXX XXXX 0000 段内偏移量 YYYY YYYY YYYY YYYY - 20位的物理地址 ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ,物理地址为:段地址(左移四位)+段内偏移量,8086存储器20位物理地址的形成,段划分的要求: 1M字节存储体需进行段划分,各段的段内地址是连续的,段与段之间是相互独立的。每个段的起始地址称段的基址,段基址必须是能被16整除的那些地址,即20位的段基址的低四位应当是0000。由于段起始地址的低四位为0,所以可用20位地址的高16位表示段的基址,存放在段基址寄存器中。段基址寄存器共四个:CS、DS、ES、SS。,