670 likes | 992 Views
第二章 8086/8088 微处理器. 主讲:刘英. 主要内容. 2.1 8086/8088 微处理器的结构 2.2 8086/8088 的引脚功能 2.3 8086/8088 的总线结构 2.4 8086 最小模式的工作时序. 2.1 8086/8088 微处理器的结构. 2.1.1 8086/8088 微处理器的结构 8086/8088 微处理器是 Intel 公司推出的第三代 CPU 芯片,它们的内部结构基本相同,都采用 16 位结构进行操作及存储器寻址,但外部性能有所差异,两种处理器都封装在相同的 40 脚双列直插组件中。.
E N D
第二章 8086/8088微处理器 主讲:刘英
主要内容 • 2.1 8086/8088微处理器的结构 • 2.2 8086/8088的引脚功能 • 2.3 8086/8088的总线结构 • 2.4 8086最小模式的工作时序
2.1 8086/8088微处理器的结构 2.1.1 8086/8088微处理器的结构 • 8086/8088微处理器是Intel公司推出的第三代CPU芯片,它们的内部结构基本相同,都采用16位结构进行操作及存储器寻址,但外部性能有所差异,两种处理器都封装在相同的40脚双列直插组件中。
2.1 8086/8088微处理器的结构 • 8086微处理器的一般性能特点: • 16位的内部结构,16位双向数据信号线; • 20位地址信号线,可寻址1M字节存储单元; • 较强的指令系统(133条指令); • 利用第16位的地址总线来进行I/O端口寻址,可寻址64K个I/O端口; • 中断功能强,可处理内部软件中断和外部中断,中断源可达256个; • 单一的+5V电源,单相时钟5MHz。
2.1 8086/8088微处理器的结构 • 从功能上来看,8086CPU可分为两部分,即总线接口单元BIU(Bus Interface Unit)和执行单元EU(Execution Unit)。
2.1 8086/8088微处理器的结构 • 总线接口单元(BIU) • 组成:①段寄存器(DS、CS、ES、SS); ②16位指令指针寄存器IP(指向下一条要取出的指令代码); ③20位地址加法器(用来产生20位地址); ④6字节(8088为4字节)指令队列缓冲器; ⑤总线控制逻辑。 • 功能:负责从内存中取指令,送入指令队列,实现CPU与存储器和I/O接口之间的数据传送。 • 执行单元(EU) • 组成:①ALU(算术逻辑单元); ②通用寄存器(AX、BX、CX、DX); ③专用寄存器(BP、SP、SI、DI); ④标志寄存器(PSW); ⑤EU控制系统。 • 功能:负责分析指令和执行指令。
2.1 8086/8088微处理器的结构 2.1.2 8086内部寄存器 累加器 AX 地址寄存器 控制寄存器 BX 计数器 CX IP 数据寄存器 通用寄存器 FLAGS DX SP CS 段寄存器 BP DS SS SI DI ES
2.1 8086/8088微处理器的结构 1. 通用寄存器 • 通用寄存器的包括数据寄存器、地址指针寄存器和变址寄存器。 ① 数据寄存器 • 4个16位的数据寄存器:累加器AX、基址寄存器BX、计数寄存器CX、数据寄存器DX • 特点:可以将数据寄存器当作一个16位寄存器,也可用作两个8位寄存器(AL、AH;BL、BH;CL、CH;DL、DH)。 • 可以用来存放8位或16位二进制操作数,这些操作数可以是参加操作数、中间结果、操作数地址。但这四个寄存器又有自己特殊的用法。
2.1 8086/8088微处理器的结构 • AX(Accumulator)累加器,多用于存放中间运算结果。所有I/O指令必须都通过AX与接口传送信息。 • BX(base Register)基址寄存器,在间接寻址中用于存放基地址。 • CX(count Register)计数寄存器,用于在循环或串操作指令中存放循环次数或重复次数。 • DX(Data Register)数据寄存器,在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存放I/O端口地址。
2.1 8086/8088微处理器的结构 • ② 地址指针寄存器 • SP(stack pointer)堆栈指示器,用于指示当前堆段中栈顶所在的存储单元地址。 • BP(base pointer)基址指示器,用于指示当前堆栈段中一个数据区基址的偏移地址,通过它间接寻址可对堆栈段中的某个数据进行存取。 • BX与BP在应用上的区别 • 作为通用寄存器,二者均可用于存放数据; • 作为基址寄存器,BX通常用于寻址数据段;BP则通常用于寻址堆栈段。 跳转到堆栈
2.1 8086/8088微处理器的结构 • ③变址寄存器 • SI(source Index)源变址寄存器 • DI(Destination index)目标变址寄存器 • 变址寄存器常用于指令的间接寻址或变址寻址。特别是在串操作指令中,用SI存放源操作数的偏移地址,而用DI存放目标操作数的偏移地址。
2.1 8086/8088微处理器的结构 2. 段寄存器 • 用于存放逻辑段的段基地址(逻辑段的概念后面将要介绍) • CS(Code Segment)代码段寄存器: • 代码段用于存放指令代码 • DS( Date Segment )数据段寄存器 : • ES( Extra Segment )附加段寄存器: • 数据段和附加段用来存放操作数 • SS(Stack Segment)堆栈段寄存器: • 堆栈段用于存放返回地址,保存寄存器内容,传递参数。
2.1 8086/8088微处理器的结构 3. 指令指针IP(Instruction Pointer) • 16位专用寄存器,IP指向当前需要取出的指令字节 • 当BIU从内存中取出一个指令字节后,IP自动加1,指向下一个字节 • IP指向的是指令地址的段内地址偏移量,又称偏移地址或有效地址 • 程序员不能对IP进行存取操作,程序中的转移指令、返回指令以及中断处理能对IP进行操作
15 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 2.1 8086/8088微处理器的结构 4. 标志寄存器FLAG • 8086处理器的各种标志形成了一个16位的标志寄存器FLAGS(程序状态字PSW寄存器) • 6个状态标志位( CF、PF、AF、ZF、SF、OF),表示前一步操作(如加、减等)执行以后,ALU所处的状态,后续操作可以根据这些状态标志进行判断,实现转移。 • 3个控制标志位( IF、DF、TF),可以通过指令人为设置,用以对某一种特定的功能起控制作用(如中断屏蔽等),反映了人们对微机系统工作方式的可控制性。
2.1 8086/8088微处理器的结构 ① 状态标志位 • 进位标志CF,反映算术运算后,最高位(字节操作为D7,字操作为D15)出现进位(或借位)的情况,有则为“1” • 奇偶标志PF,反映操作结果(AL)中“1”的个数情况,若为偶数,PF=1 • 辅助进位标志AF,反映一个8位量的低4位(D3)向高4位(D4)有无进位(或借位)的情况,有则置为“1”。通常用于对BCD码算术运算结果的调整。
2.1 8086/8088微处理器的结构 • 零标志ZF,反映运算结果是否为零的情况,结果为零,ZF置为“1” • 符号标志SF,反映运算结果的符号情况,若结果为负数,SF为“1”。SF的取值与运算结果最高位(字节操作为D7,字操作为D15)一致 • 溢出标记OF,反映带符号数运算结果是否超过机器所能表示的数值范围的情况,对字节运算为-128~+127,对字运算为-32768~+32767。若超过上述范围则称为“溢出”,OF=1
2.1 8086/8088微处理器的结构 • 溢出标志OF和进位标志CF是两个意义不同的标志 • 进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确; • 溢出标志表示带符号数运算结果是否超出范围,运算结果已经不正确。 例2.1:49H + 6DH=B6H 无符号数运算:73+109=182 范围内,无进位 有符号数运算: 73+109=182 范围外,有溢出 例2.2:BBH + 6AH=(1)25H 无符号数运算:187+106=293 范围外,有进位 有符号数运算: -69+106=37 范围内,无溢出
2.1 8086/8088微处理器的结构 例2.3: 1101 0010 + 0110 0110 1 0011 1000 CF=1 SF=0 ZF=0 PF=0 AF=0 OF=C7⊕C6=0 例2.4: 0101 0001 0100 1011 + 0110 0010 0100 0110 1011 0011 1001 0001 CF=0 SF=1 ZF=0 PF=1 AF=1 OF=C15⊕C14=1
2.1 8086/8088微处理器的结构 ② 控制标志位 • 方向标志DF,在进行字符串操作时,每执行一条串操作指令,对地址要进行一次调整,由DF决定地址是增还是减。若DF=1,则为减量;若DF=0则为增量 • 中断允许标志IF,表示系统是否允许外部的可屏蔽中断。若IF=1,表示允许中断。IF对非屏蔽中断及内部中断请求不起作用 • 跟踪标志TF,当TF=1时,CPU每执行完一条指令,便自动产生一个内部中断,对程序进行逐条检查,常用于程序的调试
执行部件 通用寄存器 四个专用寄存器 SP:堆栈指示器,用于指示当前堆段中栈 顶所在的存储单元地址。 BP:基址指示器,用于指示当前堆栈段中 一个数据区的偏移地址. SI:源变址寄存器,存放源操作数的偏移 地址。 DI:目标变址寄存器,存放目标操作数的 偏移地址。 算术逻辑单元ALU: 主要是加法器。大部分指令 的执行由加法器完成。 标志寄存器: 16位字利用了9位。 标志分两类: 状态标志(6位):反映刚刚完成的操作结果情况。 控制标志(3位):在某些指令操作中起控制作用。 总线接口部件
20位地址加法器 16位的指令指针寄存器IP: IP中的内容是下一条指令 对现行代码段基地址的偏移量, 6字节的指令队列 指令队列共六字节,总线接 口部件BIU从内存取指令, 取来的总是放在指令队列中; 执行部件EU从指令队列取指 令,并执行。 四个段寄存器:CS、DS、SS、ES CS管理代码段;DS管理数据段 SS管理堆栈段;ES管理附加段.
2.1 8086/8088微处理器的结构 2.1.3 存储器中的逻辑地址和物理地址 1. 为什么要采用存储器“分段”技术? • 8086/8088系统有20根地址总线,它可以直接寻址的存储器单元数为220=1MB。 • 而微处理器中所有的寄存器都是16位的,内部ALU也只能进行16位运算,其寻址范围局限在216=65536(64KB)单元。 • 为了实现对1MB单元的寻址,8086系统采用了存储器分段技术。
2.1 8086/8088微处理器的结构 2. 存储器分段 • 具体做法是,将1MB的存储空间分成许多逻辑段,每段最长64KB单元,可以用16位地址码进行寻址。 • 1MB的存储空间最多可分为64K个段(段之间可相互重叠),至少可分成16个相互不重叠的段(每段容量为64KB),如图2-3所示。 • 每个逻辑段在实际存储空间中的位置是可以浮动的,其起始地址可由段寄存器的内容来确定。实际上,段寄存器中存放的是段起始地址的高16位,称之为“段基值”(segment base value)。 • 段起始地址的计算和分配通常是由操作系统完成的,并不需要普通用户参与。
2.1 8086/8088微处理器的结构 图2-3 存储器的逻辑分段结构
2.1 8086/8088微处理器的结构 3. 物理地址和逻辑地址 • 在有地址变换机构的计算机系统中,每个存储单元可以看成具有两种地址:物理地址和逻辑地址。 • 物理地址是信息在存储器中实际存放的地址(20位),它是CPU访问存储器时实际输出的地址。物理地址与存储单元是一一对应关系。 • 逻辑地址是编程时所使用的地址(16位),对所给定的任一存储单元而言有逻辑地址由“段基址”和“段内偏移量”两部分构成。一个逻辑地址只能对应一个物理地址,而一个物理地址可以对应多个逻辑地址。
2.1 8086/8088微处理器的结构 • 段基址:说明逻辑段在内存中的起始位置。 • 段内偏移量:说明主存单元距离段起始位置的偏移量。 • 段基址存放在段寄存器CS、SS、DS和ES中。 • 段内偏移量由SP、BP、SI、DI、IP以及相应寄存器的组合而组成。 • 逻辑地址表示形式: • 段基地址 : 段内偏移地址
2.1 8086/8088微处理器的结构 • CS、DS、SS和其他寄存器组合指向存储单元的示意图
2.1 8086/8088微处理器的结构 4. 物理地址的计算方法 • 物理地址的形成是通过CPU内部的BIU部件中的地址加法器运算出来的。 • 上述由逻辑地址转换为物理地址的过程也可以表示成如下计算公式: 物理地址=段基值×10H+偏移量
2.1 8086/8088微处理器的结构 • 例2.5 设代码段寄存器CS的内容为4232H,指令指针寄存器IP的内容为0066H,即CS=4232H,IP=0066H,则访问代码段存储单元的物理地址计算如下: 4232H×10H+0066H=42386H • 例2.6 设数据段寄存器DS的内容为1234H,基址寄存器BX的内容为0022H,即DS=1234H,BX=0022H,则访问数据段存储单元的物理地址计算如下: 1234H×10H+0022H=12362H
2.1 8086/8088微处理器的结构 5. 特殊的内存区域: • 8088/8086系统中,有些内存区域的作用是固定的,用户不能随便使用,如: • 中断矢量区:00000H—003FFH共1K字节,用以存放256种中断类型的中断矢量,每个中断矢量占用4个字节,共256×4=1024=1K; • 显示缓冲区:B0000H—B0F9FH约4000(25×80×2)字节,是单色显示器的显示缓冲区,存放文本方式,所显示字符的ASCII码及属性码;B8000H—BBF3FH约16K字节,是彩色显示器的显示缓冲区,存放图形方式下,屏幕显示象素的代码。 • 启动区:FFFF0H—FFFFFH共16个单元,用以存放一条无条件转移指令的代码,转移到系统的初始化部分。
2.1 8086/8088微处理器的结构 2.1.4 堆栈 • 堆栈是在存储器中开辟的一个数据存储器,这个区域数据的存取遵循“先入后出”的原则。 • 把堆栈存储器的一端固定,称为栈底。另一端可活动,称为栈顶。栈顶由SP堆栈批示器来描述。 • 8086/8088的堆栈操作只能是字操作。因此在进行入栈操作时,SP会自动减2,即SP=SP-2。出栈时SP会自动加2,即SP=SP+2。 • 常用于响应中断或子程序调用(存放返回地址、过程参数或需要保护的数据)
2.1 8086/8088微处理器的结构 • 堆栈操作 低 低 低 SS SS SS F0H SP F0H SP 12H 12H SP -2 +2 SP SP SP 高 高 高 高 入栈前 入栈后 出栈后
2.2 8086/8088的引脚功能 • 8086和8088都是16位CPU,具有40条引脚,采用双列直插式封装。 • 为了减少芯片的引线,8086/8088的许多引脚具有双重定义和功能,采用分时复用方式工作,即在不同时刻,这些引线上的信号是不相同的 • 8086/8088的最大和最小两种工作模式可以通过引脚选择 • 最大模式:两个或多个微处理器(多微处理器模式),一个主处理器为8086CPU,另外的处理器可以是浮点数协助处理器8087或I/O处理器8089。 • 最小模式:只有8086CPU一个微处理器(单处理器模式)。 • 引脚分类:地址总线、数据总线、控制总线、其它(时钟与电源)
2.2 8086/8088的引脚功能 • 8086有40个引脚,其中第33(最小/最大模式)脚很关键,它是一条输入线,可以加高电平,也可以加低电平,由该线所加电平的高或低电平决定24-31引脚的功能(24-31引脚括号内为最大模式功能)其他引脚不受第33引脚的影响,我们把这部分引脚称为一般引脚。
2.2 8086/8088的引脚功能 • 最小模式下的引脚说明 • 地址/数据总线 • AD15~AD0 (Address Data Bus) • 地址/数据分时复用信号,双向,三态。在T1状态(地址周期)AD15~AD0上为地址信号的低16位A15~A0;在T2 ~ T3状态(数据周期)AD15~AD0 上是数据信号D15~D0。 • 所谓三态是指总线输出可以有三个状态:高电平、低电平和高阻状态。当处于高阻状态时,该总线在逻辑上与所有连接负载断开。 跳转到时序分析
S4 S3 当前正在使用的段寄存器 0 0 ES 0 1 SS 1 0 CS或未使用任何段寄存器 1 1 DS 2.2 8086/8088的引脚功能 • 地址/状态线 • A19~A16/S6~S3 (Address/Status) • 地址/状态复用信号,三态输出。在总周期的T1状态A19/S6~A16/S3上是地址的高4位。在T2~T4状态,A19/S6~A16/S3上输出状态信息。 • 这些状态信息中,S6恒等于0,S5指示中断允许标志位IF的状态,S4、S3的组合指示CPU当前正在使用的段寄存器,其编码见表格。
2.2 8086/8088的引脚功能 • 控制总线 • (1)BHE/S7 (Bus High Enable/Status) • 数据总线高8位使能和状态复用信号,三态输出。在总线周期T1状态,BHE有效,表示数据线上高8位数据有效。在T2~T4状态BHE/S7 输出状态信息S7。S7在8086中未定义。
2.2 8086/8088的引脚功能 • 8086将1M字节存储体分为两个库,每个库的容量都是512K字节。其中与数据总线D15—D8相连的库全由奇地址单元组成,称高字节库或奇地址库, 并用BHE信号作为库选信号;另一个库与数据总线的D7—D0相连,由偶地址单元组成,称低字节库或偶低址库,利用A0作为库选信号。显然,只需A19—A1共19位地址用来作为两个库内的单元寻址。
2.2 8086/8088的引脚功能 • BHE和A0的代码组合和对应的操作
2.2 8086/8088的引脚功能 • (2)M/IO (Memory/IO ) • 存储器/IO端口控制信号,三态输出。用来区分当前操作是访问I/O端口还是存储器。M/IO为高电平时,表示当前CPU正在访问存储器,M/IO为低电平时,表示当前CPU正在访问I/O端口。 • (3) RD (Read) • 读信号,三态输出,此引脚输出为低电平时,表示CPU正在对存储或I/O端口进行读操作。 • (4) WR (Write) • 写信号,三态输出,此引脚输出为低电平时,表示CPU正在对存储或I/O端口进行写操作。
2.2 8086/8088的引脚功能 • (5)ALE(Address Latch Enable) • 地址锁存允许信号,高电平有效。CPU通过该引脚向地址锁存器8282/8283发出地址锁存允许信号,把当前地址/数据复用总线上输出的是地址信息,锁存到地址锁存器8282/8283中去。ALE信号不能被浮空。 • (6)DEN (Data Enable) • 数据允许信号,三态输出,低电平有效。在8086系统中,通常采用8286或8287作为数据总线的驱动器,该信号为数据总线收发器8286提供一个控制信号,表示CPU当前准备发送或接收一项数据。 • (7) DT/R (Data Transmit/Receive) • 数据传送方向控制信号,三态输出。在8086系统中,用DT/R信号来控制数据驱动器的数据传送方向。高电平时,CPU向存储器或I/O端口发送数据;低电平时,CPU从存储器或I/O端口接收数据。 跳转到地址锁存 跳转到数据收发
2.2 8086/8088的引脚功能 • (8)NMI (Non—Maskable Interrupt Reques • 不可屏蔽中断请求信号。由外部输入,上升沿触发,正跳沿有效。CPU一旦测试到NMI请求信号,待当前指令执行完就自动从中断入口地址表中找到类型2中断服务程序的入口地址,并转去执行。 • (9)INTR( Interrupt Request) • 中断请求信号,由外部输入,电平触发,高电平有效。INTR有效时,表示外部设备向CPU发出中断请求,CPU在每条指令的最后一个时钟周期对INTR进行测试,一旦测试到有中断请求,并且当中断允许标志IF=1时,则暂停执行下条指令转入中断响应周期。 • (10)INTA (Interrupt Acknowledge) • 中断响应信号。向外部输出,低电平有效,表示CPU响应了外部发来的INTR信号。
2.2 8086/8088的引脚功能 • (11)HOLD(Hold Request) • 总线保持请求信号,高电平有效,这是系统中的其它总线部件向CPU发来的总线请求信号输入引脚。 • (12)HLDA(Hold Acknowledge) • 总线保持响应信号,高电平有效,表示CPU认可其他总线部件提出的总线占用请求,准备让出总线控制权。
2.2 8086/8088的引脚功能 • (13)READY • 准备就绪信号。由外部输入,高电平有效,它是由被访问的内存或I/O设备发出的响应信号,当其有效时,表示CPU访问的存储器或I/O端口己准备好传送数据。当READY无效时,要求CPU插入一个或多个等待周期Tw,直到READY信号有效为止。 • (14)TEST • 测试信号。由外部输入,低电平有效。当CPU执行WAIT指令时(WAIT指令是用来使处理器与外部硬件同步),每隔5个时钟周期对TEST进行一次测试,若测试到该信号无效,则CPU继续执行WAIT指令,即处于空闲等待状态;当CPU测到TEST输入为低电平时,则转而执行WAIT的下一条指令。由此可见,TEST对WAIT指令起到了监视的作用。
2.2 8086/8088的引脚功能 • (15)RESET • 复位信号。由外部输入,高电平有效。RESET信号至少要保持4个时钟周期,CPU接收到该信号后,停止进行操作,并对标志寄存器(FR)、IP、DS、SS、ES及指令队列清零,而将CS设置为FFFFH。当复位信号变为低电平时,CPU从FFFF0H开始执行程序,由此可见,采用8086CPU计算机系统的启动程序就保持在开始的存储器中。 • (16)MN/MX (Minimum/Maximum Mode Control) • 最大最小模式控制信号,输入。MN/MX=1(+5V),CPU工作在最小模式。MN/MX=0(接地), CPU则工作在最大模式。 • 其他 • (1)GND地 • (2)VCC电源,接+5V
2.2 8086/8088的引脚功能 • 最大模式下的引脚说明 • 当8086CPU工作在最大模式系统时,有8个管脚重新定义 。 • (1)S2、S1、S0(Bus Cycle Status,最小模式为M/IO、D/TR、DEN) • 总线周期状态信号,三态输出,低电平有效。在最大模式下,这三个信号连接到总线控制器8288的输入端,8288对它们进行译码后可以产生系统总线所需要的各种控制信号。三个信号的代码组合以及对应操作见下页表格:
2.2 8086/8088的引脚功能 • (2)RQ/GT0,RQ/GT1 (Request/Grant) • 总线请求/总线响应信号,低电平有效。每一个引脚都具有双向功能,既是总线请求输入也是总线响应输出。当该信号为输入时表示其它主控者向CPU请求使用总线;当为输出时表示CPU对总线请求的响应信号。两条线可同时与两个主控者相连,RQ/GT0优先级高于RQ/GT1。
2.2 8086/8088的引脚功能 • (3)LOCK 封锁信号 • 总线封锁信号,三态输出,低电平有效。该信号有效时,CPU锁定总线,不允许其他的总线控制设备申请使用系统。这个信号由软件设置,当在指令前加上LOCK前缀时,则在执行这条指令期间LOCK保持有效,即在此指令执行期间,CPU封锁其他总线控制设备使用总线。
2.2 8086/8088的引脚功能 • (4)QS1、QS0(Instruction Queue Status): • 指令队列状态输出信号。QS1,QS0组合起来表示前一个时钟周期中指令队列的状态,根据该状态信号,从外部可以跟踪CPU内部的指令队列。QS1、QS0的编码如表: