【汇编与接口】第二章8086微处理器
8086CPU的编程结构
8086CPU有16根数据线,20根地址线。
总线接口单元如上图右侧,CS为代码段寄存器;DS为数据段寄存器;SS为堆栈段寄存器;ES为附加段寄存器;IP存放下一条要取的指令的偏移地址,具有自动加1的功能。 ∑ \sum ∑为20位地址加法器,形成20位物理地址。指令队列用来存放待执行指令。
执行单元如上图左侧,AX、BX、CX、DX为四个通用寄存器,都可作为16位寄存器或两个独立的8位寄存器使用。SP为堆栈指针寄存器;BP为基址指针寄存器;SI为源变址寄存器;DI为目的变址寄存器。
状态标志寄存器细分如下:
符号 | 含义 |
---|---|
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的动作管理
BIU和EU工作是并行的,又是相互配合的,具体体现在:
- 当指令队列中有两个空字节时,BIU就启动,将新指令送入到指令队列。(感觉不太理解)
- EU在执行指令的过程中,需要访问存储器或者I/O口时,向BIU发出请求。
- 当执行转移指令、调用指令及返回指令时,指令队列自动清空。
8086CPU的工作模式和引脚功能
基本概念
机器周期:也称为时钟周期,是CPU时间基准,由计算机的主频决定。
总线周期:CPU通过总线访问存储器或I/O口所需的基本时间周期。以机器周期为单位。
指令周期:CPU执行一条指令所需要的时间称为指令周期,不同指令的指令周期的不等长的。以机器周期为单位。
8086的总线周期
8086CPU的总线周期包括四个基本的机器周期,称为4个T状态。
红1:8086CPU输出地址信息
红2:缓冲状态,地址信息被撤销,需外部地址锁存
红3:数据传输,允许插入(1-n)等待状态
红4:总线周期结束,收拾现场
8086CPU的工作模式
- 最小模式:单处理器模式
- 最大模式:多处理器模式
PS:在最大模式下,主处理器为8086,协处理器可为8087(数值运算的协处理器)和8089,输入/输出协处理器。
8086CPU的引脚功能
A
D
0
−
A
D
15
AD_0-AD_{15}
AD0−AD15:双向、三态。地址/数据分时复用的引脚
A
16
/
S
3
−
A
19
/
S
6
A_{16}/S_3-A_{19}/S_6
A16/S3−A19/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的最小模式
引脚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在最小模式下的典型配置
8086CPU的最大模式
引脚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/GT0、RQ/GT1:输入/输出,低电平有效。总线请求输入/总线请求允许输出信号。
L
O
C
K
‾
\overline{LOCK}
LOCK:输出,低电平有效。总线封锁信号。
8086系统在最大模式下的典型配置
8086CPU的操作和时序
8086CPU的操作类型
-
内部操作
ALU操作(算数逻辑运算)
寄存器操作 -
外部操作
总线读操作
中断响应操作
总线保持与响应操作
系统复位与启动操作
暂停操作
8086CPU的操作时序
总线操作
最小模式下的总线读操作
最小模式下的总线写操作
最大模式下的总线读操作
最大模式下的总线写操作
中断响应操作
中断源通过
I
N
T
R
INTR
INTR发出中断请求,当
I
N
T
A
‾
\overline{INTA}
INTA为低电平时表示响应中断信号。
PS:ALE为地址锁存允许,高电平有效。
总线保持和响应操作
总线主模块是DMA等可以需要获得总线控制权的组件。总线主模块发出总线请求信号,CPU通过置
I
N
T
A
‾
\overline{INTA}
INTA为低电平告知主模块可以使用总线。
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系统的存储器组织
主要用于存放程序和数据
- 存储单元
- 单元地址
这个是计算机组成原理上的图
存储器编址
存储器是以8位(一个字节)为一个存储单元进行编址的。并用唯一的一个地址码来表示。任何连续存放的两个字节都可以称为一个字。存放是低位字节存放入低地址,高位字节存放入高地址。处于低地址的字节的地址为这个字的地址。
同一个地址既可以看作是字节单元的地址,又可看作字单元、双字单元的地址。
偶数地址开始的字称为规则字,奇数地址开始的字称为非规则字。
8086系统存储器组织的基本原则
- 8086有20条地址线,最大寻址空间为 2 20 = 1 M B 2^{20}=1MB 220=1MB
- 存储单元按字节组织,地址范围00000H-FFFFFH
- 存储字(两个字节)采用边界对准的规则存放原则
WORD = ByteH - ByteL
规则存放:低字节放在低地址单元;高字节存放在高地址单元
边界对准:低字节存放在偶地址单元;高字节存放在奇地址单元
8086存储系统的构建
8086CPU通过低8位数据总线访问偶地址存放单元或I/O口;通过高8位数据总线访问奇地址存储单元或I/O口
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)+偏移量
存储器物理地址的形成与计算过程
每个存储地址只有唯一的物理地址,但它却可由不同的段地址和不同的偏移地址组成。
段寄存器和偏移地址寄存器组合关系
访问存储器的类型不同,逻辑地址的来源也不相同
访存类型 | 隐含的段地址 | 可替换的段地址 | 偏移量 |
---|---|---|---|
取指令 | CS | ---- | IP |
堆栈操作 | SS | ---- | SP |
访问数据单元 | DS | CS、ES、SS | EA |
字符串(源) | DS | CS、ES、SS | SI |
字符串(目的) | ES | ---- | DI |
最后字符串两个不太理解
分段管理的意义
减少了指令长度,缩短了指令执行时间
便于程序浮动装配(什么程序浮动装配?)