【汇编与接口】第二章8086微处理器

8086CPU的编程结构

【汇编与接口】第二章8086微处理器
8086CPU有16根数据线,20根地址线。

总线接口单元如上图右侧,CS为代码段寄存器;DS为数据段寄存器;SS为堆栈段寄存器;ES为附加段寄存器;IP存放下一条要取的指令的偏移地址,具有自动加1的功能。 ∑ \sum 为20位地址加法器,形成20位物理地址。指令队列用来存放待执行指令。

执行单元如上图左侧,AX、BX、CX、DX为四个通用寄存器,都可作为16位寄存器或两个独立的8位寄存器使用。SP为堆栈指针寄存器;BP为基址指针寄存器;SI为源变址寄存器;DI为目的变址寄存器
状态标志寄存器细分如下:
【汇编与接口】第二章8086微处理器

符号 含义
ZF 零标志位。ZF=1,结果为0,;ZF=0,结果不为0。
SF 符号标志。SF=1,结果为负;SF=0,结果为正。(这个地方记得老师也说过结果为0的问题,不了了之)
AF 辅助进位的标志。AF=1,有进位或借位;AF=0,无进位或借位。
PF 奇偶标志。PF=0,为奇数;PF=1,为偶数。
OF 溢出标志。OF=1,有溢出;OF=0,无溢出。
TF 跟踪标志。TF=1,允许单步中断;TF=0,禁止单步中断。
IF 中断允许标志。IF=1,开中断;IF=0,关中断。
DF DF=1,地址指针递减修改;DF=0,地址指针递增修改。

8086寄存器类型小结

8个通用寄存器:AX、BX、CX、DX、SP、BP、SI、DI
2个控制寄存器:IP、F
4个段寄存器:CS、DS、SS、ES

BIU和EU的动作管理

【汇编与接口】第二章8086微处理器
BIU和EU工作是并行的,又是相互配合的,具体体现在:

  1. 当指令队列中有两个空字节时,BIU就启动,将新指令送入到指令队列。(感觉不太理解)
  2. EU在执行指令的过程中,需要访问存储器或者I/O口时,向BIU发出请求。
  3. 当执行转移指令、调用指令及返回指令时,指令队列自动清空。

8086CPU的工作模式和引脚功能

基本概念

机器周期:也称为时钟周期,是CPU时间基准,由计算机的主频决定。
总线周期:CPU通过总线访问存储器或I/O口所需的基本时间周期。以机器周期为单位。
指令周期:CPU执行一条指令所需要的时间称为指令周期,不同指令的指令周期的不等长的。以机器周期为单位。

8086的总线周期

【汇编与接口】第二章8086微处理器

8086CPU的总线周期包括四个基本的机器周期,称为4个T状态。
红1:8086CPU输出地址信息
红2:缓冲状态,地址信息被撤销,需外部地址锁存
红3:数据传输,允许插入(1-n)等待状态
红4:总线周期结束,收拾现场

8086CPU的工作模式

  1. 最小模式:单处理器模式
  2. 最大模式:多处理器模式

PS:在最大模式下,主处理器为8086,协处理器可为8087(数值运算的协处理器)和8089,输入/输出协处理器。

8086CPU的引脚功能

【汇编与接口】第二章8086微处理器
A D 0 − A D 15 AD_0-AD_{15} AD0AD15:双向、三态。地址/数据分时复用的引脚
A 16 / S 3 − A 19 / S 6 A_{16}/S_3-A_{19}/S_6 A16/S3A19/S6:输出,三态。地址总线的高4位
B H E ‾ / S 7 \overline {BHE}/S_7 BHE/S7:输出,低电平有效。高8位数据总线允许
C L K CLK CLK:输出,系统时钟输出引脚
R E S E T RESET RESET:输出,高电平有效。系统复位信号。
N M I NMI NMI:输出,上升沿触发。非屏蔽中断请求输出引脚(不得不处理的中断)。
I N T R INTR INTR:输出,高电平有效。可屏蔽中断请求输出引脚。
R E A D Y READY READY:输出,高点平有效。准备就绪信号。
R D ‾ \overline {RD} RD:输出,低电平有效。读控制信号。
T E S T ‾ \overline{TEST} TEST:输入,测试信号输入端。
M N / M X ‾ MN/\overline{MX} MN/MX:输入,最小/最大模式控制信号。高点平-最小模式;低电平-最大模式。

8086CPU的最小模式

【汇编与接口】第二章8086微处理器
引脚24-31的功能
A L E ALE ALE:输出,高点平有效。地址锁存允许。
D E N ‾ \overline{DEN} DEN:输出,低电平有效。数据允许信号。
D T / R ‾ DT/\overline R DT/R:输出,数据发送/接收控制信号。高点平数据发送;低电平数据接收。
W R ‾ \overline{WR} WR:输出,低电平有效。写控制信号。
I N T A ‾ \overline{INTA} INTA:输出,两个连续的负脉冲信号。中断响应信号。
H O L D HOLD HOLD:输入,高电平有效。总线请求输入。
H L D A HLDA HLDA:输出,高电平有效,总线请求应答信号。
存储器和I/O口的读写控制信号形成逻辑
【汇编与接口】第二章8086微处理器
8086在最小模式下的典型配置
【汇编与接口】第二章8086微处理器

8086CPU的最大模式

【汇编与接口】第二章8086微处理器
引脚24-31的功能

S 2 S 1 S 0 S_2S_1S_0 S2S1S0 操作类型
000 中断响应
001 I/O读
010 I/O写
011 暂停
100 取指令
101 读存储器
110 写存储器
111 无源状态

输出,总线周期状态信号输出。

Q S 1    Q S 0 QS_1\; QS_0 QS1QS0 队列状态
00 无操作
01 从队列缓存器中取出指令的第一字节
10 清除队列缓冲器
11 从队列缓冲器中取出指令的第二字节以后部分

输出,指令队列状态信号

R Q ‾ / G T 0 ‾ 、 R Q ‾ / G T 1 ‾ \overline{RQ}/\overline{GT_0}、\overline{RQ}/\overline{GT_1} RQ/GT0RQ/GT1:输入/输出,低电平有效。总线请求输入/总线请求允许输出信号。
L O C K ‾ \overline{LOCK} LOCK:输出,低电平有效。总线封锁信号。
8086系统在最大模式下的典型配置
【汇编与接口】第二章8086微处理器

8086CPU的操作和时序

8086CPU的操作类型

  1. 内部操作
    ALU操作(算数逻辑运算)
    寄存器操作
  2. 外部操作
    总线读操作
    中断响应操作
    总线保持与响应操作
    系统复位与启动操作
    暂停操作

8086CPU的操作时序

总线操作

最小模式下的总线读操作
【汇编与接口】第二章8086微处理器
最小模式下的总线写操作
【汇编与接口】第二章8086微处理器
最大模式下的总线读操作
【汇编与接口】第二章8086微处理器
最大模式下的总线写操作
【汇编与接口】第二章8086微处理器

中断响应操作

【汇编与接口】第二章8086微处理器
中断源通过 I N T R INTR INTR发出中断请求,当 I N T A ‾ \overline{INTA} INTA为低电平时表示响应中断信号。
【汇编与接口】第二章8086微处理器
PS:ALE为地址锁存允许,高电平有效。

总线保持和响应操作

【汇编与接口】第二章8086微处理器
总线主模块是DMA等可以需要获得总线控制权的组件。总线主模块发出总线请求信号,CPU通过置 I N T A ‾ \overline{INTA} INTA为低电平告知主模块可以使用总线。
【汇编与接口】第二章8086微处理器
H O L D HOLD HOLD:输入,高电平有效。总线请求输入。
H L D A HLDA HLDA:输出,高电平有效,总线请求应答信号。

复位和启动操作

(1)8086的复位和启动操作是由RESET复位引起的

  • 正常复位,RESET信号至少维持4个时钟周期的高电平
  • 上电复位,RESET信号至少维持50us的高电平

(2)复位后,CS=FFFFH、其他寄存器均清0。

  • 复位后,由于CS=FFFFH、IP=0000H,系统启动后将从FFFF0H开始执行程序。
  • 复位后,标志寄存器F被清零,其中中断允许标志IF也清零,系统关中断。

(3)复位信号RESET撤销后,再经过7个时钟周期,CPU才启动。
【汇编与接口】第二章8086微处理器

8086系统的存储器组织

主要用于存放程序和数据

  • 存储单元
  • 单元地址
    【汇编与接口】第二章8086微处理器
    这个是计算机组成原理上的图

存储器编址

存储器是以8位(一个字节)为一个存储单元进行编址的。并用唯一的一个地址码来表示。任何连续存放的两个字节都可以称为一个字。存放是低位字节存放入低地址,高位字节存放入高地址。处于低地址的字节的地址为这个字的地址。

同一个地址既可以看作是字节单元的地址,又可看作字单元、双字单元的地址。

偶数地址开始的字称为规则字,奇数地址开始的字称为非规则字。

8086系统存储器组织的基本原则

  1. 8086有20条地址线,最大寻址空间为 2 20 = 1 M B 2^{20}=1MB 220=1MB
  2. 存储单元按字节组织,地址范围00000H-FFFFFH
  3. 存储字(两个字节)采用边界对准的规则存放原则
    WORD = ByteH - ByteL

规则存放:低字节放在低地址单元;高字节存放在高地址单元
边界对准:低字节存放在偶地址单元;高字节存放在奇地址单元

8086存储系统的构建

8086CPU通过低8位数据总线访问偶地址存放单元或I/O口;通过高8位数据总线访问奇地址存储单元或I/O口
【汇编与接口】第二章8086微处理器
B H E ‾ \overline{BHE} BHE:输出,低电平有效。高8位数据总线允许
A 0 = 0 A0=0 A0=0,选择偶地址存储体
A 0 = 1 A0=1 A0=1,不选择偶地址存储体
B H E ‾ = 0 \overline{BHE}=0 BHE=0,选择奇地址存储体
B H E ‾ = 1 \overline{BHE}=1 BHE=1,不选择奇地址存储体

一个字节情况

B H E ‾ A 0 \overline{BHE} A0 BHEA0 操作形式
10 从偶地址单元读/写一个字节
01 从奇地址单元读/写一个字节

一个字情况

B H E ‾ A 0 \overline{BHE} A0 BHEA0 操作形式
00 从偶地址单元读/写一个字(两个字节)
(1)01(2)10 先从奇地址单元读/写一个字节,再从偶地址单元读/写一个字节

总结:从偶地址单元开始读/写一个字,需要一个总线周期;从奇地址单元开始读/写一个字,需要两个总线周期

8086系统的存储器管理

分段管理

(1)将1MB内存空间分为若干段,每段最大可为64KB
(2)每个段起始地址(段的基址)存放在段寄存器中,CS、DS、SS、ES。
(3)段与段之间可以是连续的、断开的、部分重叠或全部重叠的。
PS:段不能起于任意地址,每个段地址的低4位全为0
存储器的分段并不是唯一的
合法段首地址可表示如下
00000H,…,41230H,FFFE0H,FFFF0H

实际地址的形成

实际地址:物理地址,即存储单元的真正地址,唯一的20位二进制数表示(CPU访问时的物理地址)。
逻辑地址:程序设计的地址,包括段地址和偏移量(均为16位)表示为 段地址偏移量
例如 2500H:5000H,CS:IP。
20位物理地址由16位段地址和16位偏移地址组成(逻辑地址)
实际地址 = 段的基址左移4位(乘16)+偏移量

存储器物理地址的形成与计算过程
【汇编与接口】第二章8086微处理器
每个存储地址只有唯一的物理地址,但它却可由不同的段地址和不同的偏移地址组成。

段寄存器和偏移地址寄存器组合关系
【汇编与接口】第二章8086微处理器
访问存储器的类型不同,逻辑地址的来源也不相同

访存类型 隐含的段地址 可替换的段地址 偏移量
取指令 CS ---- IP
堆栈操作 SS ---- SP
访问数据单元 DS CS、ES、SS EA
字符串(源) DS CS、ES、SS SI
字符串(目的) ES ---- DI

最后字符串两个不太理解

分段管理的意义
减少了指令长度,缩短了指令执行时间
便于程序浮动装配(什么程序浮动装配?)