文章目录
零、前言
- 1978年Intel 公司推出8086
- 是典型的16位微处理器,兼容Intel 8位处理器8085
- CISC结构
- 高性能金属氧化物半导体(high performance metal-oxide-semiconductor,HMOS),单一 +5V供电
- 典型时钟频率 4.77MHz,最高可达10MHz
- 内部数据总线和外部数据总线都是16位,地址总线为20位,可最大寻址1MB的存储空间。
- 1979年推出的8088微处理机作为8086的简化版,外部数据信号线降到8位,以使 8088微处理器能够获得已开发的8位硬件的支持
- 8086微处理器采用双列直插式封装,共有40个引脚,外部数据总线与地址总线分时复用以减少芯片引脚。8086微处理器的内存采用分段的管理方式。
一、8086微处理器的内部结构
上图为8086微处理器内部结构框图。一个是总线接口单元(bus interface unit,BIU),另一个是执行单元(execution unit,EU),二者并行工作。
2.1.1 总线接口单元
1.BIU的组成
- CS、DS、SS、ES为4个16位段寄存器
- IP为16位指令指针
- 下面有6字节指令队列,8086可以缓存6字节的指令代码,为EU部分提供要执行的指令
- 总线控制逻辑
- 20位地址加法器。上面有四个段寄存器,就是把物理地址划分为四段,地址加法器通过将段基址左移四位和16位段内偏移地址相加得到物理地址。
2.总线接口单元的功能
8086:指令队列有2B以上空闲称为不满。
8088:指令队列有1B以上空闲称为不满。
- 取指令。指令队列不满时,自动按照CS:IP组成20位物理地址,到存储器中去取指令,一次取2个字节(8086)
- 形成物理地址。BIU将16位段地址左移4位形成20位(相当于乘以16)后,再与16位偏移地址通过地址加法器相加得到20位物理地址。
- 传送数据。实现CPU与内存、I/O端口间的数据传送
2.1.2 执行单元
1.执行单元的组成
- 16位ALU
- 16位标志寄存器
- EU控制电路
- 8个16位通用寄存器
2.执行单元的功能
EU 完成控制器的功能,它负责执行指令并对相应的硬件部分进行控制,它的主要功能就是完成全部指令的执行。EU 完成以下主要任务:
- 从BIU指令队列读取指令。
- 由EU控制电路译码分析。
- 在EU中计算操作数的16位偏移地址送BIU,由BIU的Σ形成20位物理地址。
- 将取来的操作数送ALU进行指令运算。
- 结果送寄存器或送BIU放到内存。
- 本次操作状态放到标志寄存器中。
2.1.3 8086微处理器结构特点
8086内部由BIU、EU两个独立单元,可独立完成总线操作和执行指令的任务,即两个单元可重叠工作,总线利用率提高,降低存储器的存取速度要求,这种重叠技术以前只在大型机中使用
8086结构特点:
- 由BIU、EU两个独立单元组成。
- 取指和执行重叠。
二、8086微处理器编程结构
在编程结构上,8086微处理器有14个16位寄存器
这14个寄存器按照功能特点分为3大类,即
- 通用寄存器:数据寄存器、指针和变址寄存器
- 段寄存器:CS、SS、DS、ES
- 控制寄存器:指令指针、标志寄存器
2.1 通用寄存器
1、数据寄存器
数据寄存器主要用于保存操作中使用的数据,包含4个16位寄存器,分别是累加器AX、基址寄存器 BX、计数寄存器 CX以及数据寄存器 DX
每一个16位的数据寄存器可以分成两个8位寄存器,这4个16位数据寄存器AX、BX、CX、DX可依次分为高8位(AH、BH、CH和DH)和低8位(AL、BL、CL和DL)
- 这两组8位寄存器能分别寻址。
- 可以把一个数据寄存器当作一个16位寄存器,也可用作两个8位寄存器。
- 有专门功能,如计数器、累加器等
2、指针和变址寄存器
指针和变址寄存器包含以下4个16位寄存器
- SP:堆栈指针,存放堆栈栈顶地址的段内偏移量,对应的段为堆栈段。
- BP:基址指针,往往用于对堆栈段进行间接寻址时存放段内偏移量,寻址时隐含段为堆栈段
- SI:源变址寄存器,存放源操作数的段内偏移地址,也可存放一般的数据,寻址时隐含段为数据段
- DI:目的变址寄存器,存放目标操作数的段内偏移地址,也可存放一般的数据。寻址时隐含段为数据段,在字符串操作中隐含段为附加段。
2.2 段寄存器
4个16位寄存器,位于总线接口单元中。
- CS:代码段寄存器,Code Segment,存放当前执行程序的段起始地址
- SS:堆栈段寄存器,Stack Segment,存放当前堆栈段的段起始地址
- DS:数据段寄存器,Data Segment,存放当前数据段的段起始地址,一般情况下,程序中的变量存放在这个段中
- ES:附加段寄存器,ExtraSegment,存放当前附加段的段起始地址,附加段用来存放数据或存放处理后的结果。
2.3 控制寄存器
1、指针寄存器
指令指针 IP(Instruction Pointer)是一个16位的寄存器,IP指向当前代码段中下一条要取出的指令的偏移地址,即IP和CS一起指出了下一条要取出的指令的实际地址。
它实质上相当于程序计数器 PC。IP 的内容由 BIU 来修改,程序员不能对IP进行存取操作,程序中的转移指令返回指令以及中断指令能对 IP 进行操作。
2、标志寄存器
Flag标志寄存器:是一个16位寄存器,定义了9个标志位。其中6个为状态标志位,3 个为控制标志位
- CF(Carry Flag)进位标志:当进行加法运算时结果产生进位,或在减法运算时结果产生借位,则CF=1,否则CF=0。也有其他一些指令会影响CF。
- AF(Auxiliary Flag)辅助进位标志:当加法运算时,如果低4位向高位有进位,或减法运算时,如果低4位向高位借位,则AF=1,否则AF=0.AF 常用于二-十进制代码(binary codeddecimal,BCD)的加法调整。
- PF(Parity Flag)奇偶标志:若运算结果低8位所含1的个数为偶数,则PF = 1,否则PF = 0。
- ZF(Zero Flag)零标志位:当运算结果为零时 ZF=1,否则 ZF=0。
- SF(Sign Flag)符号标志:当运算结果为负时SF = 1,否则SF = 0。SF的值就是有符号数的最高位(符号位)的值
- OF(Overflow Flag)溢出标志位:
- DF(Direction Flag):有符号数算术运算,结果超出其所能表示的数值范围,OF = 1,否则OF = 0.
- IF(Interrupt Enable Flag)中断允许:IF = 1,允许可屏蔽中断(开中断),IF = 0,关中断
- TF(Test Flag):TF = 1,微处理器按单步方式执行指令,执行一条指令就产生一次类型为 1 的内部中断(单步中断),因此有时称它为跟踪标志。
三、8086 微处理器外部结构
8086 微处理器外部采用 40 引脚双列直插式封装,8086微处理器有两种工作模式:最大模式、最小模式。有些引脚在不同的模式下功能有所不同。
518165603459.png&pos_id=img-jFaJLZXu-1716209915040)
3.1 两种模式下功能相同的引脚
- V C C V_{CC} VCC、GND:电源、接地引脚,8086微处理器采用单一的 + 5V 电源,但有两个接地引脚。
- A D 15 AD_{15} AD15~ A D 0 AD_{0} AD0: 地址/数据复用输入/输出引脚,共16条线,分时输出低16位地址及进行数据信号的传输。经地址锁存器输出对应的地址信号为 A 15 A_{15} A15~ A 0 A_{0} A0。
- A 19 / S 6 A_{19}/S_{6} A19/S6 ~ A 16 / S 3 A_{16}/S_{3} A16/S3: 地址/状态复用输出引脚,分时输出地址的高4位及状态信息,其中 S 6 S_{6} S6为 0 用以指示8086微处理器当前与总线连通, S 5 S_{5} S5为1表明8086微处理器可以响应可屏蔽中断, S 4 S_{4} S4、 S 3 S_{3} S3 共有4个组态,用以指明当前使用的段寄存器,00 为 ES,01为SS, 10为CS,11为 DS。
- NMI, INTR: 中断请求信号输入引脚、中断源向微处理器提出的中断请求信号。NMI为非屏蔽中断请求信号,上升沿有效; INTR为可屏蔽中断请求信号,高电平有效。
- R D ‾ \overline {RD} RD: 读控制输出信号引脚,低电平有效,用以指明要执行一个对内存单元或 I/O 端口的读操作,具体是读内存单元还是读 I/O 端口取决于 M / I O ‾ M/\overline {IO} M/IO控制信号。 M / I O ‾ M/\overline {IO} M/IO为 1 表示读存储器,为0表示读 I/O 端口。
- CLK: 时钟信号输入引脚,时钟信号为 1 / 3 周期高电平、2 / 3 周期低电平的方波。
- RESET: **复位信号输入引脚,高电平有效。**8086 微处理器要求复位信号至少维持 4 个时钟周期才能起到复位的效果,复位信号输入之后,微处理器结束当前操作,并对微处理器的标志寄存器、IP、DS、SS、ES等寄存器进行清零操作,指令队列清空,CS设置为FFFFH
- READY: 就绪状态信号输入引脚,高电平有效,用于主存或 I/O 接口向微处理器发送状态信号,表明内存单元或 I/O 端口已经准备好进行读写操作。该信号是协调微处理器与内存单元或 I/O 端口之间操作的联络信号。
- T E S T ‾ \overline{TEST} TEST: 测试信号输入引脚,低电平有效。微处理器执行 WAIT 指令后,测试 T E S T ‾ \overline{TEST} TEST 信当TEST引脚为低电平时,脱离等待状态,继续执行指令。
- M N / M X ‾ MN/\overline{MX} MN/MX: **最小/最大模式设置信号输入引脚,该输入引脚电平的高、低决定了微处理器工作在最小模式还是最大模式,**当该引脚接+5V时,微处理器工作于最小模式,当该引脚接地时,微处理器工作于最大模式。
-
B
H
E
‾
/
S
7
\overline{BHE}/S_{7}
BHE/S7: **高 8 位数据允许/状态复用信号输出引脚,**分时输出
B
H
E
‾
\overline{BHE}
BHE有效信号和
S
7
S_{7}
S7状态信号。
B
H
E
‾
\overline{BHE}
BHE 表示高8位数据线
D
15
D
8
‾
\overline{D_{15}~D_{8}}
D15 D8上的数据有效,但
S
7
S_{7}
S7未定义任何实际意义。
-
利用 B H E ‾ / S 7 \overline{BHE}/S_{7} BHE/S7信号,可知系统当前的操作类型,具体规定如下表所示:
-
-
在8088微处理器系统中,第 34 引脚为 S S 0 ‾ \overline{SS_{0}} SS0。,用来与 D T / R ‾ DT/\overline R DT/R、 M ‾ / I O \overline M/IO M/IO 一起决定 8088 微处理器芯片当前总线周期的读写操作,如下表所示:
-
-
3.2 两种模式下功能不同的引脚
8086微处理器的 24~31共8个引脚 的名称及功能在最小模式、最大模式下是不同的
第 24脚 I N T A ‾ 、 Q S 1 \overline {INTA}、QS_{1} INTA、QS1: 在最小模式下为 I N T A ‾ \overline{INTA} INTA,中断响应信号输出引脚,低电平有效, 该引脚是微处理器响应中断请求后,向中断源发出的应答信号,用以通知中断源,以便中断源提供中断类型码, 在中断响应周期, 该信号为两个连续的负脉冲。在最大模式下为 Q S 1 QS_{1} QS1。
第 25 脚 A L E 、 Q S 0 ALE、QS_{0} ALE、QS0: 在最小模式下为 ALE,地址锁存允许输出信号引脚,高电平有效,微处理器通过该引脚向地址锁存器发出地址锁存允许信号,把当前地址/数据复用总线上输出的地址信息,锁存到地址锁存器中。在最大模式下为 Q S 0 QS_{0} QS0。
在最大模式下 Q S 1 QS_{1} QS1、 Q S 0 QS_{0} QS0为指令队列状态信号输出引脚,这两个信号的组合给出了前一个 T 状态中指令队列的状态,以便于外部对微处理器内部指令队列的动作跟踪,其定义如下表:
第 26 脚 D E N ‾ \overline{DEN} DEN、 S ‾ 0 \overline S_{0} S0: 在最小模式下为DEN,数据允许输出信号引脚,低电平有效,为总线收发器提供一个使能控制信号,表示微处理器当前准备发送或接收一个数据。在最大模式下为 S 0 ‾ \overline {S_{0}} S0。
第 27 脚 D T / R ‾ DT/\overline{R} DT/R、 S 1 ‾ \overline{S_{1}} S1: 在最小模式下为 DT/ R ‾ \overline{R} R,数据收发控制信号输出引脚,微处理器通过该引脚发出控制数据传送方向的信号,当该信号为高电平时,表示数据由微处理器经总线收发器输出,否则,数据传送方向相反。在最大模式下为 S 1 S_{1} S1。
第 28 脚 M / I O ‾ M/\overline{IO} M/IO、 S 2 ‾ \overline{S_{2}} S2: 在最小模式下为 M / I O ‾ M/\overline{IO} M/IO,存储器、I/O 端口选择信号输出引脚, 用于说明当前微处理器访问存储器还是I/O端口。当该引脚输出高电平时,表明微处理器要进行存储器的读写操作,地址总线上出现的地址是访问存储器的地址; 当该引脚输出低电平时,表明微处理器要进行 I/O端口的读写操作,低位地址总线上出现的地址是 I/O 端口的地址。在最大模式下为 S 2 S_{2} S2。
在最大模式下 S 2 ‾ \overline {S_{2}} S2、 S 1 ‾ \overline {S_{1}} S1、 S 0 ‾ \overline{S_{0}} S0 是总线周期状态信号输出引脚,低电平信号输出。这些信号的组合指出当前总线周期中数据传输的类型,总线控制器利用这些信号来产生对存储器、I/O 端口的控制信号。 S 2 ‾ \overline {S_{2}} S2、 S 1 ‾ \overline {S_{1}} S1、 S 0 ‾ \overline{S_{0}} S0 与总线操作过程之间的对应关系如下表所示:
第 29 脚 W R ‾ 、 L O C K ‾ \overline{WR}、\overline{LOCK} WR、LOCK: 在最小模式下为 W R ‾ \overline{WR} WR,写控制信号输出引脚,低电平有效, 与 M / I O ‾ M/\overline{IO} M/IO 配合实现对存储单元、I/O 端口所进行的写操作控制。在最大模式下为 L O C K ‾ \overline{LOCK} LOCK, 总线封锁输出信号引脚,低电平有效,当该引脚输出低电平时,表示微处理器不希望系统中其他总线部件占用系统总线。
L O C K ‾ \overline{LOCK} LOCK 信号是由指令前缀 LOCK 产生的, 在执行带有 LOCK 前缀的指令时, L O C K ‾ \overline{LOCK} LOCK 信号有效,执行完毕之后,便撤销 L O C K ‾ \overline{LOCK} LOCK 信号。当一条指令有多个总线周期,在执行时希望这些总线周期连续完成时使用前缀LOCK。此外,在8086微处理器的两个中断响应脉冲之间, L O C K ‾ \overline{LOCK} LOCK 信号也自动变为有效,以防止其他总线部件在中断响应过程中占用总线。
第 30 脚 HLDA、 R Q ‾ / G T 1 ‾ \overline{RQ}/\overline{GT_{1}} RQ/GT1: 在最小模式下为HLDA,总线保持响应信号输出引脚,高电平有效,表示微处理器让出总线控制权。在最大模式下为 R Q ‾ / G T 1 ‾ \overline{RQ}/\overline{GT_{1}} RQ/GT1
第31脚 HOLD、 R Q ‾ / G T 0 ‾ \overline{RQ}/\overline{GT_{0}} RQ/GT0: 在最小模式下为HOLD,总线保持请求信号输入引脚,高电平有效,用于微处理器接收其他总线部件发出的总线请求信号。在最大模式下为 R Q ‾ / G T 0 ‾ \overline{RQ} / \overline{GT_{0}} RQ/GT0
在最大模式下 R Q ‾ / G T 1 ‾ \overline{RQ}/\overline{GT_{1}} RQ/GT1、 R Q ‾ / G T 0 ‾ \overline{RQ}/\overline{GT_{0}} RQ/GT0 为总线请求信号输入/总线允许信号输出引脚。这两个信号端可供微处理器接收其他总线部件的总线请求信号和发送应答信号。这两个引脚都是双向的,请求与应答信号在同一引脚上分时传输,方向相反。其中 R Q ‾ / G T 1 ‾ \overline{RQ}/\overline{GT_{1}} RQ/GT1 比 R Q ‾ / G T 0 ‾ \overline{RQ}/\overline{GT_{0}} RQ/GT0 的优先级高。
四、8086微处理器的两种组成模式
可以用8086微处理器组成适用于不同环境下的微型计算机系统。当组成小型的微型计算机系统时,8086微处理器处于一种最小结构下,称为最小模式。当组成大型的微型计算机系统时,8086微处理器处于一种最大结构下,称为最大模式
4.1 8086微处理器的最小模式
当8086微处理器的MN/MX引脚接+5V时,组成最小模式微型计算机系统,如下图所示。其中8284为时钟产生/驱动器,外接晶体的基本振荡频率为15MHz。8284对该频率进行三分频后,产生 5MHz 时钟信号CLK。此时钟信号作为系统时钟,并经CLK引脚直接送至8086,作为微处理器的时钟信号。
8282为 8 位的地址锁存器,8086 访问存储器和 I/O 设备时,在总线周期的 T 1 T_{1} T1 状态,送出地址信号,同时发出允许地址锁存信号ALE。借助于允许地址锁存信号ALE,将 A 19 ∼ A 16 A_{19} \sim A_{16} A19∼A16、 A D 15 ∼ A D 1 AD_{15} \sim AD_{1} AD15∼AD1的地址信号锁存到 8282 锁存器中,在 8086 微处理器访问存储器(或I/O设备)操作数期间,保持不变,为外部电路提供了一个稳定的地址信号。8086系统有20位地址总线 A 19 ∼ A 0 A_{19}\sim A_{0} A19∼A0,其存储空间为1MB(寻址范围是00000H~FFFFFH)。
8286 为 8 位的具有三态输出的双向数据收发器,用于传输数据。在总线周期的 T 2 ∼ T 4 T_{2} \sim T_{4} T2∼T4状态,总线 A D 15 ∼ A D 0 AD_{15}\sim AD_{0} AD15∼AD0, 用来传输数据。地址总线的最低位 A 0 A_{0} A0 和总线高 8 位数据允许信号 B H E ‾ \overline{BHE} BHE分别读写存储器的偶体和奇体。
在最小模式下,由 8086 微处理器本身产生全部总线控制信号: D T / R ‾ DT/\overline{R} DT/R、 D E N ‾ \overline{DEN} DEN、 I N T A ‾ \overline{INTA} INTA、ALE 和 M / I O ‾ M/\overline{IO} M/IO 以及读写控制信号 R D ‾ \overline{RD} RD、 W R ‾ \overline{WR} WR。
4.2 8086微处理器的最大模式
若将8086微处理器的引脚MN/MX接地,则可组成 8086 微型计算机系统的最大模式。下图是8086微处理器最大模式典型的系统结构。在最大模式系统中,增加了总线控制器 8288。8288 总线控制器利用 CPU 送给它的状态信号 S 2 ‾ \overline {S_{2}} S2、 S 1 ‾ \overline {S_{1}} S1、 S 0 ‾ \overline{S_{0}} S0产生总线周期中所需要的全部控制信号,使总线控制功能更加完善
最大模式下,对总线的共享可能有3种情况:
- 8086CPU本身占用总线,此时,由总线控制器 8288 发出相应命令。
- DMA请求,此时,封锁 8288 命令输出,由DMA控制传送:
- 协处理器占用总线,通过RQ/GT向8086请求,然后8086释放总线。
五、 8086 微处理器的总线周期
8086 微处理器最大模式与最小模式的总线周期不同,主要差别在于控制信号线。最小模式的所有控制信号直接由微处理器对应的引脚输出,最大模式的控制信号由 S 2 ‾ \overline {S_{2}} S2、 S 1 ‾ \overline {S_{1}} S1、 S 0 ‾ \overline{S_{0}} S0 输出的信号经总线控制器 8288 产生,它生成 D T / R ‾ DT/\overline{R} DT/R、DEN、ALE以及存储器读写控制信号 M E M R ‾ 、 M E M W ‾ \overline{MEMR}、\overline{MEMW} MEMR、MEMW和IO读写控制信号 I O R ‾ \overline{IOR} IOR、 I O W ‾ \overline{IOW} IOW
5.1 基本概念
工作时序: 微处理器按照一定的时序工作
时钟周期: CPU主频每个时钟脉冲的持续时间。用一个"T"表示。
总线周期: CPU通过总线进行一次读或写的过程。总线读操作包括取指令、读存储器、读I/O接口,总线写操作包括写存储器、写I/O接口。还有一些特殊总线周期。
指令周期: 执行一条指令所需要的时间。
总线请求响应: 利用总线传输数据时,总线控制部件必须获得总线的控制权。总线请求是总线控制部件发出的占用总线的请求信号,总线响应是当前控制总线的部件或总线控制器在接收到总线请求后,给出的应答信号。
中断响应总线周期: 中断响应是CPU接受中断请求后的处理过程. 在响应中断时,CPU在当前指令结束后,插入两个总线周期,发出中断应答,并通过总线获取中断类型码。
8086 微处理器时钟状态
8086一个基本的总线周期由4个时钟周期组成, 每个时钟称为 T 状态,用T1、T2、T3、和T4表示。
TI状态: CPU发出地址,CPU将存储器地址或I/O端口的地址送上地址总线。
T2状态: 撤地址, 发控制信号。进行读写准备,CPU撤销地址/数据、地址/状态复用线上的地址,地址/数据复用线浮置、地址/状态复用线输出状态,即复用信号在这个期间切换,读写控制信号有效。
T3状态: **地址/数据线上出现数据。 ** **写操作,CPU提供数据;读操作,等待存储器或I/O提供数据。 ** 查READY信号,未就绪,插入TW。TW的操作与T3相同
T4状态:完成数据读/写,控制信号无效。结束总线操作。
5.2 8086 微处理器总线读周期
8086 微处理器 最小模式总线读周期
在T1期间,引脚 A 19 / S 6 A 16 / S 3 、 A D 15 A D 0 A_{19}/S_{6}~A_{16}/S_{3}、AD_{15}~AD_{0} A19/S6 A16/S3、AD15 AD0,分别送出地址 A 19 ∼ A 16 、 A 15 ∼ A 0 , B H E ‾ / S 7 A_{19}\sim A_{16}、A_{15}\sim A_{0},\overline{BHE}/S_{7} A19∼A16、A15∼A0,BHE/S7输出 B H E ‾ \overline {BHE} BHE信号,同时ALE有效。可以利用ALE将地址信号锁存到地址锁存器中,在锁存器的输出端得到 20位地址信号 A 19 ∼ A 0 A_{19}\sim A_{0} A19∼A0,一般 B H E ‾ \overline {BHE} BHE也被锁存。当引脚 A 19 / S 6 ∼ A 16 / S 3 、 A D 15 A D 0 A_{19}/S_{6}\sim A_{16}/S_{3}、AD_{15}~AD_{0} A19/S6∼A16/S3、AD15 AD0信息变化时,地址锁存器仍输出地址信号。 M / I O ‾ M/\overline{IO} M/IO的状态说明地址信号为存储器单元地址还是 I/O 端口地址。 D T / R ‾ DT/\overline{R} DT/R 变低,表示数据为读入微处理器。
在T2期间,信号复用线进行功能切换,引脚 A 19 / S 6 ∼ A 16 S 0 、 B H E ‾ / S 7 A_{19}/S_{6} \sim A_{16} S_{0}、\overline{BHE}/S{7} A19/S6∼A16S0、BHE/S7分别输出 S 6 ∼ S 3 S_{6}\sim S_{3} S6∼S3及 S 7 S_{7} S7(无定义)信号 。引脚 A D 15 ∼ A 0 AD_{15}\sim A_{0} AD15∼A0变为高阻态,为切换到数据输入状态做准备。 D E N ‾ \overline{DEN} DEN变低、 R D ‾ \overline{RD} RD变低,启动读操作
在T3期间,引脚 A D 15 ∼ A D 0 AD_{15} \sim AD_{0} AD15∼AD0,为数据输入线,存储器或 I/O 端口把 A 19 ∼ A 0 A_{19}\sim A_{0} A19∼A0 指示的地址中的数据放到数据总线上。
在T4期间,微处理器读入数据线上的数据,并使所有信号线处于无效状态。
8086 微处理器 最大模式总线读周期
在总线周期一开始就输出 S 2 ‾ \overline {S_{2}} S2、$\overline {S_{1}}、\overline {S_{0}} $,由总线控制器8288生成对应的控制信号,进而控制完成总线读周期。最大模式总线读周期主要过程如下
在T1期间,首先发送状态信号,并由总线控制器生成ALE、 D T / R ‾ DT/\overline R DT/R。其他与最小模式相同。
在T2期间,读控制信号送到存储器或 I/O 端口。
在T3期间,数据已读出,送上数据总线。若数据没能及时读出,则与最小模式一样自动插入 Tw。
在T4期间,状态信号进入高阻, S 2 ‾ \overline {S_{2}} S2、$\overline {S_{1}}、\overline {S_{0}} $ 根据下一个总线周期的类型进行变化。
5.2 8086 微处理器总线写周期
下图是 8086 微处理器最小模式总线写周期时序
在 T1 状态,引脚 A 19 / S 6 ∼ A 16 / S 0 、 A D 15 ∼ A D 0 、 B H E ‾ / S 7 、 A L E 、 M / I O ‾ A_{19}/S_{6}\sim A16/S_{0}、AD_{15}\sim AD_{0}、\overline{BHE}/S_{7}、ALE、M/\overline{IO} A19/S6∼A16/S0、AD15∼AD0、BHE/S7、ALE、M/IO 的操作与读周期一样。 D T / R ‾ DT/\overline {R} DT/R 变为高,表示数据为微处理器写。
在 T2 状态,引脚 A D 15 ∼ A D 0 AD_{15}\sim AD_{0} AD15∼AD0 的操作与读周期一样。 W R ‾ \overline {WR} WR 变低,表示数据为微处理器写。
在 T3 状态,引脚 A D 15 ∼ A D 0 AD_{15}\sim AD_{0} AD15∼AD0 维持数据输出。微处理器在 T 3 T_{3} T3周期检测 READY 引脚状态,对 READY 信号的响应与读周期相同(是否插入TW)。
在 T4 状态,完成写操作周期,并使所有信号线处于无效状态
最大模式下,在总线周期一开始就输出 S 2 ‾ , S 1 ‾ , S 0 ‾ \overline {S_{2}},\overline {S_{1}},\overline {S_{0}} S2,S1,S0 由总线控制器 8288 生成对应的存储器或 I/O 写控制信号,其他过程与读周期类似。
六、8086 微处理器的存储器组织
6.1 存储器组织
地址空间:8086 有 20位地址线,按字节单元编址,直接寻址能力1M字节,地址范围为00000H - FFFFFH。每个存储单元对应一个20位的地址,这个直接通过地址线给出的地址称为物理地址。
8086支持字节数据、**字(16位)**数据的存取。
字存放在任意连续的两个单元中,低字节放在低地址中(小端方式),低字节对应的地址为这个字数据的地址。
对齐字:在偶数地址中开始存放。读写时,只需一个总线周期。
非对齐字:在奇数地址中开始存放。读写时,需两个总线周期。
6.2 存储器的分段管理
20位地址,1M空间,而8086CPU内部寄存器都是16位,无法直接提供20位地址,故分段管理,每段64K,段内地址连续,各段独立。
为了寻址每一个段,应当指明段的起始位置,这个起始位置就放在段寄存器中。
而段寄存器是16位的,我们最多保存20位地址中的16位,所以我们选择规定每个段的起始位置的实际地址应被16整除,即该地址低4位为0。这样,一个段20位起始地址的高16位就是该段的段地址,段内任一个单元的地址,用相对于段起始地址的偏移量表示,即段内偏移量,16位,64K。这些存放段基址的寄存器称为段寄存器。
在对存储器进行管理时,内存一般可分成4个逻辑段,分别称为代码段、数据段、堆栈段、附加段。代码段存放程序,数据段存放当前程序的数据,堆栈段定义了堆栈所在区域,附加段是一个扩展的数据段。系统中可能同时存在多个同一类型的段,当前使用的4个逻辑段的段基址分别放在代码段寄存器CS、堆栈段寄存器SS、数据段寄存器 DS 和附加段寄存器 ES中。
6.3 逻辑地址和物理地址
每一个存储单元都有2类地址:
物理地址:信息在存储器中实际存放的地址。地址通过地址线给出。
逻辑地址:编程中使用的地址。
逻辑地址的格式:
段地址 : 段内偏移量
**段地址:**决定该段第一个字节的位置。
**段内偏移量:**该储存单元相对于该段起点字节的距离。指令中称为有效地址EA。
物理地址计算:
物理地
址
20
位
=
段寄存
器
16
位
×
16
+
段内偏移
量
16
物理地址_{20位} = 段寄存器_{16位} \times 16 + 段内偏移量_{16}
物理地址20位=段寄存器16位×16+段内偏移量16
同一个物理地址可以用不同的逻辑地址表示.
6.4 段寄存器的使用约定
根据局部性原理,我们在访问一个段的数据后,接下来很可能仍然访问该段数据,也就是说,我们很多操作的段基址是不变的,因而在8086微处理器中我们对于访问存储器的指令,可以显式给出访问的段(称为段超越),如果不给出,则默认为对应操作类型的隐含段。
如下:
七、8086 微处理器的 I / O组织
I / O 设备不能直接与CPU总线相连,需要通过I / O接口芯片。
每个I / O芯片都有一个端口或几个端口,一个端口往往对应芯片内部的一个寄存器或者一组寄存器。
每个端口分配一个地址,称为端口地址。
8086使用低16位地址线对I / O端口进行编址,最多允许有65536个8位的I/O端口,两个编号相邻的8位端口可以组合成一个16位端口。
8086采用独立的端口编址方式,指令系统中既有访问8位端口的输入/输出指令,也有访问16位端口的输入/输出指令。
PC机使用A9 ~ A0,有1024个端口。
八、8086 微处理器的 中断系统
8086可以处理256种不同类型的中断,每一种中断都规定一个唯一的中断类型编码。CPU根据中断类型编码来识别中断源。
8086 的中断分类:
- **外部中断:**外部中断源引起的中断,INTR,NMI两个引脚分别用于判断可屏蔽中断和不可屏蔽中断。
- **内部中断:**由内部软件中断指令产生,或者在某些特定条件下,由CPU本身触发产生。
内部中断有两类:
- 软件中断: 中断指令INT n,溢出中断指令INTO,断点中断指令INT3。后面的章节会详细介绍
- **软件陷阱:**除法错误中断,单步中断。
中断向量: 中断服务程序的起始地址。一个中断向量占4个存储单元。
中断向量地址 = 中断类型码 × 4
软件中断特点:
- 不受IF控制(IF是中断允许引脚,因为软中断是非屏蔽中断)
- **不读取中断向量,**因为指令码里面已经标识出了
- 优先权高
中断优先级: (高) 除法错误 → 软件中断 → NMI → INTR → 单步(低)