第二章 IBM PC计算机组织
2.1 计算机系统概述计算机系统包括 硬件 和 软件 两大部分 。
硬件,三个主要组成部分,用 系统总线 连接 。
中央处理机
CPU
总线控制逻辑接 口接 口存储器大容量存储器
I/O设备
I/O子系统系统总线软件,
系统软件 ( 核心是操作系统 OS)
MASM.EXE TASM.EXE
LINK.EXE TLINK.EXE
DEBUG.EXE
用户软件
1981年推出
CPU采用芯片 8088,机器字长 16位,
数据线 8根,地址线 20根,
1M RAM,40K ROM
IBM PC
2.2 微处理器的结构
IBM PC机的 CPU组成:
8086/8088的寄存器组 ( 14个寄存器 ),
数据寄存器 ( 4个通用寄存器 )
指针及变址寄存器
段寄存器
控制寄存器算术逻辑部件 ALU
控制逻辑工作寄存器图 2.2,8086处理器功能框图功能:存放操作数或运算结果等信息组成,AX:AH+AL-- 累加器
BX:BH+BL-- 基址寄存器
CX:CH+CL-- 计数器
DX:DH+DL-- 数据寄存器
A
B
C
D
A
B
C
D
X,字操作寄存器( 16位)
H或
A
B
C
D
L为字节操作寄存器( 8位)
该寄存器组既可作 16位寄存器( AX,BX,CX,DX),又可作按高
8位和低 8位作 8位寄存器使用。即如:
AH AL
AX
15 7 0
字寄存器低字节( 8位)
高字节( 8位) 字节寄存器数据寄存器功能:存放操作数的偏移地址组成,5个 16位寄存器组成,
SI:源变址寄存器
DI:目的变址寄存器
SP:栈顶地址寄存器(相对于 SS是偏移地址),SP是栈顶指针
BP:对堆栈操作的基址寄存器
BX:变址器由于操作数的偏移地址只能用 16位二进制数表示,因此:
SI,DI,SP,BP都是 16位寄存器,而不能作 8位寄存器使用。
说明:
(1)仅 SI,DI,BX,BP能作基址或变址寄存器,SI,DI作变址器,BX,BP
作变址器又作基址器
(2)SI,DI,BP作数据寄存器使用时,用来保存操作数和运算结果,只能作 16位字寄存器而不是 8位寄存器。
指针及变址寄存器
IBM PC中有 4个专门存放段地址的段寄存器 ( 16位 )
代码段寄存器 CS
数据段寄存器 DS
堆栈段寄存器 SS
附加段寄存器 ES
例,(DS)=3000H,EA=1234H,
物理地址 =16d? (DS) + EA
=31234H
存储器
8K代码
2K数据
256堆栈
02000H
04800H
04000H
0200H
0400H
0480H
段寄存器
IP 指令指针寄存器 ( 存放代码段中的偏移地址,
始终指向下一条指令的首地址 )
标志寄存器 FLAGS,包含了 9个标志位,由 6个状态标志位和 3个控制标志位构成,主要用于反映处理器的状态和运算结果的某些特征 。 各标志位在标志寄存器中的位置如下所示:
控制寄存器
1.进位位 CF
( CF)= 1,当结果最高位(字节第七位,字第 15位)产生一个进位和错位
0:不产生进位或借位
2.溢出位 OF
( OF)= 1,有溢出,运算结果超过了范围如:带符号数:字节:- 128- 127D
字:- 32768- 32767
0:无溢出注意:溢出与进位两个概念是不同的。
例如,01100100
+ 01100100
11001000
=[+100]补 =64H
=[+100]补 =64H +为 +200D超出+ 127
两个正数相加变成了负数故溢出则 (OF)=1,(CF)=0,称为无进位的溢出又例如,10101011
+ 11111111
10101010
CF 1
0ABH=[-55H]补 =-85
0FFH=[-1]补 =-1
0AAH=[-56H]补 =-86
+后为 -86
则:无溢出但有进位位,(OF)=0,(CF)=1
3.符号标志位 SF
(SF)= 1:最高位为 1:负数
0:最高位为 0:正数
4.零标志位 ZF
(ZF)= 1:运算结果为 0
0:运算结果不为 0
5.辅助进位标志位 AF
(AF)= 1,字节字
0
… …
7 4 3 0
有进位或借位15 8 7 0
6.奇偶标志位 PF
(PF)= 1:当运算结果(指低 8位)中的 ‘ 1’ 的个数为偶数
0:运算结果(指低 8位)中的 ‘ 1’ 的个数为奇数控制位:由指令设置,使系统设置情况操作
7.方向控制位 DF
(DF) 置 1:从高地址单元到低地址单元处理串置 0:从低地址单元到高地址单元处理串
8.中断允许控制位 IF
(IF) 置 1 开中断:允许 CPU接受外部中断请求置 0 关中断:禁止 CPU接受外部中断请求
9.追踪控制位 TF
(TF) 置 1,CPU处于单步执行程序状态,即 CPU每执行一条指令产生 1号中断。用于调试程序置 0,CPU连续执行程序
32位寄存器
AX
AH AL
DI
SI
BP
SP
DX
DH DL
CX
CH CL
BX
BH BL
CS
GS
FS
ES
SS
DS
ESI
EDI
IP
FLAGS
EIP
EFLAGS
EAX
EBX
ECX
EDX
ESP
EBP
0150151631 78 0151631
通用寄存器段寄存器指令指针寄存器和标志寄存器
2.3 存储器存储器是用来存放程序、数据、中间结果和最终结果的记忆装置。
存储单元的地址和内容
存储器以字节 ( 8bit) 为单位存储信息
每个字节单元有一个地址,从 0编号,顺序加 1
地址也用二进制数表示(无符号整数,写成十六进制)
16位二进制数可表示 216=65536=64K个地址
0000H ~ FFFFH
字长 16位,一个字要占用相继的两个字节
低位字节存入低地址,高位字节存入高地址
机器以偶地址访问(读 /写)存储器
字单元地址用它的低地址来表示
7 6 5 4 3 2 1 0
1 0 0 1 1 1 1 1 0000H (0000H)=9FH
0 0 1 0 0 1 1 0 0001H (0001H)=26H
0 0 0 1 1 1 1 0 0002H
1 1 0 1 0 1 1 1 0003H
存储器
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
字高位字节 低位字节
1 0 0 1 1 1 1 10 0 1 0 0 1 1 0
(0000H)=269FH
存储器地址的分段
20根地址线 220=1024K=1M=1048576
地址范围 00000H ~ FFFFFH
小段:每 16个字节为一小段,共有 64K个小段
00000H ~ 0000FH
00010H ~ 0001FH
00020H ~ 0002FH
…
FFFF0H ~ FFFFFH
存储器分段:段起始地址必须是某一小段的首地址,
段的大小可以是 64K范围内的任意字节 。
物理地址,每个存储单元的唯一的 20位地址段基值,段起始地址的高 16位偏移量,段内相对于段起始地址的位移量 ( 16位 )
(有效地址 EA)
物理地址 = 16d? 段基值 + 偏移量
16 位 段 基值
16 位 偏 移 量
0000
+
20 位 物 理 地 址
IBM PC中有 4个专门存放段地址的段寄存器 ( 16位 )
代码段寄存器 CS
数据段寄存器 DS
堆栈段寄存器 SS
附加段寄存器 ES
例,(DS)=3000H,EA=1234H,
物理地址 =16d? (DS) + EA
=31234H
存储器
8K代码
2K数据
256堆栈
02000H
04800H
04000H
0200H
0400H
0480H
保护模式下的存储管理选择符 偏移量分段管理机制分页管理机制
15 0 31 0 31 0 31 0
逻辑地址 线性地址 物理地址堆栈在内存中开辟的一片连续的存储区作用:存放数据特点,(1)一端固定,另一端活动
(2)存取数据的原则:?先进后出?
(3)进或出栈只能是字数据,不能是字节数据
(4)栈的最大容量 64KB
(5)SP总是指向栈顶,它的内容是相对 SS的地址偏移量
(6)数据入栈时,栈顶均由高地址向低地址变化数据出栈时,栈顶均由低地址向高地址变化
2.4 堆栈
0H
xx
xx
.
.
.
.
.
xx
xx
xx
栈 顶栈 底堆栈段
00000H
xx
xx
.
.
.
.
.
xx
xx
xx
栈 顶栈底
( 字单元地址)
堆栈段段初始化时S P
xx xx
SS
SP
2.出栈指令格式,POP DST ;DST表示的目的操作数地址功能:将当前栈顶一个字数据弹出到 16位寄存器(除 CS外)或内存单元中操作,([SP]) DST低 8位
(SP)+1 SP
([SP]) DST高 8位
(SP)+1 SP
例,POP BX
POP DL ×
栈顶操作指令
1.进栈指令格式,PUSH SRC ;SRC表示源操作数地址功能:将 SRC表示的寄存器或内存单元中的字数据压入栈顶操作,(SP)- 1 SP ;修改栈顶指针的内容
(SRC)高 8位 ↓(SP) ;送高 8位字节数据
(SP)-1 SP ;又修改栈顶指针的内容
(SRC)低 8位 ↓(SP) ;送低 8位字节数据例,PUSH AX
PUSH AL ×
例:已知栈顶的数据为 1000H,(AX)=2000H,(BX)=3000H,(CX)=4000H,
执行指令段,PUSH AX
PUSH CX
POP BX
POP AX
POP CX
之后,(AX)=2000H,(BX)=4000H,(CX)=1000H
栈顶变化如下:
00H
10H
SP
低高
00H
40H
00H
20H
00H
10H
SP
执行 PUSH AX和 PUSH CX后,如下图执行,POP BX后:
00H
20H
00H
10H
SP
执行 POP AX后:
00H
10H
SP
执行 POP CX后:
00H
10H
SP
2.1 计算机系统概述计算机系统包括 硬件 和 软件 两大部分 。
硬件,三个主要组成部分,用 系统总线 连接 。
中央处理机
CPU
总线控制逻辑接 口接 口存储器大容量存储器
I/O设备
I/O子系统系统总线软件,
系统软件 ( 核心是操作系统 OS)
MASM.EXE TASM.EXE
LINK.EXE TLINK.EXE
DEBUG.EXE
用户软件
1981年推出
CPU采用芯片 8088,机器字长 16位,
数据线 8根,地址线 20根,
1M RAM,40K ROM
IBM PC
2.2 微处理器的结构
IBM PC机的 CPU组成:
8086/8088的寄存器组 ( 14个寄存器 ),
数据寄存器 ( 4个通用寄存器 )
指针及变址寄存器
段寄存器
控制寄存器算术逻辑部件 ALU
控制逻辑工作寄存器图 2.2,8086处理器功能框图功能:存放操作数或运算结果等信息组成,AX:AH+AL-- 累加器
BX:BH+BL-- 基址寄存器
CX:CH+CL-- 计数器
DX:DH+DL-- 数据寄存器
A
B
C
D
A
B
C
D
X,字操作寄存器( 16位)
H或
A
B
C
D
L为字节操作寄存器( 8位)
该寄存器组既可作 16位寄存器( AX,BX,CX,DX),又可作按高
8位和低 8位作 8位寄存器使用。即如:
AH AL
AX
15 7 0
字寄存器低字节( 8位)
高字节( 8位) 字节寄存器数据寄存器功能:存放操作数的偏移地址组成,5个 16位寄存器组成,
SI:源变址寄存器
DI:目的变址寄存器
SP:栈顶地址寄存器(相对于 SS是偏移地址),SP是栈顶指针
BP:对堆栈操作的基址寄存器
BX:变址器由于操作数的偏移地址只能用 16位二进制数表示,因此:
SI,DI,SP,BP都是 16位寄存器,而不能作 8位寄存器使用。
说明:
(1)仅 SI,DI,BX,BP能作基址或变址寄存器,SI,DI作变址器,BX,BP
作变址器又作基址器
(2)SI,DI,BP作数据寄存器使用时,用来保存操作数和运算结果,只能作 16位字寄存器而不是 8位寄存器。
指针及变址寄存器
IBM PC中有 4个专门存放段地址的段寄存器 ( 16位 )
代码段寄存器 CS
数据段寄存器 DS
堆栈段寄存器 SS
附加段寄存器 ES
例,(DS)=3000H,EA=1234H,
物理地址 =16d? (DS) + EA
=31234H
存储器
8K代码
2K数据
256堆栈
02000H
04800H
04000H
0200H
0400H
0480H
段寄存器
IP 指令指针寄存器 ( 存放代码段中的偏移地址,
始终指向下一条指令的首地址 )
标志寄存器 FLAGS,包含了 9个标志位,由 6个状态标志位和 3个控制标志位构成,主要用于反映处理器的状态和运算结果的某些特征 。 各标志位在标志寄存器中的位置如下所示:
控制寄存器
1.进位位 CF
( CF)= 1,当结果最高位(字节第七位,字第 15位)产生一个进位和错位
0:不产生进位或借位
2.溢出位 OF
( OF)= 1,有溢出,运算结果超过了范围如:带符号数:字节:- 128- 127D
字:- 32768- 32767
0:无溢出注意:溢出与进位两个概念是不同的。
例如,01100100
+ 01100100
11001000
=[+100]补 =64H
=[+100]补 =64H +为 +200D超出+ 127
两个正数相加变成了负数故溢出则 (OF)=1,(CF)=0,称为无进位的溢出又例如,10101011
+ 11111111
10101010
CF 1
0ABH=[-55H]补 =-85
0FFH=[-1]补 =-1
0AAH=[-56H]补 =-86
+后为 -86
则:无溢出但有进位位,(OF)=0,(CF)=1
3.符号标志位 SF
(SF)= 1:最高位为 1:负数
0:最高位为 0:正数
4.零标志位 ZF
(ZF)= 1:运算结果为 0
0:运算结果不为 0
5.辅助进位标志位 AF
(AF)= 1,字节字
0
… …
7 4 3 0
有进位或借位15 8 7 0
6.奇偶标志位 PF
(PF)= 1:当运算结果(指低 8位)中的 ‘ 1’ 的个数为偶数
0:运算结果(指低 8位)中的 ‘ 1’ 的个数为奇数控制位:由指令设置,使系统设置情况操作
7.方向控制位 DF
(DF) 置 1:从高地址单元到低地址单元处理串置 0:从低地址单元到高地址单元处理串
8.中断允许控制位 IF
(IF) 置 1 开中断:允许 CPU接受外部中断请求置 0 关中断:禁止 CPU接受外部中断请求
9.追踪控制位 TF
(TF) 置 1,CPU处于单步执行程序状态,即 CPU每执行一条指令产生 1号中断。用于调试程序置 0,CPU连续执行程序
32位寄存器
AX
AH AL
DI
SI
BP
SP
DX
DH DL
CX
CH CL
BX
BH BL
CS
GS
FS
ES
SS
DS
ESI
EDI
IP
FLAGS
EIP
EFLAGS
EAX
EBX
ECX
EDX
ESP
EBP
0150151631 78 0151631
通用寄存器段寄存器指令指针寄存器和标志寄存器
2.3 存储器存储器是用来存放程序、数据、中间结果和最终结果的记忆装置。
存储单元的地址和内容
存储器以字节 ( 8bit) 为单位存储信息
每个字节单元有一个地址,从 0编号,顺序加 1
地址也用二进制数表示(无符号整数,写成十六进制)
16位二进制数可表示 216=65536=64K个地址
0000H ~ FFFFH
字长 16位,一个字要占用相继的两个字节
低位字节存入低地址,高位字节存入高地址
机器以偶地址访问(读 /写)存储器
字单元地址用它的低地址来表示
7 6 5 4 3 2 1 0
1 0 0 1 1 1 1 1 0000H (0000H)=9FH
0 0 1 0 0 1 1 0 0001H (0001H)=26H
0 0 0 1 1 1 1 0 0002H
1 1 0 1 0 1 1 1 0003H
存储器
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
字高位字节 低位字节
1 0 0 1 1 1 1 10 0 1 0 0 1 1 0
(0000H)=269FH
存储器地址的分段
20根地址线 220=1024K=1M=1048576
地址范围 00000H ~ FFFFFH
小段:每 16个字节为一小段,共有 64K个小段
00000H ~ 0000FH
00010H ~ 0001FH
00020H ~ 0002FH
…
FFFF0H ~ FFFFFH
存储器分段:段起始地址必须是某一小段的首地址,
段的大小可以是 64K范围内的任意字节 。
物理地址,每个存储单元的唯一的 20位地址段基值,段起始地址的高 16位偏移量,段内相对于段起始地址的位移量 ( 16位 )
(有效地址 EA)
物理地址 = 16d? 段基值 + 偏移量
16 位 段 基值
16 位 偏 移 量
0000
+
20 位 物 理 地 址
IBM PC中有 4个专门存放段地址的段寄存器 ( 16位 )
代码段寄存器 CS
数据段寄存器 DS
堆栈段寄存器 SS
附加段寄存器 ES
例,(DS)=3000H,EA=1234H,
物理地址 =16d? (DS) + EA
=31234H
存储器
8K代码
2K数据
256堆栈
02000H
04800H
04000H
0200H
0400H
0480H
保护模式下的存储管理选择符 偏移量分段管理机制分页管理机制
15 0 31 0 31 0 31 0
逻辑地址 线性地址 物理地址堆栈在内存中开辟的一片连续的存储区作用:存放数据特点,(1)一端固定,另一端活动
(2)存取数据的原则:?先进后出?
(3)进或出栈只能是字数据,不能是字节数据
(4)栈的最大容量 64KB
(5)SP总是指向栈顶,它的内容是相对 SS的地址偏移量
(6)数据入栈时,栈顶均由高地址向低地址变化数据出栈时,栈顶均由低地址向高地址变化
2.4 堆栈
0H
xx
xx
.
.
.
.
.
xx
xx
xx
栈 顶栈 底堆栈段
00000H
xx
xx
.
.
.
.
.
xx
xx
xx
栈 顶栈底
( 字单元地址)
堆栈段段初始化时S P
xx xx
SS
SP
2.出栈指令格式,POP DST ;DST表示的目的操作数地址功能:将当前栈顶一个字数据弹出到 16位寄存器(除 CS外)或内存单元中操作,([SP]) DST低 8位
(SP)+1 SP
([SP]) DST高 8位
(SP)+1 SP
例,POP BX
POP DL ×
栈顶操作指令
1.进栈指令格式,PUSH SRC ;SRC表示源操作数地址功能:将 SRC表示的寄存器或内存单元中的字数据压入栈顶操作,(SP)- 1 SP ;修改栈顶指针的内容
(SRC)高 8位 ↓(SP) ;送高 8位字节数据
(SP)-1 SP ;又修改栈顶指针的内容
(SRC)低 8位 ↓(SP) ;送低 8位字节数据例,PUSH AX
PUSH AL ×
例:已知栈顶的数据为 1000H,(AX)=2000H,(BX)=3000H,(CX)=4000H,
执行指令段,PUSH AX
PUSH CX
POP BX
POP AX
POP CX
之后,(AX)=2000H,(BX)=4000H,(CX)=1000H
栈顶变化如下:
00H
10H
SP
低高
00H
40H
00H
20H
00H
10H
SP
执行 PUSH AX和 PUSH CX后,如下图执行,POP BX后:
00H
20H
00H
10H
SP
执行 POP AX后:
00H
10H
SP
执行 POP CX后:
00H
10H
SP