580 likes | 757 Views
第二章 8086 系统结构. 2-1 8086CPU 结构. 2-2 8088/8086 的存储器组织. 2-3 8086 的系统配置及引脚功能. 2-4 8086CPU 时序. 2-1 8086CPU 结构. 第二章 8086 系统结构. 一、 8086CPU 的内部结构. 属第三代微处理器 运算能力: 数据总线: DB - 16bit ( 8086 ) / 8bit ( 8088 ) 地址总线: AB - 20bit 内存 寻址能力 2 20 = 1MB.
E N D
第二章 8086系统结构 2-1 8086CPU结构 2-2 8088/8086的存储器组织 2-3 8086的系统配置及引脚功能 2-4 8086CPU时序
2-1 8086CPU结构 第二章 8086系统结构 一、 8086CPU的内部结构 属第三代微处理器 运算能力: 数据总线:DB-16bit(8086)/ 8bit(8088) 地址总线:AB-20bit 内存寻址能力220=1MB
2.2 IA-32微处理器的功能结构 • 8086的内部结构从功能上分成两部分: • 总线接口部件BIU: • 总线接口单元BIU,负责控制存储器读写。 • 执行部件EU: • 执行单元EU从指令队列中取出指令并执行。 • 特点: • 取指令和执行指令分开进行,提高了速度。
通用寄存器 AX AH AL BX BH BL CX CH CL DX DH DL SP BP DI SI 地址加法器 CS DS SS ES IP 暂存器 8086总线 暂 存 器 指令队列 1 2 3 4 5 6 ALU 8088 8086 总 线 控 制 逻 辑 2.2.1 8086的功能结构 20位地址总线 16位数据总线 存 储 器 接 口 16位内部总线 EU 控 制 器 8位队列总线 标志寄存器 执行部件EU 总线接口部件BIU
1.总线接口部件BIU(Bus Interface Unit) 组成:16位段寄存器,指令指针,20位地址加法器,总线控制逻辑,6字节指令队列。 作用:负责从内存指定单元中取出指令,送入指令流队列中排队;取出指令所需的操作数送EU单元去执行。 工作过程:由段寄存器与IP形成20位物理地址送地址总线,由总线控制电路发出存储器“读”信号,按给定的地址从存储器中取出指令,送到指令队列中等待执行。 *当指令队列有2个或2个以上的字节空余时,BIU自动将指令取到指令队列中。若遇到转移指令等,则将指令队列清空,BIU重新取新地址中的指令代码,送入指令队列。 *指令指针IP由BIU自动修改,IP总是指向下一条将要执行指令的地址。
2.指令执行部件EU(Exection Unit) 组成:通用寄存器,标志寄存器,ALU,EU控制系统等。 作用:负责指令的执行,完成指令的操作。 工作过程:从队列中取得指令,进行译码,根据指令要求向EU内部各部件发出控制命令,完成执行指令的功能。若执行指令需要访问存储器或I/O端口,则EU将操作数的偏移地址送给BIU,由BIU取得操作数送给EU。
3. 8086CPU结构的特点: 减少了CPU为取指令而等待的时间,提高了CPU的运行速度。
二、 8088/8086的寄存器结构 8088/8086有14个16位寄存器 16位 8位 8位 AX → AH AL BX → BH BL CX → CH CL DX → DH DL 1. 通用寄存器组 2. 指针/变址寄存器 3. 2个控制寄存器 4. 4个段寄存器
1. 通用寄存器组 *各寄存器隐含用法 * 4个16位的数据寄存器 (AX,BX,CX,DX)寄存器既可存放数据,也可存放地址。 * 既可作为16位寄存器也可作为8位寄存器使用。(例:AH,AL) 8bit寄存器只能存放数据。 *通用性强,对任何指令都具有相同的功能
2. 指针及变址寄存器(SP,BP,SI,DI) * BP,SP寄存器称为指针寄存器,与SS联用。 * DI,SI寄存器称为变址寄存器,与DS联用,在串指令中,SI,DI均为隐含寻址,此时,SI与DS联用, DI与ES联用。
3. 指令指针和状态寄存器 (1) 指令指针 I P是一个16位的专用寄存器。当BIU从内存中取出一条指令,自动修改IP,始终指向下一条将要执行的指令在现行代码段中的偏移量。 8086/8088中的某些指令执行后会改变IP的内容,但用户不能编写指令直接改变IP 的内容。 * I P是指令地址在代码段内的偏移量(又称偏移地址),IP要与CS配合构成共同物理地址。 (2) 状态(标志)寄存器PSW PSW 是一个16位的专用寄存器(6位状态位,3位控制位)存放运算结果的特征。
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 OF DF IF TF SF ZF AF PF CF 标 志 寄 存 器 Flags • 唯一能按位操作的寄存器 • 只定义了其中9位,另外7位未定义(保留) • 6位状态标志:OF、SF、ZF、PF、CF、AF • 3位控制标志:DF、IF、TF
状 态 标 志 用来记录程序中运行结构的状态信息。由于这些状态信息 往往作为后续条件转移指令的转移控制条件,所以也称作 条件码。 OF(Overflow Flag):符号数溢出标志 加法运算时,若两个数符号相同,但结果符号相反。 OF=1: 减法运算时,若两个数符号相反,结果符号与减数符号相同。 判定方法: OF =最高位进/借位次高位进/借位
0 0 0 0 1 0 0 1 + 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 9 + 8 17 状 态 标 志 • AF(Auxiliary Carry Flag):辅助进/借位标志,半字节进位标志。用于BCD码调整指令。 • AF=1:在字节操作时,数据的D3位向D4位产生了进/借位。这个标志主要用于十进制数算术运算指令中。
状 态 标 志 • CF(Carry Flag):进位/借位标志,当结果的最高位(字节操作时的D7或字操作时的D15)产生一个进位或借位,则CF=1。 这个标志主要用于多字节数的加、减法运算。
状 态 标 志 • SF(Sign Flag):符号标志 • 记录运算结果的符号,结果为负SF=1;否则SF=0; • ZF(Zero Flag):零标志 • ZF=1:运算结果为0(与是否进位无关)。 • ZF=0:运算结果不是0。
状 态 标 志 • PF (Parity Flag):奇偶标志(低8位) • PF=1: 表示结果有偶数个1。 • PF=0: 表示结果有奇数个1。 • 有些运算的操作会影响全部状态标志,如加法、减法运算; • 有些操作影响部分状态标志,如移位操作; • 也有些指令的操作不影响任何状态标志,如通用数据传送指令。
0 1 1 0 0 0 1 1 0 1 0 0 1 1 0 1 + 0 0 1 1 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 0 1 1 0 例:2个数相加后,分析各标志位的值 运算结果最高位为1 ∴SF=1; 运算结果本身≠0 ∴ZF=0; 低8位中1的个数为偶数个 ∴PF=1; 最高位没有进位 ∴CF=0; 第三位向第四位有进位 ∴AF=1; 两个正数相加,和为负数,和超范围 ∴OF=1; 次高位向最高位有进位 ,最高位向前没有进位→OF=10=1
思考题: • X、Y分别为下列各组数,当它们分别进行加、减运算后,其标志位:S、O、C、P、Z的状态如何? • 1)X=21H;Y=43H • 2)X=48H;Y=8DH • 3)X=9AH;Y=0BCH • 4)X=54H;Y=54H
控 制 标 志 控制标志位的值不由数据运算的结果决定,而由指令直接 赋值;可以决定后续指令的执行情况。 DF(Direction Flag):方向控制标志位 • 专用于串操作指令中控制数据串的处理方向。 • DF=1:串处理方向从高地址到低地址或是“从右到左”来处理串。 指令:STD • DF=0:串处理方向从低地址到高地址或是“从左到右”来处理串。 指令:CLD
控 制 标 志 • IF(Interupt Flag):中断标志位 • IF=1:允许外部可屏蔽中断INTR,即CPU可以响应INTR的请求。 • IF=0:关闭INTR,即CPU禁止响应INTR的请求。 • 用于控制CPU对外部可屏蔽中断的请求。 • TF(Trap Flag):跟踪标志位 • 用于程序调试时进行单步方式工作。 • TF=1:单步工作方式,每执行完一条指令自动产生一次内部中断,程序暂停供检查,用于调试程序。 • TF=0:CPU正常顺序执行不产生内部中断。 • TF无法直接由指令赋值!
4. 段寄存器 8086/8088按信息存储的不同性质分为四类,分别由四个段寄存器存放该段的首地址,或称为段地址。 * CS(代码段寄存器)指向当前的代码段,指令由此段 取出; *SS(堆栈段寄存器)指向当前的堆栈段,栈操作的对象 是该段存储单元的内容; *DS(数据段寄存器)指向当前的数据段,该段中存放程 序的操作数; *ES(附加段寄存器)指向当前的附加段,主要用于字符 串数据的存放,也可以用于一般数据 的存放。
2-2 8088/8086的存储器组织 一、存储器地址的分段 1.存储器地址的分段 矛盾:存储器地址空间1MB,20bit地址线;内部各寄存器和数据总线均为16bit。 解决方法:将整个存储器分为若干个逻辑段,每段内地址16bit,即最多地址空间64KB。 允许各逻辑段在整个存储空间浮动,段与段之间可以是连续的,也可以是分开的或重叠的。
00000H 逻辑段1起点 逻辑段1<=64KB 逻辑段2起点 逻辑段2<=64KB 逻辑段3起点 逻辑段3<=64KB 逻辑段4起点 逻辑段4<=64KB FFFFFH 每个段的首地址称为“段基值”, “段基值”必须能被16整除(XXXX0H)。 程序执行前,分别对相应的段寄存器CS,DS,SS,ES置“段基值”,若程序长度大于64KB,则可通过对CS送新的“段基值”将程序转移到新段中。
段地址0000 段内有效地址 + 0000 物理地址(20bit) 16bit 16bit 20bit 2. 20位物理地址的形成 逻辑地址:允许在程序中编排的地址; 物理地址:信息在存储器中实际存放的地址; 对给定的任一存储单元,有两部分逻辑地址: 段基址(段地址)——由CS,DS,SS,ES决定 段内偏移量(段内有效地址)——(该单元相对于段基址的距离)
操作类型 隐含段地址 替换段地址 偏移地址 取指令 CS 无 IP 堆栈操作 SS 无 SP BP间址 SS CS、DS、ES EA 存/取操作数 DS CS、SS、ES EA 源字符串 DS CS、SS、ES SI 目的字符串 ES 无 DI 3. 逻辑地址的来源; EA---有效地址,
归纳段寄存器和其他寄存器组合指向存储单元示意图如下:归纳段寄存器和其他寄存器组合指向存储单元示意图如下: 段寄存器和其他寄存器组合指向存储单元示意图
二、8086存储器的分体结构 1. 问题的提出: 8位机(MCS-51、8088)的存储器地址空间和数据存储格式以字节(8bit)为单位组织存储器地址空间,访问一次存储器,获得一个字节的数据。 而8086CPU的数据总线为16位,CPU除了可以对一个字节寻址外,还必须能进行一个字的读写。即:如何组织数据存储格式使CPU访问一次存储器,获得一个字的数据。
D15 D8 D7 D0 00001 00000 00003 00002 00005 00004 512K*8bit A0=1 512K*8bit A0 =0 FFFFF FFFFE (3)用地址线A0和BHE信号选择存储体 硬件条件: (1)将1M的存储空间分成两个存储体:偶地址和奇地址存储体 (2)将数据总线的低8位与偶地址存储体数据线相连,数据总线的高8位与奇地址存储体数据线相连。
A1—A19 地址 锁存 器 8086 A0—A19 偶 存储 体 奇 存储 体 A0 D8—D15 D0—D7 BHE A0 操作 总线使用情况 0 0 从偶地址开始读/写一个字 AD15--AD0 0 1 从奇地址开始读/写一个字节 AD15--AD8 1 0 从偶地址开始读/写一个字节 AD7--AD0 1 1 无效 BHE BHE
1422DH 1422EH L(低8bit) 字节地址 字节地址 H(高8bit) 1422FH 字(16bit)数据地址1422EH 低位在低地址,高位在高地址 14230H 数据存放格式条件: 存储器二个连续字节组成一个字,一个字中的每一个字节都有各自的字节地址。存入时以低位字节在低地址,高位字节在高地址的次序存放,字单元的地址以低位地址表示。若要求8086在一个总线周期访问一个整字(16位)时,则该字的地址为偶地址(“对准好”的字)。如果则该字的地址为奇地址(“未对准好”的字),则8086要用两个连续的总线周期访问一个整字,每个周期访问一个字节。
三、堆栈的概念 堆栈是利用RAM区中某一指定区域(由用户规定),用来暂存数据或地址的存储区。堆栈段是由段定义语句在内存中定义的一个段,段基址由SS指定。 堆栈存取数据的原则是“先进后出”,存取数据的方法是压入(PUSH)和弹出(POP)。 堆栈区的栈底是固定的最高地址,其栈顶根据堆栈数据的压入或取出的变化不断改变。栈顶是堆栈区的最低地址,用堆栈指针SP指示。 每执行一条PUSH指令, SP=(SP)-2,向堆栈压入16bit数据。以字为单元操作。 每执行一条POP指令,从堆栈弹出16bit数据, SP=(SP)+2。
(AX)=9536H (BX)=0475H 36H 95H (AX)=0475H (BX)=9536H 00FAH 00FBH 00FCH 00FDH 00FEH 00FFH 0100H 4、(00FCH)→ AL (00FDH)→AH (SP)+2→SP (SP)=00FEH 2、 (SP)-2→SP (AH)→00FFH (AL)→00FEH (SP)=00FEH 3、 (SP)-2→SP (BH)→00FDH (BL)→00FCH (SP)=00FCH 75H 04H 75H 36H 04H 95H 5、 (00FEH) →BL (00FFH) →BH (SP)+2→SP (SP)=0100H 1、设栈底 (SP)=0100H 例:执行压栈和出栈的过程 1、MOV SP,0100H 2、PUSH AX 3、PUSH BX 4、POP AX 5、POP BX
人。(躯干 -> 手脚->引脚) • 功能(眼睛 ->看 嘴->说 手->拿 脚->走) 各个引脚都有其作用,功能复用(残疾手) 理解各个引脚的专门作用. • 拿东西我(给我一个笔(眼看,嘴说,腿走->手拿)) • 你 (给你一个笔 (眼看,手拿,嘴说)) • 特殊情况我要 手拿……………….不给 你给 给你………………..不拿 等待状态.这个就是时序.
2-3 8086的引脚功能 • 8086CPU是16位处理器,采用40引脚的DIP封装。40条引脚信号按功能可分为4部分:地址总线,数据总线,控制总线以及其他(时钟、电源)。
8086/8088的引脚图 8086/8088 4039383736353433323130292827262524232221 VCC(5V) GND 0102030405060708091011121314151617181920 AD15/A15 AD14/A14 A16/S3 AD13/A13 A17/S4 AD12/A12 A18/S5 AD11/A11 AD10/A10 A19/S6 /BHE/S7HIGH(SSO) AD9/A9 MN/MX* AD8/A8 /RD AD7 HOLD(/RQ/GT0*) AD6 AD5 HLDA(/RQ/GT1*) /WR(/LOCK) AD4 M//IO(/S2) AD3 DT//R(/S1) AD2 /DEN(/S0) AD1 ALE(QS0) AD0 /INTA(QS1) NMI /TEST INTR READY CLK RESET GND
引脚说明 • 一.数据/地址总线: • AD0~AD15:地址数据复用引脚,用作数据线时,可以双向工作。在时钟周期T1输出地址,T2输出数据A19/S6~ A16/S3 :地址状态复用引脚,用作数据线时,可以双向工作。在时钟周期T1输出A19~A16高四位地址。在时钟周期T2开始,输出S6~S3状态信息。
RD:读信号引脚(输出) 此信号指出将要执行一个对内存或I/O端口的读操作,与M/IO信号 结合,RD信号在T2、T3和TW状态均为低电平,有效。 • M/IO:存储器 /输入输出控制信号(输出) • BHE/S7:高8位数据总线允许/状态复用引脚(输出) 在T1状态,8086输出BHE信号,表示AD15-AD8数据有效。 当低电平有效时,表示CPU当前正在进行存储器或I/O写操作, 它与M/IO配合,分别实现对存储器与I/O的写入。 • WR :写信号(输出) 二.控制总线 1.与读写数据有关 S7没有意义,S7=0. 高电平时,CPU和存储器之间进行数据传输。 低电平时,CPU和输入输出设备之间进行数据传输。
DT/R :数据收发方向控制信号(输出) DT/R为低电平时,数据接收,即CPURAM或I/O. DT/R为高电平时,数据发送,即CPURAM或I/O. • :数据允许信号(输出、低电平有效) 1.与读写数据有关 • ALE:地址锁存允许(输出) 高电平有效,在T1状态,ALE有效,将地址/数据复用总线上输 出的地址 为数据总线收发器74LS245提供控制信号,当该信号为低电平时, 允许CPU发送或接收一个数据。 它和DEN结合对数据收发器控制。 • READY:准备好信号(输入)
:中断应答信号(输出) 2.与中断有关 • NMI :非屏蔽中断(输入) NMI信号时一个由低到高的上升沿。这类中断不受中断标志IF的影响, 也不能用软件屏蔽,每当NMI端进入一个正沿触发信号时,CPU就会 在结束当前指令后,进入对应于中断类型号为2的非屏蔽中断处理程序。 • INTR :可屏蔽中断请求(输入) 对外设的中断请求INTR作出响应回答,当低电平有效时,表示 CPU允许外设的中断请求。
3.与总线控制有关 • HOLD :总线请求信号(输入) 其它部件(如DMA控制器)要占用系统总线时,通过此引脚 向CPU发出总线请求,该输入端高电平有效。 • HLDA:总线响应信号(输出) 高电平有效,当CPU收到总线请求HOLD后,如CPU允许让 出总线,在当前总线周期完成时,于T4状态发出HLDA信号, CPU让出总线控制权。 当CPU检测到HOLD信号变成低电平后,则它使HLDA变成 低电平,同时又控制总线。
TEST :测试信号(输入) • MN/MX :最小/最大模式控制信号(输入) 三.其它引脚 • CLK:时钟信号引脚(输入) 时钟信号为CPU和总线控制逻辑电路提供定时手段。 • RESET :复位信号(输入) 高电平有效:8086/8088要求高电平至少维持4个时钟周期。 低电平有效,当CPU检测到该信号为低时,等待状态结束,CPU继续往下执行被暂停的指令。 • GND地和VCC电源引脚 :
“引脚”小结 CPU引脚是系统总线的基本信号 可以分成三类信号: • 8位数据线:D0~D15 • 20位地址线:A0~A19 • 控制线: • #BHE/S7、 NMI 、 INTR、#INTA 、 #WR、 • #RD、 ALE、 M /# IO 、READY、HOLD、HLDA、 #DEN、DT/#R、 • RESET、CLK、Vcc、GND、 有问题!
“引脚”提问 • 提问之一: CPU引脚是如何与外部连接的呢? • 解答:总线形成 • 提问之二: CPU引脚是如何相互配合, 实现总线操作、控制系统工作的呢? • 解答:总线时序
一、 最小模式系统(MN/ MX引脚接+5V电源) 2-4 8086的系统配置 特点:系统中存储器芯片,I/O芯片不多; 地址总线由AD0~AD15,A16/ S3 ~A19/ S6通过8282锁存器构成; 数据总线直接由AD0~AD15构成(也可加总线驱动8286); 控制总线由CPU的控制线提供,构成一小型、单处理机系统。
Vcc A -A 16 19 Vcc MN/MX RD WR CLK 8284 IO/M READY INTA 时钟 发生器 RESET INTR 地址总线 ALE STB 8086 CPU 8282 OE AD -AD 0 15 存储器 I/O接口 在最小模式系统中,还需加入: 1片8284A 3片8282/8283 2片8286/ 8287 BHE BHE 数据总线 DT/R T 8286 DEN OE 8088最小组态系统配置图
* 8088的指令队列长度为4个字节,队列中出现1个空闲字节时,BIU自动访问存储器取指补充指令队列; *8088的地址/数据复用线为8条,即AD7~AD0,访问1个字需两个读写周期; * 8088 中的存储器/IO控制线为 IO /M ,与8086相反; * 8086的引脚BHE/S7在8088中为SS0 ,与DT/ R、IO/M一起决定最小模式中的总线周期操作。 三、 8088的引脚与8086的不同之处
2-5 8086CPU时序 一. 指令周期、总线周期、时钟周期 指令周期(Instruction Cycle): 执行一条指令所需要的时间。 (一个指令周期由一个或若干个总线周期组成) 总线周期(Bus Cycle ): CPU完成对存储器或I/O端口一次访问所需的时间; 时钟周期(Clock Cycle):时钟频率的倒数,是CPU的时间基准(T状态);(若8086的主频为5MHZ,一个时钟周期为200ns)