第一章 Intel 8086/8088的基本结构
8086是 16位字长的微处理器,8088的内部结构为 16 位,
外部数据总线 8位,是准 16位字长的微处理器,二者指令系
统相同,均具有 20位地址线,寻址能力达到 1MB空间 。
1.1 8086/8088的功能结构
BIU 和 EU 相互独立,可并行操作,构成指令流水线结构。
T1
……取指令 取指令 取指令
等待 执行执 行 ……执行
BIU
EU
T2 T3
next
总线接口单元 BIU( Bus Interface Unit )
执行单元 EU( Execution Unit )
协同完成执行内存中存放的指令序列。 Go
8086/8088微处理器由总线接口单元 和执行单元组成。
图 1.1
1.2 8086/8088的寄存器结构
14个 16位寄存器,分为 4类 。
( 1) 数据寄存器,
4个 — AX,BX,CX,DX
计算过程中的 常用寄存器 G
( 2) 段寄存器,
4个 — CS,DS,SS,ES
存放段起始地址 G
( 3) 指针与变址寄存器,
4个 — SP,BP,SI,DI
提供操作数的偏移地址 G
( 4) 控制寄存器,
2个 — IP,FR
提供指令的偏移地址;
保存条件码标志和控制标志 G
AX
BX
CX
DX
数据寄存器
FRH
AH
BH
CH
DH
AL
BL
CL
DL
SP
BP
SI
DI
IP
FRL
CS
DS
SS
ES
代码段寄存器
数据段寄存器
堆栈段寄存器
附加段寄存器
堆栈指针寄存器
基址指针寄存器
源变址寄存器
目的变址寄存器
指令指针寄存器
标志寄存器
next
AX( 累加器 Accumulator),
主要的算术运算寄存器, 专用于:乘, 除法运算, 十进
制调整及 I/O操作等操作 。
BX( 基址寄存器 Base),
常用于存放存储区的起始地址 。
CX( 计数寄存器 Count),
常用作循环操作和字串处理的计数控制 。
DX(数据寄存器 Data),
常与 AX联用,做双字乘、除法时,DX存放高位字,AX
存放低位字。此外在 I/O操作时提供外部设备接口的端口地址。
返回DX AX
31 16 15 0
CS( 代码段地址寄存器 Code Segment),
存放代码段的起始地址 。 代码段存放当前正在运行的程序
DS( 数据段地址寄存器 Data Segment),
存放数据段的起始地址 。 数据段存放当前正运行的程序所用
的数据 。
SS( 堆栈段地址寄存器 Stack Segment),
存放堆栈段的起始地址 。 堆栈段是定义堆栈的存储区 。
ES( 附加段地址寄存器 Extra Segment),
存放附加段的起始地址 。 附加段是附加的数据段, 作为辅
助数据区存放当前正运行程序所用的数据 。 返回
SP( 栈顶指针寄存器 Stack Pointer),
提供堆栈栈顶单元的偏移地址 。 与 SS段寄存
器联用, 控制数据进栈和出栈 。
堆栈段SS:SP
访问
栈顶
堆栈段SS:BP
访问
栈内
数据段DS:SI
访问
数据
附加段ES:DI
访问
数据
BP( 基址指针寄存器 Base Pointer),
常用于提供堆栈内某个单元的偏移地址 。 与
SS段寄存器联用, 访问堆栈中的任一个存储
单元 。
SI( 源变址寄存器 Source Index),
与 DS段寄存器联用, 可以访问数据段中的任
一个存储单元 。
DI( 目的变址寄存器 Destination Index),
与 ES段寄存器联用, 可访问附加段中的任一个
存储单元 。
SI,DI也常用于在字串操作中提供偏移地址,
并具有地址 自动增量或减量 的功能。 返回
IP(指令指针寄存器 Instruction Pointer),
存放代码段中指令的偏移地址。在程序
执行过程中,始终自动给出下一条要取的指
令的偏移地址。
IP与 CS段寄存器联用,可以确定下一条
要取的指令的物理地址,因此 IP是很重要的
控制寄存器,用于控制程序的执行流程。
代码段CS:IP
访问
指令
FR(标志寄存器 Flags Register),
用于存放反映处理器和运行程序执行结果状态的控制标
志和条件码标志。
FR中共有 9个 标志位,6个 条件码标志位,3个 控制标志位。
CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PFAFZFSFTFIFDFOF
FR寄存器
OF — 溢出标志:计算结果溢出时,OF=1,否则 OF=0。
SF — 符号标志:计算结果小于 0时,SF=1,否则 SF=0。
ZF — 零标志:计算结果等于 0时,ZF=1,否则 ZF=0。
CF — 进位 /借位标志:最高有效位有进位或借位时,CF=1,否则 CF=0。
AF — 辅助进位 /借位标志,半字节进位 /借位标志
PF — 奇偶标志
DF — 方向标志,控制串操作中的地址增减。 DF=0,地址增; DF=1,地址减 。
IF — 中断标志,IF=1,开中断; IF=0,关中断 。
TF — 陷阱标志,TF=1,CPU单步方式下执行程序,TF=0,CPU正常工作 。
3个控制标志位,
6个条件码标志位,
0 0 0 0 0 0 1 1 PF=1
0 0 0 0 1 0 1 1 PF=0
7 6 5 4 3 2 1 0
next
SI DI
DF=0DS,SI ES,DI 低地址
高地址
SI DI
DISI
数据段 附加段
...
......
...
SI DI
DF=1DS,SI ES,DI 低地址
高地址
SI DI
DISI
数据段 附加段
...
......
...
正向传送
反向传送
SBUF
DBUF
DBUF
SBUF
方向标志 DF的控制作用
返回
0 3
0 7
0 8
0 3
0 7
0 8
0 3
0 7
0 8
0 3
0 7
0 8
1.3 堆栈与存储器结构
(1) 堆栈
堆栈的固定端称为 栈底,在存储
器的高地址端,活动端称为 栈顶,
数据的存取以 先进后出 原则在栈顶
进行。 SP栈顶指针寄存器始终保存
栈顶地址,指向栈顶。
堆栈数据的存取必须 以字为单位
随着进栈数据的增多,堆栈从高地
址向低地址方向扩展。
SP
低地址
高地址
堆
栈
扩
展
方
向
(SP)-2 新栈顶
PUSH BX
(2) 存储器结构
在存储器中,最小的存储单位是 字节,每个字节单元用一个 无符号
二进制数 编地址,从 0开始编址。书写存储单元地址时用 十六进制 形式。
...
栈顶
栈底
堆栈段
BH
BL
栈顶
..
.
存储器
64K存储器单元的
编址方法如图所示。
0000H
0001H
0002H
0003H
0004H
0005H
0006H
FFFEH
FFFFH
低字节
高字节字单元
字节单元
低地址字节单元
高地址字节单元
低字节存低地址单元,
高字节存高地址单元。
例:
将 3456H存入地址为 0005H
的字单元中。
56
34
一个存储器单元的物理地址由段地址和偏移地址形成。
问题:为什么要分 段地址 和 偏移地址 呢?
16位寄存器 不能提供 20位 的物理地址
解决问题的办法,存储器分段管理
将存储器分段,每段最大不超过 64KB,段内单元地址可用 16位 表
示,称为 偏移地址 。每段的起始地址称为 段地址 (也称为 段基址 )。
段地址如何表示?
规定段地址必须取为小段首址,从 0地址单元开始,每 16个单元为一小段。
按 20位 地址对 1M存储器编址如下:
00000H 00001H 00002H … … 0000EH 0000FH
00010H 00011H 00012H … … 0001EH 0001FH
00020H 00021H 00002H … … 0002EH 0002FH
… … … … … … …
FFFF0H FFFF1H FFFF2H … … FFFFEH FFFFFH
64K
20位物理地址的形成方法:
20位物理地址 =16位 段地址 左移 4位(段地址 × 16) + 16位 偏移地址
16位段地址
015
16位偏移地址
015
+
0
20位物理地址
19
例,
已知一个存储单元的段地址为 3200H,
偏移地址为 1210H,其物理地址是多少?
0011 0010 0000 0000 | 0000
0001 0010 0001 0000+
0011 0011 0010 0001 0000
32000H
+ 1210H
33210H
0000
段内偏移量偏移地址 =
段起始地址
64K段内地址
0000H0001H
……0
FFFH…….
FFFFH
64K段内地址
0000H0001H
……
FFFFH
30000H
段内偏移量偏移地址 =
段起始地址 40000H
存储器分段管理的地址概念图示,
30000H + 0FFFH = 30FFFH
物理地址
...
...
存储器
0FFFH
可以对代码段、数据段、附加段和堆栈段各段按需要灵活地进行存
储区分配。( 图 1.9,图 1.10)
存储器分段法的优点:
(2) 便于将代码、数据存放在不同的内存区,程序重定位。
(1) 使 16位寄存器最终可以提供 20位物理地址;
访问存储器单元时,寄存器的联用方式, ( 图 1.8)
next
返回
返回
本章要求:
( 1) 了解 CPU的功能结构,重点掌握 寄存器的
结构 和各寄存器的 一般用途 和 专门用途,寄存器
的 默认联用 方式;
( 2)熟悉存储器的结构,理解 编址方法 和 存储数
据的方法,重点掌握 段的划分 和存储器单元 物理
地址的形成方法 ;
( 3)熟悉堆栈的结构,理解堆栈 先进后出 的存取
方法,堆栈指针 SP的作用 。
小 结
认真复习,融会贯通
GOTO 第二章
8086是 16位字长的微处理器,8088的内部结构为 16 位,
外部数据总线 8位,是准 16位字长的微处理器,二者指令系
统相同,均具有 20位地址线,寻址能力达到 1MB空间 。
1.1 8086/8088的功能结构
BIU 和 EU 相互独立,可并行操作,构成指令流水线结构。
T1
……取指令 取指令 取指令
等待 执行执 行 ……执行
BIU
EU
T2 T3
next
总线接口单元 BIU( Bus Interface Unit )
执行单元 EU( Execution Unit )
协同完成执行内存中存放的指令序列。 Go
8086/8088微处理器由总线接口单元 和执行单元组成。
图 1.1
1.2 8086/8088的寄存器结构
14个 16位寄存器,分为 4类 。
( 1) 数据寄存器,
4个 — AX,BX,CX,DX
计算过程中的 常用寄存器 G
( 2) 段寄存器,
4个 — CS,DS,SS,ES
存放段起始地址 G
( 3) 指针与变址寄存器,
4个 — SP,BP,SI,DI
提供操作数的偏移地址 G
( 4) 控制寄存器,
2个 — IP,FR
提供指令的偏移地址;
保存条件码标志和控制标志 G
AX
BX
CX
DX
数据寄存器
FRH
AH
BH
CH
DH
AL
BL
CL
DL
SP
BP
SI
DI
IP
FRL
CS
DS
SS
ES
代码段寄存器
数据段寄存器
堆栈段寄存器
附加段寄存器
堆栈指针寄存器
基址指针寄存器
源变址寄存器
目的变址寄存器
指令指针寄存器
标志寄存器
next
AX( 累加器 Accumulator),
主要的算术运算寄存器, 专用于:乘, 除法运算, 十进
制调整及 I/O操作等操作 。
BX( 基址寄存器 Base),
常用于存放存储区的起始地址 。
CX( 计数寄存器 Count),
常用作循环操作和字串处理的计数控制 。
DX(数据寄存器 Data),
常与 AX联用,做双字乘、除法时,DX存放高位字,AX
存放低位字。此外在 I/O操作时提供外部设备接口的端口地址。
返回DX AX
31 16 15 0
CS( 代码段地址寄存器 Code Segment),
存放代码段的起始地址 。 代码段存放当前正在运行的程序
DS( 数据段地址寄存器 Data Segment),
存放数据段的起始地址 。 数据段存放当前正运行的程序所用
的数据 。
SS( 堆栈段地址寄存器 Stack Segment),
存放堆栈段的起始地址 。 堆栈段是定义堆栈的存储区 。
ES( 附加段地址寄存器 Extra Segment),
存放附加段的起始地址 。 附加段是附加的数据段, 作为辅
助数据区存放当前正运行程序所用的数据 。 返回
SP( 栈顶指针寄存器 Stack Pointer),
提供堆栈栈顶单元的偏移地址 。 与 SS段寄存
器联用, 控制数据进栈和出栈 。
堆栈段SS:SP
访问
栈顶
堆栈段SS:BP
访问
栈内
数据段DS:SI
访问
数据
附加段ES:DI
访问
数据
BP( 基址指针寄存器 Base Pointer),
常用于提供堆栈内某个单元的偏移地址 。 与
SS段寄存器联用, 访问堆栈中的任一个存储
单元 。
SI( 源变址寄存器 Source Index),
与 DS段寄存器联用, 可以访问数据段中的任
一个存储单元 。
DI( 目的变址寄存器 Destination Index),
与 ES段寄存器联用, 可访问附加段中的任一个
存储单元 。
SI,DI也常用于在字串操作中提供偏移地址,
并具有地址 自动增量或减量 的功能。 返回
IP(指令指针寄存器 Instruction Pointer),
存放代码段中指令的偏移地址。在程序
执行过程中,始终自动给出下一条要取的指
令的偏移地址。
IP与 CS段寄存器联用,可以确定下一条
要取的指令的物理地址,因此 IP是很重要的
控制寄存器,用于控制程序的执行流程。
代码段CS:IP
访问
指令
FR(标志寄存器 Flags Register),
用于存放反映处理器和运行程序执行结果状态的控制标
志和条件码标志。
FR中共有 9个 标志位,6个 条件码标志位,3个 控制标志位。
CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PFAFZFSFTFIFDFOF
FR寄存器
OF — 溢出标志:计算结果溢出时,OF=1,否则 OF=0。
SF — 符号标志:计算结果小于 0时,SF=1,否则 SF=0。
ZF — 零标志:计算结果等于 0时,ZF=1,否则 ZF=0。
CF — 进位 /借位标志:最高有效位有进位或借位时,CF=1,否则 CF=0。
AF — 辅助进位 /借位标志,半字节进位 /借位标志
PF — 奇偶标志
DF — 方向标志,控制串操作中的地址增减。 DF=0,地址增; DF=1,地址减 。
IF — 中断标志,IF=1,开中断; IF=0,关中断 。
TF — 陷阱标志,TF=1,CPU单步方式下执行程序,TF=0,CPU正常工作 。
3个控制标志位,
6个条件码标志位,
0 0 0 0 0 0 1 1 PF=1
0 0 0 0 1 0 1 1 PF=0
7 6 5 4 3 2 1 0
next
SI DI
DF=0DS,SI ES,DI 低地址
高地址
SI DI
DISI
数据段 附加段
...
......
...
SI DI
DF=1DS,SI ES,DI 低地址
高地址
SI DI
DISI
数据段 附加段
...
......
...
正向传送
反向传送
SBUF
DBUF
DBUF
SBUF
方向标志 DF的控制作用
返回
0 3
0 7
0 8
0 3
0 7
0 8
0 3
0 7
0 8
0 3
0 7
0 8
1.3 堆栈与存储器结构
(1) 堆栈
堆栈的固定端称为 栈底,在存储
器的高地址端,活动端称为 栈顶,
数据的存取以 先进后出 原则在栈顶
进行。 SP栈顶指针寄存器始终保存
栈顶地址,指向栈顶。
堆栈数据的存取必须 以字为单位
随着进栈数据的增多,堆栈从高地
址向低地址方向扩展。
SP
低地址
高地址
堆
栈
扩
展
方
向
(SP)-2 新栈顶
PUSH BX
(2) 存储器结构
在存储器中,最小的存储单位是 字节,每个字节单元用一个 无符号
二进制数 编地址,从 0开始编址。书写存储单元地址时用 十六进制 形式。
...
栈顶
栈底
堆栈段
BH
BL
栈顶
..
.
存储器
64K存储器单元的
编址方法如图所示。
0000H
0001H
0002H
0003H
0004H
0005H
0006H
FFFEH
FFFFH
低字节
高字节字单元
字节单元
低地址字节单元
高地址字节单元
低字节存低地址单元,
高字节存高地址单元。
例:
将 3456H存入地址为 0005H
的字单元中。
56
34
一个存储器单元的物理地址由段地址和偏移地址形成。
问题:为什么要分 段地址 和 偏移地址 呢?
16位寄存器 不能提供 20位 的物理地址
解决问题的办法,存储器分段管理
将存储器分段,每段最大不超过 64KB,段内单元地址可用 16位 表
示,称为 偏移地址 。每段的起始地址称为 段地址 (也称为 段基址 )。
段地址如何表示?
规定段地址必须取为小段首址,从 0地址单元开始,每 16个单元为一小段。
按 20位 地址对 1M存储器编址如下:
00000H 00001H 00002H … … 0000EH 0000FH
00010H 00011H 00012H … … 0001EH 0001FH
00020H 00021H 00002H … … 0002EH 0002FH
… … … … … … …
FFFF0H FFFF1H FFFF2H … … FFFFEH FFFFFH
64K
20位物理地址的形成方法:
20位物理地址 =16位 段地址 左移 4位(段地址 × 16) + 16位 偏移地址
16位段地址
015
16位偏移地址
015
+
0
20位物理地址
19
例,
已知一个存储单元的段地址为 3200H,
偏移地址为 1210H,其物理地址是多少?
0011 0010 0000 0000 | 0000
0001 0010 0001 0000+
0011 0011 0010 0001 0000
32000H
+ 1210H
33210H
0000
段内偏移量偏移地址 =
段起始地址
64K段内地址
0000H0001H
……0
FFFH…….
FFFFH
64K段内地址
0000H0001H
……
FFFFH
30000H
段内偏移量偏移地址 =
段起始地址 40000H
存储器分段管理的地址概念图示,
30000H + 0FFFH = 30FFFH
物理地址
...
...
存储器
0FFFH
可以对代码段、数据段、附加段和堆栈段各段按需要灵活地进行存
储区分配。( 图 1.9,图 1.10)
存储器分段法的优点:
(2) 便于将代码、数据存放在不同的内存区,程序重定位。
(1) 使 16位寄存器最终可以提供 20位物理地址;
访问存储器单元时,寄存器的联用方式, ( 图 1.8)
next
返回
返回
本章要求:
( 1) 了解 CPU的功能结构,重点掌握 寄存器的
结构 和各寄存器的 一般用途 和 专门用途,寄存器
的 默认联用 方式;
( 2)熟悉存储器的结构,理解 编址方法 和 存储数
据的方法,重点掌握 段的划分 和存储器单元 物理
地址的形成方法 ;
( 3)熟悉堆栈的结构,理解堆栈 先进后出 的存取
方法,堆栈指针 SP的作用 。
小 结
认真复习,融会贯通
GOTO 第二章