§ 2.1 微机系统组成
? 硬件 ( Hardware)
? 控制器、运算器
? 存储器
? 输入设备和输出设备
? 软件 ( Software)
? 系统软件
? 应用软件
Chapter 2 IBM PC微型计算机
西










微机系统组成图
I/O


主存储器
系统总线
CPU
寄存器
控制器
运算器 辅助存储器
输入设备
输出设备
西










16/32位 PC机
? 本课程采用 16位或 32位个人计算机
? 16位 PC机是指采用 16位 80x86 CPU的
IBM PC/XT/AT这三款个人微机或它们的
兼容机。
? 32位 PC机是指采用 32位 80x86 CPU而形
成的微机,其基本结构仍然源于 PC/AT机。
? 人们日常谈论的 PC机或微机是上述微型计
算机系统的统称。
西










微处理器飞速发展
80386
80486
奔腾
奔腾 2代
奔腾 4代
80286
8086
奔腾 3代
IA-64
(安腾)
4004
不是我不明白,
这世界变化太快。
扎扎实实掌握知识,
以不变应万变!
西










微机的硬件
? 中央处理单元 CPU( Intel 80x86)
对汇编语言程序员,最关心其中的 寄存器
? 存储器( 主存储器 )
呈现给汇编语言程序员的,是 存储器地址
? 外部设备( 接口电路 )
汇编语言程序员看到的是 端口( I/O地址)
西










微机的软件
? 系统软件,DOS平台
? MS-DOS 6.22
? Windows 9.x的 DOS实地址方式
? MS-DOS虚拟环境
? 应用软件:开发汇编语言程序涉及
? 文本编辑器
? 汇编程序
? 连接程序
? 调试程序
? 集成化开发环境
西










Chapter 2 IBM PC微型计算机
§ 2.2 IBM PC微型计算机的基本结
构一,IBM公司简介
IBM( International Business Machine Corp.)即美国国际商
业机器公司的简称,她是国际上最著名的计算机公司之一。她于 1981年 8
月推出了个人计算机( Personal Computer),即 IBM PC。现在,IBM
PC系列及其兼容机广泛应用于世界各个领域。
二、微型计算机的一般结构
一般由控制器、运算器、存储器,I/O设备等构成
三,IBM PC微型计算机的基本结构
1,CPU采用 Intel 8086/8088芯片
西










Intel 8086 CPU,16位微处理器
Intel 8088 CPU:准 16位微处理器
二者体系结构类似,指令等相同
Chapter 2 IBM PC微型计算机
西










2、寄存器 14个
8个通用寄存器,2个控制寄存器和 4个段寄存器
3,20条地址线,可直接寻址 1M字节空间
4,I/O端口,最多可扩展到 64K个 I/O端口编号进行 I/O操作
5、存储器
6、其他
主板上有 40K~48K字节的 ROM或 EPROM,64KB或
128KB RAM,可扩展至 640KB。
时钟,4.77MHz
外存,1~2个软驱( 360KB),一个 10M或 20M硬盘
扩展槽,5~8个( ISA)
Chapter 2 IBM PC微型计算机
西










一、传统微处理器的功能结构
§ 2.3 8086/8088CPU的功能结构
1、传统微处理器功能 结构图
2、传统微处理器执行指令的过程
CPU 取指 执行 存数 取指 取指
取数 执行
忙 忙 忙
忙 忙
外部
BUS
3、传统微处理器执行指令的特点
传统微处理器执行指令时,取指令和执行指令采用
的是串行方式,外部总线忙闲不均,且当外部总线忙时,
CPU就处于闲状态,因此 CPU效率低。
ALU
CPU,IO总线控制逻辑
指令寄存器
指令译码器
操作控制部件
累加器 暂存寄存器 通用寄存器
( 8位)
地址寄存器
( 16位)
地址缓冲器
十进制调整





系统控制总线
系统数据总线( D7-D0)
系统地址总线
(A15-A0)
CPU内部总线
Figure 1 传统微处理器功能结构

西










Chapter 2 IBM PC微型计算机
西










二,8086/8088CPU的功能结构
1,8086/8088CPU功能结构
2,8086/8088CPU功能 结构图
Intel 8086/8088CPU采用一种全新的体系结构 --
“指令流水线, 结构,即将 CPU分成 BIU( Bus Interface
Unit)和 EU( Execute Unit)两个部分。
EU,从 BIU指令队列中取指令代码,然后执行指令的
全部功能,如果需要向 Memory或 I/O设备中取数(或存数),
则 EU向 BIU发出访问存储器或 I/O设备的命令,并提供所需
要的数据和地址。
BIU,负责 CPU与 Memory和 I/O设备的信息传递。
EU 和 BIU是 CPU的既分工又合作的两个对立部件,
它们的操作是并行的,分别完成不同的任务,因而加快了
指令的执行速度。
通用寄存器
AX,BX,CX,DX、
SP,BP,SI,DI
段寄存器
CS,DS,ES,SS
指令指针 IP
地址形成与
总线控制
…4/6
1



EU

操作数暂存器
ALU
外部
总线




8086,6个字节
8088,4个字节标志寄存器
执行单元 EU 总线接口单元 BIU
Figure 2 Intel 8086/8088CPU功能结构

西










Chapter 2 IBM PC微型计算机
西










3,8086/8088CPU执行指令的过程
BIU
忙 忙 忙 忙 忙
忙 忙 忙
外部
BUS
4,8086/8088CPU执行指令的特点
8086/8088CPU在执行指令时,通过 BIU部件从存储
器中预取指令到指令队列中,EU部件执行指令时,从指令
队列中取指令,提高了指令的执行速度,并且 EU和 BIU两个
部件并行工作,总线也一直处于忙状态,CPU处于执行状态,
因此 CPU效率高。
EU
取指 取指 取指 存数 取指 取数
取指 取数
执行 执行 执行 执行 执行
执行 执行
Chapter 2 IBM PC微型计算机
西










§ 2.4 8086/8088CPU寄存器结构及用途
一、通用寄存器( General Register)
这类寄存器共有 8个,都是 16位寄存器
1,数据寄存器( Data Register) 4个
4个 16位寄存器,AX,BX,CX和 DX,也可作为 8位
寄存器使用,AH,AL,BH,BL,CH,CL,DH和 DL,可显式
使用,也可隐含使用,还可以做特殊使用。
AX:
CX,DX:
BX:
AH AL
CH DH
BL
DLCL
BH
8086的数据寄存器
? 8086的 16位通用寄存器是:
AX BX CX DX
? 这 4个数据寄存器都还可以分成高 8位和低 8
位两个独立的寄存器
? 8086的 8位通用寄存器是:
AH BH CH DH
AL BL CL DL
? 对其中某 8位的操作,并不影响另外对应 8
位的数据
西










数据寄存器
? 数据寄存器用来存放计算的结果和操作数,也可
以存放地址
? 每个寄存器又有它们各自的专用目的
? AX--累加器,使用频度最高,用于算术、逻辑运算以
及与外设传送信息等;
? BX--基址寄存器,常用做存放存储器地址;
? CX--计数器,作为循环和串操作等指令中的隐含计数
器;
? DX--数据寄存器,常用来存放双字长数据的高 16位,
或存放外设端口地址。
西










Chapter 2 IBM PC微型计算机
西










§ 2.4 8086/8088CPU寄存器结构及用途
2、指针寄存器( Pointer Register) 2个
指针寄存器有 2个,它们是堆栈指针 SP( Stack Pointer)和基
址指针( Base Pointer),都是 16位寄存器,通常用作 16位地址指针,
它指向堆栈段内的某一个存储单元 (字单元 ),当进行堆栈操作时,就隐
含使用 SP。
BP一般亦指向堆栈内的某一个存储单元(字单元)。
SP,BP:
3、变址寄存器( Index Register) 2个
变址寄存器有 2个,它们是源变址寄存器 SI( Source Index)和
目的变址寄存器( Destination Index),都是 16位寄存器,通常用作 16
位地址指针,主要用在变址寻址方式中,既提供偏移地址,可隐含使用,
也可显式使用。
SI,DI:
指针寄存器
? 指针寄存器用于寻址内存堆栈内的数据
? SP为堆栈指针寄存器,指示栈顶的偏移地址
? SP不能再用于其他目的,具有专用目的
? BP为基址指针寄存器,表示数据在堆栈段中的基
地址
? SP和 BP寄存器与 SS段寄存器联合使用以确定堆栈
段中的存储单元地址
西










变址寄存器
? 变址寄存器常用于存储器寻址时提供地址
? SI是源变址寄存器
? DI是目的变址寄存器
? 串操作类指令中,SI和 DI具有特别的功能
西










Chapter 2 IBM PC微型计算机
西










二、段寄存器( Segement Register)
Intel 8086/8088CPU将存储器划分为若干段,把欲
运行的程序的各部分分别放在不同的段中,每个段用一个段
寄存器指示其首地址(段基址)。
偏移量 (Office):一个存储单元与它所在段的段基址之
间的距离(以字节计),叫该单元的偏移量。
4个段寄存器都是 16位寄存器,它们分别是:
CS-代码段寄存器 指向存放指令的代码段
DS-数据段寄存器 指向数据段
ES-附加段寄存器 指向数据段
SS-堆栈段寄存器 指向堆栈段
注, ( 1) 用 CS,DS,ES,SS指向的段叫当前段程序运行时,
一个程序可任意划分为多个段,但最多只有四个当前段。
( 2)四个寄存器的功能不同,不能互换使用。
Chapter 2 IBM PC微型计算机
西










三、指令指针 IP( Instruction
Pointer) IP即指令指针,就是指
程序计数器,它是指令的地址指
针,这个指针有 CPU自动修改,它
始终指向正在执行的指令的下一
条指令。
……
mov ax,bx
add ax,16h
……
注意,程序不能直接访问 IP,
即不能用指令取出 IP值或给 IP设赋值,
但可通过一些指令的执行使 IP值自动
得到修改,如转移指令 JMP,JNE和
程序调用指令 CALL等。
正在执行的指令
IP
指令指针 IP
? 指令指针寄存器 IP,指示代码段中指令的偏移地

? 它与代码段寄存器 CS联用,确定下一条指令的物
理地址
? 计算机通过 CS, IP寄存器来控制指令序列的执行
流程
? IP寄存器是一个专用寄存器
西










Chapter 2 IBM PC微型计算机
西










四、标志寄存器( Flags Register)
Intel 8086/8088CPU的标志寄存器是一个 16位寄存器,
用来反映 CPU在程序运行时的某些状态,或设置某些控制标
志。共 9个标志位,其中 6个状态标志( CF,PF,AF,ZF、
SF和 OF),3个控制标志( TF,IF和 DF)。
OF DF IF TF SF ZF AF CFPF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0













































控制标志位
程序设计需要利用标志的状态
标志的分类
? 状态标志--用来记录程序运行结果的状态
信息,许多指令的执行都将相应地设置它
CF ZF SF PF OF AF
? 控制标志--可由程序根据需要用指令设置,
用于控制处理器执行指令的方式
DF IF TF
西










进位标志 CF( Carry Flag)
? 当运算结果的最高有效位有进位(加法)或借位
(减法)时,进位标志置 1,即 CF = 1;否则 CF
= 0。
3AH + 7CH= B6H,没有进位,CF = 0
AAH + 7CH=( 1) 26H,有进位,CF = 1
西










零标志 ZF( Zero Flag)
? 若运算结果为 0,则 ZF = 1;
否则 ZF = 0
3AH+ 7CH= B6H,结果不是零,ZF= 0
84H+ 7CH= ( 1) 00H,结果是零,ZF= 1
注意,ZF为 1表示的结果是 0
西










符号标志 SF( Sign Flag)
? 运算结果最高位为 1,则 SF = 1;否则 SF =
0
3AH+ 7CH= B6H,最高位 D7= 1,SF= 1
84H + 7CH= ( 1) 00H,最高位 D7= 0,SF= 0
有符号数据用最高有效位表示数据的符号
所以, 最高有效位就是符号标志的状态西华









奇偶标志 PF( Parity Flag)
? 当运算结果最低字节中, 1”的个数为零或偶
数时,PF = 1;否则 PF = 0
3AH+ 7CH= B6H= 10110110B
结果中有 5个 1,是奇数,PF= 0
PF标志仅反映最低 8位中, 1”的个数是
偶或奇, 即使是进行 16位字操作西华









溢出标志 OF( Overflow Flag)
? 若算术运算的结果有溢出,
则 OF= 1;否则 OF= 0
3AH + 7CH= B6H,产生溢出,OF= 1
58+124=182 182>127
AAH+ 7CH= ( 1) 26H,没有溢出,OF= 0
-86+124=38 38<127
西










溢出标志 OF( Overflow Flag)
问题
什么是溢出?
溢出和进位有什么区别?
处理器怎么处理,程序员如何运用?
如何判断是否溢出?
西










西










当运算结果溢出时,OF置 1,否则置 0。产生溢出的
条件是:同符号数相加或异符号数相减运算操作。
注意,溢出与进位是两个不同的概念,例如:
( 1) 100D+100D 64H 01100100B
=200D +64H +01100100B CF=0
C8H 11001000B OF=1 结果错误
( 2)( -85D) +( -1D) ABH 10101011B
=-86D +0FFH +11111111B CF=1
1AAH 110101010B OF=0 结果正确
( 3)( -85D) +( -117D) 0ABH 10101011B
=-202D + 8BH +10001011B CF=1
136H 100110110B OF=1 结果错误
溢出和进位的对比
辅助进位标志 AF( Auxiliary Carry Flag)
3AH + 7CH= B6H,D3有进位,AF = 1
?运算时 D3位 ( 低半字节 ) 有进位或
借位时, AF = 1;否则 AF = 0。
这个标志主要由处理器内部使用,
用于十进制算术运算调整指令中, 用
户一般不必关心
西










方向标志 DF( Direction Flag)
? 用于串操作指令中,控制地址的变化方向:
设置 DF= 0,存储器地址自动增加;
设置 DF= 1,存储器地址自动减少。
?CLD指令复位方向标志,DF= 0
?STD指令置位方向标志,DF= 1
西










中断允许标志 IF( Interrupt-enable Flag)
? 用于控制外部可屏蔽中断是否可以被处理器
响应:
设置 IF= 1,则允许中断;
设置 IF= 0,则禁止中断。
?CLI指令复位中断标志,IF= 0
?STI指令置位中断标志,IF= 1
西










陷阱标志 TF( Trap Flag)
? 用于控制处理器进入单步操作方式:
设置 TF= 0,处理器正常工作;
设置 TF= 1,处理器单步执行指令。
?单步执行指令 —— 处理器在 每条指令执行结
束 时, 便产生一个编号为 1的内部中断
?这种内部中断称为 单步中断
?所以 TF也称为 单步标志
? 利用单步中断可对程序进行逐条指令的调试
? 这种逐条指令调试程序的方法就是 单步调试
西










? 寄存器是微处理器内部暂存数据的存储单元,
以名称表示
? 存储器则是微处理器外部存放程序及其数据
的空间
? 程序及其数据可以长久存放在外存,在程序
需要时才进入主存
? 主存需要利用地址区别存储单元
§ 2.4 8086/8088CPU寄存器结构及用

西










数据信息的表达单位
? 计算机中信息的单位
? 二进制位 Bit,存储一位二进制数,0或 1
? 字节 Byte,8个二进制位, D7~ D0
? 字 Word,16位,2个字节,D15~ D0
? 双字 DWord,32位,4个字节, D31~ D0
? 最低有效位 LSB:数据的最低位,D0位
? 最高有效位 MSB:数据的最高位,对应字节、
字、双字分别指 D7,D15,D31位
图示
西










存储单元及其存储内容
? 每个存储单元都有一个编号;被称为
存储器地址
? 每个存储单元存放一个字节的内容
图示
0002H单元存放有一个数据 34H
表达为 [0002H]= 34H
西










多字节数据存放方式
? 多字节数据在存储器中占 连续的多个存储单
元,
? 存放时,低字节存入低地址,高字节存入高地
址 ;
? 表达时,用它的 低地址表示 多字节数据占据的
地址空间。
图示图 2.3中 2号, 字, 单元的内容为:
[0002H] = 1234H
2号, 双字, 单元的内容为:
[0002H] = 78561234H
80x86处理器采用, 低对低, 高对
高, 的存储形式, 被称为, 小端方式
Little Endian”。
相对应还存在, 大端方式 Big
Endian”。
西










数据的地址对齐
? 同一个存储器地址可以是字节单元地
址、字单元地址、双字单元地址等等
? 字单元安排在偶地址( xxx0B)、双字
单元安排在模 4地址( xx00B)等,被称
为, 地址对齐( Align),
? 对于不对齐地址的数据,处理器访问
时,需要额外的访问存储器时间
? 应该将数据的地址对齐,以取得较高
的存取速度
视具体情况来确定
西










存储器的分段管理
? 8086CPU有 20条地址线
? 最大可寻址空间为 220= 1MB
? 物理地址范围从 00000H~ FFFFFH
? 8086CPU将 1MB空间分成许多 逻辑段
( Segment)
? 每个段最大限制为 64KB
? 段地址的低 4位为 0000B
? 这样,一个存储单元除具有一个唯一的 物理
地址 外,还具有多个 逻辑地址
西










物理地址和逻辑地址
? 对应每个物理存储单元都有一个唯一的 20
位编号,就是物理地址,从 00000H~
FFFFFH。
? 分段后在用户编程时,采用逻辑地址,形式

段基地址, 段内偏移地址
分隔符
西










逻辑地址
? 段地址 说明逻辑段在主存中的起始位置
? 8086规定段地址必须是模 16地址,xxxx0H
? 省略低 4位 0000B,段地址就可以用 16位数据表
示,就能用 16位 段寄存器 表达段地址
? 偏移地址 说明主存单元距离段起始位置的偏移量
? 每段不超过 64KB,偏移地址也可用 16位 数据表示
西










物理地址和逻辑地址的转换
? 将逻辑地址中的段地址左移 4位,加上偏移
地址就得到 20位物理地址
? 一个物理地址可以有多个逻辑地址
逻辑地址 1460:100,1380:F00
物理地址 14700H 14700H
14600H
+ 100H
14700H
13800H
+ F00H
14700H
段地址左移 4位
加上偏移地址
得到物理地址
西










段寄存器和逻辑段
? 8086有 4个 16位段寄存器
? CS(代码段)指明代码段的起始地址
? SS(堆栈段)指明堆栈段的起始地址
? DS(数据段)指明数据段的起始地址
? ES(附加段)指明附加段的起始地址
? 每个段寄存器用来确定一个逻辑段的起始地
址,每种逻辑段均有各自的用途
西










如何分配各个逻辑段
? 程序的 指令序列 必须安排在代码段
? 程序使用的 堆栈 一定在堆栈段
? 程序中的 数据 默认是安排在数据段,也经常
安排在附加段,尤其是串操作的目的区必须
是附加段
? 数据的存放比较灵活,实际上可以存放在任
何一种逻辑段中
演示
西










段超越前缀指令
? 没有指明时,一般的数据访问在 DS段;使用
BP访问主存,则在 SS段
? 默认的情况允许改变,需要使用段超越前缀
指令; 8086指令系统中有 4个:
CS,;代码段超越,使用代码段的数据
SS,;堆栈段超越,使用堆栈段的数据
DS,;数据段超越,使用数据段的数据
ES,;附加段超越,使用附加段的数据
示例
西










段超越的示例
? 没有段超越的指令实例:
MOV AX,[2000H] ; AX←DS:[2000H];从默认的 DS数据段取出数据
? 采用段超越前缀的指令实例:
MOV AX,ES:[2000H] ; AX←ES:[2000H];从指定的 ES附加段取出数据
总结
西










段寄存器的使用规定
访问存储器的方式 默认 可超越 偏移地址
取指令 CS 无 IP
堆栈操作 SS 无 SP
一般数据访问 DS CS ES SS 有效地址 EA
BP基址的寻址方式 SS CS ES DS 有效地址 EA
串操作的源操作数 DS CS ES SS SI
串操作的目的操作数 ES 无 DI
西










存储器的分段
? 8086对逻辑段 要求,
? 段地址低 4位均为 0
? 每段最大不超过 64KB
? 8086对逻辑段 并不要求,
? 必须是 64KB
? 各段之间完全分开(即可以重叠)
各段独立
各段重叠
最 多 多少段? 最 少 多少段?
西










Chapter 2 IBM PC微型计算机
西










一、堆栈的概念
§ 2.6 堆栈( stack)
堆栈是存储器中的一个特殊的存储区域,主要用于中
断或程序调用过程中数据的保护等。
1、堆栈是一个特殊的存储区域。
1、堆栈的深度(最大空间),64KB。
2、栈顶和栈底
3、存取规则,先进后出 FILO( First
In Last Out)。
2、按字组织,既堆栈操作是字操作,每次存取的是两
个字节,高字节存放高位,低字节存放低位。
3、堆栈向下生长,即高地址为栈底,向地址小的方向
发展。
二、堆栈的构造
SS
SP
Bottom三,8086/8088堆栈的组织
4、堆栈初始化时,SP指向 BOTTOM+1单元。
? 堆栈是一个, 后进先出
FILO”(或说, 先进后
出 FILO”)的主存区域,
位于堆栈段中; SS段寄
存器 记录其段地址
? 堆栈只有一个出口,即
当前栈顶;用 堆栈指针
寄存器 SP指定
? 栈顶是地址较小的一端
(低端),栈底不变
西










Chapter 2 IBM PC微型计算机
西










四、堆栈操作
§ 2.6 堆栈( stack)
1、堆栈的定义
stack1 segment para stack
db 64h dup(0)
stack1 ends
2、进栈(压栈)操作
(1) (SP)-2 SP
(2) 数据 (SP)
如,PUSH AX
PUSH DS
PUSH DATA-WORD
PUSHF
PUSH;进栈指令先使
堆栈指针 SP减 2,
然后把一个字操
作数存入堆栈顶

定义堆栈指
令就是在 memory
中按照要求建立
一个堆栈
Chapter 2 IBM PC微型计算机
西










§ 2.6 堆栈( stack)
3、出栈(弹栈)操作
(1) ( (SP)) 寄存器 /存储单元
(2) ( SP) +2 (SP)
如,POPF
POP DATA_WORD
POP DS
POP AX
POP;出栈指令把栈顶
的一个字传送至指
定的目的操作数,
然后堆栈指针 SP加 2
进栈指令 PUSH执行示意图
push ax
push [2000h]
PUSH
西










出栈指令 POP执行示意图
pop ax
pop [2000h]
POP
西










堆栈的特点
? 堆栈操作的单位是字,进栈和出栈只对字量
? 字量数据从栈顶压入和弹出时,都是低地址
字节送低字节,高地址字节送高字节
? 堆栈操作遵循先进后出原则,但可用存储器
寻址方式随机存取堆栈中的数据
? 堆栈常用来
? 临时存放数据
? 传递参数
? 保存和恢复寄存器
例题
西










指令的组成
? 指令由操作码和操作数两部分组成
? 操作码 说明计算机要执行哪种操作,如传送、
运算、移位、跳转等操作,它是指令中不可
缺少的组成部分
? 操作数 是指令执行的参与者,即各种操作的
对象
? 有些指令不需要操作数,通常的指令都有一
个或两个操作数,也有个别指令有 3个甚至
4个操作数
操作码 操作数
指令的操作码和操作数
? 每种指令的 操作码,
? 用一个唯一的助记符表示(指令功能的英文缩
写)
? 对应着机器指令的一个二进制编码
? 指令中的 操作数,
? 可以是一个具体的数值
? 可以是存放数据的寄存器
? 或指明数据在主存位置的存储器地址
寻址方式
? 指令系统设计了多种操作数的来源
? 寻找操作数的过程就是操作数的寻址
? 操作数采取哪一种寻址方式,会影响机器
运行的速度和效率
如何寻址一个操作数对程序设计很重要