Post

8086 微处理器及其外设主要功能

8086 微处理器及其外设主要功能

一、8086 微处理器

1 功能结构(编程结构)

1.1 总线接口单元(BIU)

组成:段寄存器、指令指针寄存器、内部通信寄存器、6Byte指令队列、20bit地址加法器、总线逻辑控制电路

功能:负责读取指令;完成储存器、I/O端口的读写

1.2 执行单元(EU)

组成:通用寄存器阵列、标志寄存器、算术逻辑单元、暂存器、控制与定时部件

功能:负责指令的译码和执行

2 寄存器阵列

BIU 中的:

  • CS(Code Segment):代码段寄存器
  • DS(Data Segment):数据段寄存器
  • SS(Stack Segment):堆栈段寄存器
  • ES(Extra Segment):附加段寄存器
  • IP(Instruction Pointer):指令指针寄存器

EU 中的:

  • AX(Accumulator):累加器
  • BX(Base):基数寄存器
  • CX(Count):计数寄存器
  • DX(Data):数据寄存器
  • SP(Stack Pointer):堆栈指针寄存器
  • BP(Base Pointer):基址指针寄存器
  • SI(Source Index):源变址寄存器
  • DI(Destination Index):目的变址寄存器
  • FR(Flag Register):标志寄存器

3 主要引脚及其功能

3.1 $\mathrm{AD}_{15} \sim \mathrm{AD}_0$

时分复用:

  • 在 $T_1$ 周期,输出存储器或I/O端口地址
  • 在 $T_2 \sim T_4$ 周期,传输数据

3.2 $A_{19}/S_6 \sim A_{16}/S_3$

  • 在 $T_1$ 周期用作地址线高 4 位
  • 在其他周期用来表示中断允许状态和段寄存器

$S_6$ :0 - 表示CPU占用总线
$S_5$ :1 - 表示允许可屏蔽中断;0 - 表示禁止可屏蔽中断
$S_4S_3$ :00 - 正在使用 ES ;01 - 正在使用 SS ;10 - 正在使用 CS ;11 - 正在使用 DS

3.3 $\overline{\mathrm{BHE}}/S_7$

$\overline{\mathrm{BHE}}$(Bus High Enable):
 0 - 表示高8位数据线 $D_{15} \sim D_8$ 有效;
 1 - 表示高8位数据线 $D_{15} \sim D_8$ 无效。

$\overline{\mathrm{BHE}}$$A_0$状态
0016位数据($D_{15} \sim D_0$)
01高8位数据($D_{15} \sim D_8$)
10低8位数据($D_7 \sim D_0$)
11保留

3.4 $\overline{RD}$

0 - 表示读取数据

3.5 READY

准备就绪信号线(输入)
0 - 表示存储器或I/O设备未就绪,需要等待
1 - 表示存储器或I/O设备已就绪,可以传送数据

在总线时钟 $T_3$ 的上升沿检查 READY 信号,若 READY=0 ,则需要插入 $T_w$ ;
之后的每一次上升沿都检查 READY 信号,直到 READY=1 时结束插入 $T_w$ ,进入 $T_4$ 状态。

3.6 INTR

Interrupt Request

在每个指令周期的最后一个T状态进行采样,如果为高电平,则进入中断相应周期。
可用软件屏蔽( CLI 指令):设置 IF 标志位为 0

3.7 NMI

Non-Maskable Interrupt

上升沿触发
一旦检测到上升沿,则在当前指令结束后立即进入中断服务程序
不能用软件屏蔽(IF标志位无效)

3.8 $\overline{\mathrm{TEST}}$

在执行 WAIT 指令时,8086 检测 $\overline{\mathrm{TEST}}$ 信号。
若 $\overline{\mathrm{TEST}}$ 为低电平,则 8086 继续执行 WAIT 下一条指令,否则进入空闲状态,直到 $\overline{\mathrm{TEST}}$ 变为低电平。

3.9 RESET

复位信号
当RESET为高电平并且持续4个时钟周期时,CPU进行复位

复位后的寄存器数值为:
CS=FFFFH
DS=0000H
SS=0000H
ES=0000H
IP=0000H
FR=0000H(禁止可屏蔽中断)

4 最小模式($MN/\overline{MX}=1$)下的引脚及其功能

4.1 $M/\overline{IO}$

$M/\overline{IO}=1$ ,访问存储器(MEM)
$M/\overline{IO}=0$ ,访问 I/O 端口

4.2 $\overline{WR}$

表示CPU处于写MEM或者I/O的状态

4.3 $\overline{INTA}$

中断响应信号
当CPU响应中断后,$\overline{INTA}$ 产生持续两个时钟周期的低电平

4.4 ALE

地址锁存允许信号(Address Latch Enable)

在 $T_1$ 状态时,ALE 引脚让地址锁存器 8282/8283 锁存地址总线上的地址信号。

4.5 $TD/\overline{R}$

数据收发信号

控制总线收发器8286/8287的数据传送方向。
$TD/\overline{R}=1$ ,发送
$TD/\overline{R}=0$ ,接收

4.6 $\overline{DEN}$

数据使能信号

作为总线收发器8286/8287的允许信号

4.7 HOLD(输入) HLDA(输出)

其它设备发送HOLD信号给8086请求总线的控制权;
CPU通过HLDA信号作为HOLD信号的应答信号,同时让出总线控制权。

5 最大模式($MN/\overline{MX}=0$)下的引脚及其功能

最小模式最大模式
$M/\overline{IO}$$\overline{S_2}$
$TD/\overline{R}$$\overline{S_1}$
$\overline{DEN}$$\overline{S_0}$
$\overline{WR}$$\overline{LOCK}$
$\overline{INTA}$$QS_1$
$ALE$$QS_0$
$HOLD$$\overline{RQ}/\overline{GT_0}$
$HLDA$$\overline{RQ}/\overline{GT_1}$

5.1 $\overline{S_2}$,$\overline{S_1}$,$\overline{S_0}$

$\overline{S_2}$ ,$\overline{S_1}$ ,$\overline{S_0}$ 接总线控制器 8288 ,用来产生所有有关存储器访问或 I/O 访问所需要的控制信号。

$\overline{S_2}$,$\overline{S_1}$,$\overline{S_0}$状态
000中断响应
001读I/O端口
010写I/O端口
011暂停
100取指令
101读存储器
110写存储器
111无源状态

5.2 $\overline{RQ}/\overline{GT_0}$,$\overline{RQ}/\overline{GT_1}$

这两个信号提供给外部的主控设备,用于请求并得到总线控制权。

$\overline{RQ}/\overline{GT_0}$ 比 $\overline{RQ}/\overline{GT_1}$ 有更高的优先权。

5.3 $\overline{LOCK}$

当 $\overline{LOCK}$ 信号为低电平时,告诉外部的总线主控设备不能获得对系统总线的控制权。
该信号由前缀指令“LOCK”使其有效,且一直保持到下一条指令完成以前。
在总线响应期间,CPU将它置为高阻态。

5.4 $QS_1$,$QS_0$

指令队列状态信号反映了处理器内部指令的执行情况,设置这两个引脚的目的是让外部的设备能监视CPU内部的指令队列,这样可以让协处理器8087进行指令的扩展处理。

$QS_1$,$QS_0$含义
00无操作
01来自队列中指令代码的第一个字节
10队列空
11来自队列的后续字节

6 标志寄存器

序号标志位英文中文
1CFCarry Flag进位标志
2PFParity Flag奇偶标志
3AFAuxiliary Carry Flag辅助进位标志
4ZFZero Flag零标志
5SFSign Flag符号标志
6TFTrap Flag陷阱标志
7IFInterrupt-enable Flag中断允许标志
8DFDirection Flag方向标志
9OFOverflow Flag溢出标志
  1. CF:无符号计算在最高位产生了进位或借位时,CF=1;反之,CF=0
  2. PF:算术逻辑运算的结果中低8位“1”的个数为偶数个时,PF=1;为奇数时,PF=0
  3. AF:在运算过程中,第四位向第五位有进位或借位时,AF=1;反之,AF=0
  4. ZF:当运算结果全零时,ZF=1;反之,ZF=0
  5. SF:当运算结果为正数,即结果的最高位为0时,SF=0;反之,即结果的最高位为1时,SF=1
  6. TF:当TF=1时,CPU进入单步工作方式;当TF=0时,正常执行程序
  7. IF:当IF=1时,CPU可以响应外部可屏蔽中断请求;当IF=0时,CPU不响应外部可屏蔽中断请求。但IF对不可屏蔽中断或内部中断没有影响
  8. DF:当DF=0时,以地址增量的顺序处理数据串;当DF=1时,以地址减量的顺序处理数据串
  9. OF:带符号数运算结果超出了补码所能表示的范围,OF=1;反之,OF=0。OF=最高位进位与次高位进位的异或

7 堆栈

8086 的堆栈指针 SP 随着入栈数据的增加而减小。
每次入栈/出栈操作是一个字=2Byte

入栈时,数据字的高8位存入[SP-1]中,低8位存入[SP-2]中,然后令SP=SP-2。

出栈时,数据字的低8位是[SP],高8位是[SP+1],然后令SP=SP+2。

SP的初始值就是堆栈的最大容量。

8 DOS功能调用

8.1 显示字符

MOV DL, 要显示字符的ASCII码
MOV AH, 02H
INT 21H

8.2 显示字符串

MOV DX, OFFSET STRING ; 要显示字符串的首地址(字符串要以'$'结束)
MOV AH, 09H
INT 21H

8.3 输入字符并回显

MOV AH, 01H
INT 21H
; AL储存键入字符的ASCII码

8.4 输入字符但不回显

MOV AH, 08H
INT 21H
; AL储存键入字符的ASCII码

8.5 输入字符串

MOV DX, OFFSET BUFFER
MOV AH, 0AH
INT 21H
; DS:DX指向内存缓冲区
; 缓冲区第一个字节由用户设置最大输入字符数(1~255,含回车符)
; 缓冲区第二个字节是实际输入的字符数(回车符除外)
; 缓冲区第三个字节开始是输入缓冲区字符的ASCII码

8.6 程序终止退出

MOV AH, 4CH
INT 21H

8.7 获取日期

MOV AH, 2AH
INT 21H
; 年——CX;月——DH;日——DL

8.8 设置日期

MOV CX, 年
MOV DH, 月
MOV DL, 日
MOV AH, 2BH
INT 21H
; 设置成功AL=0,否则AL=0FFH

8.9 设置时间

; 8时15分20.5秒
MOV CH, 时(8)
MOV CL, 分(15)
MOV DH, 秒整数部分(20)
MOV DL, 秒小数部分(50)
MOV AH, 2DH
INT 21H
; 设置成功AL=0,否则AL=0FFH

8.10 获取时间

MOV AH, 2CH
INT 21H
; 将时间送入CX和DX寄存器,位置同8.9设置时间

二、8282 地址锁存器

引脚及其功能

1 STB

选通信号(Strobe)
与ALE信号线相连。在ALE由高到低的下降沿处把地址锁存。

2 $\overline{OE}$

输入允许信号
$\overline{OE}=1$ ,锁存器输出高阻态
$\overline{OE}=0$ ,锁存器将数据输出到数据线上

三、8286 双向总线驱动器

增加处理器的带负载能力

引脚及其功能

1 $A_7 \sim A_0$和$B_7 \sim B_0$

数据线

2 $T$

控制收发方向的输入控制信号

$T=1$ ,$A \rightarrow B$
$T=0$ ,$B \rightarrow A$

3 $\overline{OE}$

$\overline{OE}=1$ ,输出高阻态
$\overline{OE}=0$ ,输出数据

四、8288 总线控制器

8086工作于最大组态时需要用到8288总线控制器。 8288根据8086的状态信号 $\overline{S_2}$ 、$\overline{S_1}$ 、$\overline{S_0}$ 的组合判定 CPU 要执行何种操作,发出相应的控制命令。

总线控制器的输出信号相当于控制总线。

五、8289 总线仲裁器

当有多个主控者要求使用系统总线时,由8289总线仲裁器进行仲裁,将总线的使用权给优先级别高的主控者。

8289和8288配合使用,使8086CPU在多处理机系统中方便地与系统总线相连。

六、8284 时钟发生器

This post is licensed under CC BY 4.0 by the author.