存储器
I/O
接口输入设备
I/O
接口输入设备CPU
第二章 8086/8086微处理器 ( 10学时 )
第三章 汇编语言程序设计 ( 7学时 )
第四章 PC机的总线结构和时序 ( 3学时 )
第五章 微机接口技术概述 ( 5学时 )
第六章 中断技术 ( 4学时 )
第七章 并行输入 /输出接口 ( 4学时 )
第八章 数 /模,模 /数转换接口 ( 6学时 )
第九章 半导体存储器 ( 2学时 )
第十章 高档微处理器 ( 2学时)
感受 (接触 )硬件 了解硬件设计硬件 控制硬件第二章 8086/8088微处理器第一节 8086/8088微处理器的结构第二节 8086/8088的寻址方式第三节 8086/8088的指令系统第四节 DOS操作系统简介第一节 8086/8088微处理器的结构一,简介二,8086/8088的编程结构
1,总线接口部件
2,执行部件
3,工作原理三,8086/8088的寄存器组
介绍 调试程序 DEBUG
四,8086/8088的存储器组织
1,内存物理地址的形成
2,内存单元内容的存放及表示五,8086/8088的 I/O组织一,8086/8088简介
Intel 系列 的 16位 CPU
双列直插式封装
40根引脚工作频率为 4.77MHz~ 10MHz
工作电源 +5V
8088
8086,
对外有 16根数据线,20根地址线可寻址的内存单元数 220 = 1M
内存地址范围 00000 ~ FFFFFH
8088,
内部寄存器,运算部件及内部操作均按 16位设计,
除对外数据线为 8根外,其余与 8086基本相同 。
为与当时已有的 8位外设接口芯片兼容 。
IBM PC,IBP PC/XT 采用 8088CPU
8088
二,8086/8088的编程结构
编程结构:
指从程序员和使用者的角度看到的结构 。
与芯片内部的物理结构和实际布局有区别 。
某 CPU芯片内部实物图
1,总线接口部件 BIU
( Bus Interface Unit)
→ 运输部门
2,执行部件 EU
(Execute Unit)
→ 加工部门
3,工作原理
DS
ES
SS
CS
IP
数据暂存器执 行 部 件控 制 电 路指令译码器总线接口控制电路
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组 BIU
AB
DB
CB
地址加法器指令队列
PSW
标志寄存器
EU
运算器
8088 编程结构执 行 部 件控 制 电 路地址加法器指令队列运算器
1,总线接口部件 BIU
构成部分
4个 16位段寄存器:
CS,DS,ES,SS
16位 IP指令指针寄存器地址加法器
4字节的指令队列
( 8086的指令队列为 6字节 )
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
BIU主要功能负责与存储器,I/O接口传递数据具体完成:
1)从内存取指令,送到指令队列,
2)配合执行部件从指定的内存单元或 I/O端口取数据,
3)将执行部件的操作结果送到指定的内存单元或 I/O端口 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
2,执行部件 EU
构成部分:
8个 16位寄存器:
AX,BX,CX,DX
SP,BP,DI,SI
1个标志寄存器 PSW
1个算术逻辑运算部件 ALU
主要功能执行部件负责指令的执行 。
(包括算术,逻辑运算,控制命令等 )
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
3,工作原理计算机的工作过程是,取指令,执行指令
CPU 总线 内存
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
、、、
指令 1
指令 2
指令 3
指令 4
、、、
数据 1
数据 2
数据 3
、、、
地址总线 AB
数据总线 DB
控制总线 CB
地址译码器总线接口部件和执行部件可并行工作,提高工作效率 。
指令的提取和执行分别由 BIU和 EU完成 。
BIU和 EU相互独立又相互配合
1) 当指令队列有一个空字节时,
BIU自动把指令取到指令队列中
2) 执行部件总是从指令队列前部提出指令去执行 。
3) 如果在执行指令的过程中,
需要访问内存或 I/O端口,
EU会请求 BIU去完成存取操作 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
由于有指令队列的存在,
在 EU执行指令的同时,BIU可取指令,
即 BIU和 EU可处于并行工作状态 。
取指 取指 取指 取指 取数 取指等待 执行 执行 执行 等待 执行时间
8088的工作原理:
BIU
EU
三,8086/8088的寄存器组
共有 14个 16位寄存器,
其中:
AX,BX,CX,DX
又可分成两个 8 位寄存器 。
其它 10个只能作为 16位寄存器 。
DS
ES
SS
CS
IP
数据暂存器执 行 部 件控 制 电 路指令译码器总线接口控制电路
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组 BIU
AB
DB
CB
地址加法器指令队列
PSW
标志寄存器
EU
运算器
8088 编程结构执 行 部 件控 制 电 路地址加法器指令队列运算器
De stinatio n Ind ex
目的变址寄存器
SI
DI
BP
SP
AX 累加器 Ac cum ula tor
BX 基数寄存器 B ase
CX 计数寄存器 C oun t
DX 数据寄存器 D ata
AH
BH
CH
DH
AL
BL
CL
DL
IP
PSW
DS
ES
SS
CS
数据段寄存器 D ata Segme nt
附加段寄存器 E xtr a Segme nt
堆栈段寄存器 S t ack S egm ent
代码段寄存器 C ode Segme nt
Pr oces sor Statu s W ord
状态标志寄存器
Instr uction Poin ter
指令指针寄存器变 址寄存器段寄存器控制寄存器通用寄存器
Sou r ce Index
源变址寄存器
Base Po int
基址指针寄存器
Stack Poin t
堆栈指针寄存器指 针寄存器数 据寄存器
状态标志寄存器 PSW (Program Status Word)
16位寄存器,包含 9个标志各标志在标志寄存器中的位置如下:
用了其中的 9位,其它 7位在 8086/8088中无意义 。
1 5 1 4 1 1 1 0 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
9个标志按其作用分 状态标志 和 控制标志 两类
状态标志,OF,SF,ZF,AF,PF,CF共 6个记录指令运行过程或运算结果的状态信息 。
常作为后续转移指令的控制条件,又称为条件码 。
控制标志,DF,IF,TF 共 3个作用是控制 CPU的操作 。
15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
各状态标志的含义,15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
CF,进位标志 (Carry Flag)
反应运算过程中,最高位是否产生进位 /借位 。
(最高位,对字节操作指 D7位,对字操作指 D15位 )
加法,最高有效位有进位 CF= 1,否则 CF= 0
减法,最高有效位有借位 CF= 1,否则 CF= 0
AF,辅助进位标志 (Auxiliary Carry Flag)
反应运算过程中,对字节操作 D3位 是否产生进位 。
对字操作 D7位有进位或借位时,AF= 1,否则 AF= 0。
ZF,零标志 (Zero Flag)
反应运算结果是否为 0。
运算结果为 0 时,ZF= 1,否则 ZF= 0
SF,符号标志 (Sign Flag)
反应运算结果的符号位 。
对字节操作 SF= D7
对字操作 SF= D15
15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
OF,溢出标志 (Overflow Flag)
反应运算过程中是否产生溢出。
产生溢出,OF= 1,否则为 0。
PF,奇偶标志 (ParityFlag)
反应运算结果中,1”的个数情况 。
有偶数个,1”时,PF= 1,否则 PF= 0。
1 0 1 1 0 1 0 1 被加数 8位
+ 1 0 0 0 1 1 1 1 加数 8位进位 1 1 1 1 1 1 1
0 1 0 0 0 1 0 0 和 8位
PSW
标志寄存器运算器标志寄存器运算器被加数加数和进位例 8位二进制加法如下,给出各状态标志位的值最高位 D7位产生进位,CF = 1
D3位产生进位,AF = 1
相加的结果为 44H,不为 0,ZF = 0
结果的最高位为 0,SF = 0
两负数相加结果为正,溢出,OF = 1
结果中有 2个 1,偶数个 1,PF = 1 15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
1 0 0 1 1 1
各控制标志作用 (以后用到再介绍 ),15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
DF,方向标志在串操作指令中控制地址变化的方向 。
当 DF= 1时,地址递减;当 DF=0时,地址递增 。
IF,中断标志当 IF= 1时,允许 CPU响应可屏蔽中断申请 。
当 IF=0时,禁止 CPU响应可屏蔽中断申请 。
TF,跟踪标志为调试程序设置的一个控制标志 。
当 TF= 1时,CPU按单步方式执行指令 。
调试程序 DEBUG
DEBUG.exe 是 DOS提供的一个调试汇编语言程序的程序每个版本的 DOS都带有该程序。
DEBUG程序采用的是命令行方式使用不方便,但实用性强是学习汇编语言程序、计算机硬件等课程的有效工具
其他调试程序,
Turbo Debugger ( TD.exe )
Code View
Softice
DEBUG 主要命令一览命令 功能简介
R 显示、修改寄存器内容
RF 显示、修改 PSW 内容
A 汇编指令
U 反汇编
T 单步、多步执行指令
P 单步、多步执行指令
G 连续执行指令
D 显示内存内容
E 修改内存内容
W 将内存块写入文件
L 将文件调入内存
I 读入端口的内容
O 将数据写入端口
Q 退出 DEB UG,返回 D OS
DEBUG程序 的具体作用,
1,查看 /修改寄存器,内存单元的内容;
2,学习寻址方式和指令系统 ;
3,了解计算机取指令,执行指令的工作过程;
4,调试有问题的 汇编语言 程序。
注意,DEBUG下符号与标志的对应关系
,实验指导书,P95
标志名称 1 0
溢出标志 OF OV NV
方向标志 DF DN UP
中断标志 IF EI DI
符号标志 SF NG PL
零标志 Z F ZR NZ
辅助标志 AF AC NA
奇偶标志 PF PE PO
进位标志 CF CY NC
D:\>DEBUG? ;进入 DEBUG
-R? ;查看当前各寄存器的内容
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1271 ES=1271 SS=1271 CS=1271 IP=0100
NV UP EI PL NZ NA PO NC
1271:0100 B83412 MOV AX,1234
-D 0,0? ;查看 0,0~7FH内存块的内容
0000:0000 9E 0F C9 00 65 04 70 00-16 00 EB 07 65 04 70 00,...e.p.....e.p.
0000:0010 65 04 70 00 54 FF 00 F0-58 7F 00 F0 F5 E7 00 F0 e.p.T...X....…
、、、、、、
-U FFFF,0? ;反汇编 FFFF:0 处的指令
FFFF:0000 CD19 INT 19
FFFF:0002 E000 LOOPNZ 0004
、、、、、、
课后可参照下列步骤做实验,
-A? ;汇编一条指令
1271:0100 MOV AX,1234
1271:0103
-T =100? ;执行该指令
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1271 ES=1271 SS=1271 CS=1271 IP=0103
NV UP EI PL NZ NA PO NC
1271:0103 E9C300 JMP 01C9
-R? ;查看指令执行后结果
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1271 ES=1271 SS=1271 CS=1271 IP=0103
NV UP EI PL NZ NA PO NC
-Q? ;退出 DEBUG
D:\>
四,8086/8088的存储器组织
1,内存物理地址的形成
2,内存单元内容的存放及表示
1.内存物理地址的形成
取指令,取数,存数时,都要访问内存,
被访问内存单元的地址由 CPU提供 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
、、、
指令 1
指令 2
指令 3
指令 4
、、、
数据 1
数据 2
数据 3
、、、
地址总线 AB
数据总线 DB
控制总线 CB
地址译码器
8086/8088有 20根地址线,
可寻址 220 =1M个内存单元,
而 CPU内部寄存器均为 16位,
故:
20位的地址需由一个附加部件完成 。
这个部件就是 地址加法器 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
地址加法器的工作原理可表示为:
物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 16 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址即段寄存器的内容左移 4位,加上偏移地址
DS
ES
SS
CS
IP
地址总线 AB
地址加法器物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址
段寄存器有 4个,DS,ES,CS,SS
偏移地址由 IP,SP,BX,BP,SI,DI
或一个 8位或 16位二进制数得到 。
这种存储器管理方式叫 分段编址 。
DS
ES
SS
CS
IP
地址总线 AB
地址加法器物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址或段寄存器的内容左移 4位,加上偏移地址例,某内存单元的段地址由 DS,偏移地址由 BX给出 。
若 ( DS) = 2000H,( BX) = 1000H,计算其物理地址 。
PA = ( DS ) × 10H + ( BX )
= 2000H × 10H + 1000H = 21000H
2 000 0H
+ 100 0H
21 000 H
00 10 000 0 00 00 000 0 000 0B
+ 00 01 000 0 000 0 00 00B
00 10 000 1 00 00 000 0 000 0B
A19 A16 A12 A8 A4 A020根地址线,
要点,
(段地址由 16位的段寄存器 给出,可将段地址 直接用 16位表示 )
物理地址 20位,段地址 20位,偏移地址 16位。
物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址
由 16位段寄存器 决定有 216 = 64 K个段值由 16位偏移地址 决定 每个段的大小为 0 ~ 64K
每个段最大 64 K,但不一定是 64 K,可据需要分配。
用 ( )表示内存单元的内容:
( 21000H ) = 0FH
( 2000,1000H ) = 0FH
( DS,BX ) = 0FH
内存单元物理地址的几种表示方法:
PA = 21000H
= 2000,1000H
= DS,BX
…...
0Fh
FFh
56h
…...
21000H
内存
DS:BX
2000:1000H
指令的地址 固定由 CS和 IP两个寄存器决定 。
(代码段寄存器 和 指令指针寄存器 )
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
、、、
指令 1
指令 2
指令 3
指令 4
、、、
数据 1
数据 2
数据 3
、、、
地址总线 AB
数据总线 DB
控制总线 CB
地址译码器例 开机 或 RESET复位后,( CS ) = FFFFH,( IP ) = 0
故 8086/8088执行的 第一条指令 所在内存的地址为:
PA = ( CS ) × 10H + ( IP )
= FFFF H × 10H + 0
= FFFF0H …...EA
53
FF
00
F0
…...
FFFF0
内存
D:\> DEBUG? ;进入 DEBUG
-U FFFF:0? ;反 汇编 FFFF:0处的指令
、、、,;显示指令
- Q? ;退出 DEBUG
实验:在 DEBUG下查看开机后执行的第一条指令讨论:
1,开机后的第一条指令应该在内存的什么区域?
ROM还是 RAM? 为什么?
2,开机后执行的第一条指令的地址是否固定?为什么?
每个内存单元有唯一的物理地址,
但可由不同的段地址和偏移地址构成 。 (实验二内容 )
例 某内存操作的段值由 DS 给出,偏移值由 BX给出。
若 ( DS ) = 1000H,( BX ) = 0150H,则:
PA = ( DS ) × 10H + ( BX )
= 1000 H × 10H + 0150H
= 10150H
若 ( DS ) = 1010H,( BX ) = 0050H,则:
PA = ( DS ) × 10H + ( BX )
= 1010 H × 10H + 0050H
= 10150H
…...
12h
34h
56h
…...
10150H
内存
10151H
10152H
物理地址相同,就选中同一单元
2,内存单元内容的存放及表示表示为:
( 01000H ) = 1EH
( 01001H ) = 2FH
…...
1E
2F
3C
…...
01000H
内存
01001H
01002H
一个内存单元可以存放一个字节信息
8086/8088是 16位 CPU,可对内存进行字节或字操作例 将字数据 1234H写入从 02000H开始的内存单元
…...
34h
12h
…...
02000H
内存
02001H
当往内存写一个字数据时,写入规则是:
写入的结果:
( 02000H ) = 34H
( 02001H ) = 12H
低字节 到 低地址单元高字节 到 高地址单元
D:\>DEBUG? ;进入 DEBUG
- A? ;汇编一条传送指令
1693:0100 MOV word ptr[0],1234?
1693:0106?
-T? ;执行该指令
AX=0000 BX=0000 CX=0000 DX=0000
SP=FFEE BP=0000 SI=0000 DI=0000
DS=1693 ES=1693 SS=1693 CS=1693 IP=0106
NV UP EI PL NZ NA PO NC
1693:0106 50 PUSH AX
-D DS:0? ;查看结果
1693:0000 34 12 FF 9E 00 9A EE FE-1D F0 4F 03 18 10 8A 03
1693:0010 18 10 17 03 18 10 23 0E-01 01 01 00 02 FF FF FF
-Q? ;退出 DEBUG
实验:在 DEBUG下查看数据在内存中的存放情况:
低地址存放低字节高地址存放高字节
(1693:0000) = 34h
(1693:0001) = 12h
取入的结果:
( AL ) = 34H
( AH ) = 12H
或表示为 ( AX ) =1234H
例 将内存 02000H单元的字数据 1234H取入 AX寄存器中
…...
34h
12h
…...
02000H
内存
02001H
将内存的某一字数据取至 CPU内的寄存器时,
取 入规则是:
低字节 到 低 8位寄存器高字节 到 高 8位寄存器
在书写时,可用首地址表示相邻内存单元的内容如 ( 02000H ) = 1234 H
等价于,
( 02000H) = 34H
( 02001H) = 12H
注意,按照 低字节低地址,高字节高地址 规律
…...
34h
12h
…...
02000H
内存
02001H
五,8086/8088的 I/O组织
I/O端口 1
I/O端口 2
I/O端口 3
地址译码数据缓冲控制电路外设
AB
DB
CB
C
P
U
CPU通过 I/O接口电路与外设连接。
各 I/O接口内部有一个或若干 I/O寄存器 ( I/O端口 )
CPU对 I/O端口可进行读 /写操作 。
8086/8088可寻址 216= 64 K个 I/O端口
I/O端口范围 0000 ~ FFFFH
8086/8088设有专用的指令对 I/O端口进行读写操作,
即 IN 和 OUT指令 (在第五章详细介绍) 。
I/O
接口输入设备
I/O
接口输入设备CPU
第二章 8086/8086微处理器 ( 10学时 )
第三章 汇编语言程序设计 ( 7学时 )
第四章 PC机的总线结构和时序 ( 3学时 )
第五章 微机接口技术概述 ( 5学时 )
第六章 中断技术 ( 4学时 )
第七章 并行输入 /输出接口 ( 4学时 )
第八章 数 /模,模 /数转换接口 ( 6学时 )
第九章 半导体存储器 ( 2学时 )
第十章 高档微处理器 ( 2学时)
感受 (接触 )硬件 了解硬件设计硬件 控制硬件第二章 8086/8088微处理器第一节 8086/8088微处理器的结构第二节 8086/8088的寻址方式第三节 8086/8088的指令系统第四节 DOS操作系统简介第一节 8086/8088微处理器的结构一,简介二,8086/8088的编程结构
1,总线接口部件
2,执行部件
3,工作原理三,8086/8088的寄存器组
介绍 调试程序 DEBUG
四,8086/8088的存储器组织
1,内存物理地址的形成
2,内存单元内容的存放及表示五,8086/8088的 I/O组织一,8086/8088简介
Intel 系列 的 16位 CPU
双列直插式封装
40根引脚工作频率为 4.77MHz~ 10MHz
工作电源 +5V
8088
8086,
对外有 16根数据线,20根地址线可寻址的内存单元数 220 = 1M
内存地址范围 00000 ~ FFFFFH
8088,
内部寄存器,运算部件及内部操作均按 16位设计,
除对外数据线为 8根外,其余与 8086基本相同 。
为与当时已有的 8位外设接口芯片兼容 。
IBM PC,IBP PC/XT 采用 8088CPU
8088
二,8086/8088的编程结构
编程结构:
指从程序员和使用者的角度看到的结构 。
与芯片内部的物理结构和实际布局有区别 。
某 CPU芯片内部实物图
1,总线接口部件 BIU
( Bus Interface Unit)
→ 运输部门
2,执行部件 EU
(Execute Unit)
→ 加工部门
3,工作原理
DS
ES
SS
CS
IP
数据暂存器执 行 部 件控 制 电 路指令译码器总线接口控制电路
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组 BIU
AB
DB
CB
地址加法器指令队列
PSW
标志寄存器
EU
运算器
8088 编程结构执 行 部 件控 制 电 路地址加法器指令队列运算器
1,总线接口部件 BIU
构成部分
4个 16位段寄存器:
CS,DS,ES,SS
16位 IP指令指针寄存器地址加法器
4字节的指令队列
( 8086的指令队列为 6字节 )
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
BIU主要功能负责与存储器,I/O接口传递数据具体完成:
1)从内存取指令,送到指令队列,
2)配合执行部件从指定的内存单元或 I/O端口取数据,
3)将执行部件的操作结果送到指定的内存单元或 I/O端口 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
2,执行部件 EU
构成部分:
8个 16位寄存器:
AX,BX,CX,DX
SP,BP,DI,SI
1个标志寄存器 PSW
1个算术逻辑运算部件 ALU
主要功能执行部件负责指令的执行 。
(包括算术,逻辑运算,控制命令等 )
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
3,工作原理计算机的工作过程是,取指令,执行指令
CPU 总线 内存
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
、、、
指令 1
指令 2
指令 3
指令 4
、、、
数据 1
数据 2
数据 3
、、、
地址总线 AB
数据总线 DB
控制总线 CB
地址译码器总线接口部件和执行部件可并行工作,提高工作效率 。
指令的提取和执行分别由 BIU和 EU完成 。
BIU和 EU相互独立又相互配合
1) 当指令队列有一个空字节时,
BIU自动把指令取到指令队列中
2) 执行部件总是从指令队列前部提出指令去执行 。
3) 如果在执行指令的过程中,
需要访问内存或 I/O端口,
EU会请求 BIU去完成存取操作 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
由于有指令队列的存在,
在 EU执行指令的同时,BIU可取指令,
即 BIU和 EU可处于并行工作状态 。
取指 取指 取指 取指 取数 取指等待 执行 执行 执行 等待 执行时间
8088的工作原理:
BIU
EU
三,8086/8088的寄存器组
共有 14个 16位寄存器,
其中:
AX,BX,CX,DX
又可分成两个 8 位寄存器 。
其它 10个只能作为 16位寄存器 。
DS
ES
SS
CS
IP
数据暂存器执 行 部 件控 制 电 路指令译码器总线接口控制电路
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组 BIU
AB
DB
CB
地址加法器指令队列
PSW
标志寄存器
EU
运算器
8088 编程结构执 行 部 件控 制 电 路地址加法器指令队列运算器
De stinatio n Ind ex
目的变址寄存器
SI
DI
BP
SP
AX 累加器 Ac cum ula tor
BX 基数寄存器 B ase
CX 计数寄存器 C oun t
DX 数据寄存器 D ata
AH
BH
CH
DH
AL
BL
CL
DL
IP
PSW
DS
ES
SS
CS
数据段寄存器 D ata Segme nt
附加段寄存器 E xtr a Segme nt
堆栈段寄存器 S t ack S egm ent
代码段寄存器 C ode Segme nt
Pr oces sor Statu s W ord
状态标志寄存器
Instr uction Poin ter
指令指针寄存器变 址寄存器段寄存器控制寄存器通用寄存器
Sou r ce Index
源变址寄存器
Base Po int
基址指针寄存器
Stack Poin t
堆栈指针寄存器指 针寄存器数 据寄存器
状态标志寄存器 PSW (Program Status Word)
16位寄存器,包含 9个标志各标志在标志寄存器中的位置如下:
用了其中的 9位,其它 7位在 8086/8088中无意义 。
1 5 1 4 1 1 1 0 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
9个标志按其作用分 状态标志 和 控制标志 两类
状态标志,OF,SF,ZF,AF,PF,CF共 6个记录指令运行过程或运算结果的状态信息 。
常作为后续转移指令的控制条件,又称为条件码 。
控制标志,DF,IF,TF 共 3个作用是控制 CPU的操作 。
15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
各状态标志的含义,15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
CF,进位标志 (Carry Flag)
反应运算过程中,最高位是否产生进位 /借位 。
(最高位,对字节操作指 D7位,对字操作指 D15位 )
加法,最高有效位有进位 CF= 1,否则 CF= 0
减法,最高有效位有借位 CF= 1,否则 CF= 0
AF,辅助进位标志 (Auxiliary Carry Flag)
反应运算过程中,对字节操作 D3位 是否产生进位 。
对字操作 D7位有进位或借位时,AF= 1,否则 AF= 0。
ZF,零标志 (Zero Flag)
反应运算结果是否为 0。
运算结果为 0 时,ZF= 1,否则 ZF= 0
SF,符号标志 (Sign Flag)
反应运算结果的符号位 。
对字节操作 SF= D7
对字操作 SF= D15
15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
OF,溢出标志 (Overflow Flag)
反应运算过程中是否产生溢出。
产生溢出,OF= 1,否则为 0。
PF,奇偶标志 (ParityFlag)
反应运算结果中,1”的个数情况 。
有偶数个,1”时,PF= 1,否则 PF= 0。
1 0 1 1 0 1 0 1 被加数 8位
+ 1 0 0 0 1 1 1 1 加数 8位进位 1 1 1 1 1 1 1
0 1 0 0 0 1 0 0 和 8位
PSW
标志寄存器运算器标志寄存器运算器被加数加数和进位例 8位二进制加法如下,给出各状态标志位的值最高位 D7位产生进位,CF = 1
D3位产生进位,AF = 1
相加的结果为 44H,不为 0,ZF = 0
结果的最高位为 0,SF = 0
两负数相加结果为正,溢出,OF = 1
结果中有 2个 1,偶数个 1,PF = 1 15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
1 0 0 1 1 1
各控制标志作用 (以后用到再介绍 ),15 14 1 1 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
DF,方向标志在串操作指令中控制地址变化的方向 。
当 DF= 1时,地址递减;当 DF=0时,地址递增 。
IF,中断标志当 IF= 1时,允许 CPU响应可屏蔽中断申请 。
当 IF=0时,禁止 CPU响应可屏蔽中断申请 。
TF,跟踪标志为调试程序设置的一个控制标志 。
当 TF= 1时,CPU按单步方式执行指令 。
调试程序 DEBUG
DEBUG.exe 是 DOS提供的一个调试汇编语言程序的程序每个版本的 DOS都带有该程序。
DEBUG程序采用的是命令行方式使用不方便,但实用性强是学习汇编语言程序、计算机硬件等课程的有效工具
其他调试程序,
Turbo Debugger ( TD.exe )
Code View
Softice
DEBUG 主要命令一览命令 功能简介
R 显示、修改寄存器内容
RF 显示、修改 PSW 内容
A 汇编指令
U 反汇编
T 单步、多步执行指令
P 单步、多步执行指令
G 连续执行指令
D 显示内存内容
E 修改内存内容
W 将内存块写入文件
L 将文件调入内存
I 读入端口的内容
O 将数据写入端口
Q 退出 DEB UG,返回 D OS
DEBUG程序 的具体作用,
1,查看 /修改寄存器,内存单元的内容;
2,学习寻址方式和指令系统 ;
3,了解计算机取指令,执行指令的工作过程;
4,调试有问题的 汇编语言 程序。
注意,DEBUG下符号与标志的对应关系
,实验指导书,P95
标志名称 1 0
溢出标志 OF OV NV
方向标志 DF DN UP
中断标志 IF EI DI
符号标志 SF NG PL
零标志 Z F ZR NZ
辅助标志 AF AC NA
奇偶标志 PF PE PO
进位标志 CF CY NC
D:\>DEBUG? ;进入 DEBUG
-R? ;查看当前各寄存器的内容
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1271 ES=1271 SS=1271 CS=1271 IP=0100
NV UP EI PL NZ NA PO NC
1271:0100 B83412 MOV AX,1234
-D 0,0? ;查看 0,0~7FH内存块的内容
0000:0000 9E 0F C9 00 65 04 70 00-16 00 EB 07 65 04 70 00,...e.p.....e.p.
0000:0010 65 04 70 00 54 FF 00 F0-58 7F 00 F0 F5 E7 00 F0 e.p.T...X....…
、、、、、、
-U FFFF,0? ;反汇编 FFFF:0 处的指令
FFFF:0000 CD19 INT 19
FFFF:0002 E000 LOOPNZ 0004
、、、、、、
课后可参照下列步骤做实验,
-A? ;汇编一条指令
1271:0100 MOV AX,1234
1271:0103
-T =100? ;执行该指令
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1271 ES=1271 SS=1271 CS=1271 IP=0103
NV UP EI PL NZ NA PO NC
1271:0103 E9C300 JMP 01C9
-R? ;查看指令执行后结果
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1271 ES=1271 SS=1271 CS=1271 IP=0103
NV UP EI PL NZ NA PO NC
-Q? ;退出 DEBUG
D:\>
四,8086/8088的存储器组织
1,内存物理地址的形成
2,内存单元内容的存放及表示
1.内存物理地址的形成
取指令,取数,存数时,都要访问内存,
被访问内存单元的地址由 CPU提供 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
、、、
指令 1
指令 2
指令 3
指令 4
、、、
数据 1
数据 2
数据 3
、、、
地址总线 AB
数据总线 DB
控制总线 CB
地址译码器
8086/8088有 20根地址线,
可寻址 220 =1M个内存单元,
而 CPU内部寄存器均为 16位,
故:
20位的地址需由一个附加部件完成 。
这个部件就是 地址加法器 。
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
8088 编程结构
BIU
EU
地址加法器的工作原理可表示为:
物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 16 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址即段寄存器的内容左移 4位,加上偏移地址
DS
ES
SS
CS
IP
地址总线 AB
地址加法器物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址
段寄存器有 4个,DS,ES,CS,SS
偏移地址由 IP,SP,BX,BP,SI,DI
或一个 8位或 16位二进制数得到 。
这种存储器管理方式叫 分段编址 。
DS
ES
SS
CS
IP
地址总线 AB
地址加法器物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址或段寄存器的内容左移 4位,加上偏移地址例,某内存单元的段地址由 DS,偏移地址由 BX给出 。
若 ( DS) = 2000H,( BX) = 1000H,计算其物理地址 。
PA = ( DS ) × 10H + ( BX )
= 2000H × 10H + 1000H = 21000H
2 000 0H
+ 100 0H
21 000 H
00 10 000 0 00 00 000 0 000 0B
+ 00 01 000 0 000 0 00 00B
00 10 000 1 00 00 000 0 000 0B
A19 A16 A12 A8 A4 A020根地址线,
要点,
(段地址由 16位的段寄存器 给出,可将段地址 直接用 16位表示 )
物理地址 20位,段地址 20位,偏移地址 16位。
物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址
由 16位段寄存器 决定有 216 = 64 K个段值由 16位偏移地址 决定 每个段的大小为 0 ~ 64K
每个段最大 64 K,但不一定是 64 K,可据需要分配。
用 ( )表示内存单元的内容:
( 21000H ) = 0FH
( 2000,1000H ) = 0FH
( DS,BX ) = 0FH
内存单元物理地址的几种表示方法:
PA = 21000H
= 2000,1000H
= DS,BX
…...
0Fh
FFh
56h
…...
21000H
内存
DS:BX
2000:1000H
指令的地址 固定由 CS和 IP两个寄存器决定 。
(代码段寄存器 和 指令指针寄存器 )
DS
ES
SS
CS
IP
数据暂存器
PSW标志寄存器 执行部件控制电路指令译码器
AX
BX
CX
DX
AH
BH
CH
DH
SI
DI
BP
SP
AL
BL
CL
DL
寄存器组指令队列总线接口控制电路运算器地址加法器
、、、
指令 1
指令 2
指令 3
指令 4
、、、
数据 1
数据 2
数据 3
、、、
地址总线 AB
数据总线 DB
控制总线 CB
地址译码器例 开机 或 RESET复位后,( CS ) = FFFFH,( IP ) = 0
故 8086/8088执行的 第一条指令 所在内存的地址为:
PA = ( CS ) × 10H + ( IP )
= FFFF H × 10H + 0
= FFFF0H …...EA
53
FF
00
F0
…...
FFFF0
内存
D:\> DEBUG? ;进入 DEBUG
-U FFFF:0? ;反 汇编 FFFF:0处的指令
、、、,;显示指令
- Q? ;退出 DEBUG
实验:在 DEBUG下查看开机后执行的第一条指令讨论:
1,开机后的第一条指令应该在内存的什么区域?
ROM还是 RAM? 为什么?
2,开机后执行的第一条指令的地址是否固定?为什么?
每个内存单元有唯一的物理地址,
但可由不同的段地址和偏移地址构成 。 (实验二内容 )
例 某内存操作的段值由 DS 给出,偏移值由 BX给出。
若 ( DS ) = 1000H,( BX ) = 0150H,则:
PA = ( DS ) × 10H + ( BX )
= 1000 H × 10H + 0150H
= 10150H
若 ( DS ) = 1010H,( BX ) = 0050H,则:
PA = ( DS ) × 10H + ( BX )
= 1010 H × 10H + 0050H
= 10150H
…...
12h
34h
56h
…...
10150H
内存
10151H
10152H
物理地址相同,就选中同一单元
2,内存单元内容的存放及表示表示为:
( 01000H ) = 1EH
( 01001H ) = 2FH
…...
1E
2F
3C
…...
01000H
内存
01001H
01002H
一个内存单元可以存放一个字节信息
8086/8088是 16位 CPU,可对内存进行字节或字操作例 将字数据 1234H写入从 02000H开始的内存单元
…...
34h
12h
…...
02000H
内存
02001H
当往内存写一个字数据时,写入规则是:
写入的结果:
( 02000H ) = 34H
( 02001H ) = 12H
低字节 到 低地址单元高字节 到 高地址单元
D:\>DEBUG? ;进入 DEBUG
- A? ;汇编一条传送指令
1693:0100 MOV word ptr[0],1234?
1693:0106?
-T? ;执行该指令
AX=0000 BX=0000 CX=0000 DX=0000
SP=FFEE BP=0000 SI=0000 DI=0000
DS=1693 ES=1693 SS=1693 CS=1693 IP=0106
NV UP EI PL NZ NA PO NC
1693:0106 50 PUSH AX
-D DS:0? ;查看结果
1693:0000 34 12 FF 9E 00 9A EE FE-1D F0 4F 03 18 10 8A 03
1693:0010 18 10 17 03 18 10 23 0E-01 01 01 00 02 FF FF FF
-Q? ;退出 DEBUG
实验:在 DEBUG下查看数据在内存中的存放情况:
低地址存放低字节高地址存放高字节
(1693:0000) = 34h
(1693:0001) = 12h
取入的结果:
( AL ) = 34H
( AH ) = 12H
或表示为 ( AX ) =1234H
例 将内存 02000H单元的字数据 1234H取入 AX寄存器中
…...
34h
12h
…...
02000H
内存
02001H
将内存的某一字数据取至 CPU内的寄存器时,
取 入规则是:
低字节 到 低 8位寄存器高字节 到 高 8位寄存器
在书写时,可用首地址表示相邻内存单元的内容如 ( 02000H ) = 1234 H
等价于,
( 02000H) = 34H
( 02001H) = 12H
注意,按照 低字节低地址,高字节高地址 规律
…...
34h
12h
…...
02000H
内存
02001H
五,8086/8088的 I/O组织
I/O端口 1
I/O端口 2
I/O端口 3
地址译码数据缓冲控制电路外设
AB
DB
CB
C
P
U
CPU通过 I/O接口电路与外设连接。
各 I/O接口内部有一个或若干 I/O寄存器 ( I/O端口 )
CPU对 I/O端口可进行读 /写操作 。
8086/8088可寻址 216= 64 K个 I/O端口
I/O端口范围 0000 ~ FFFFH
8086/8088设有专用的指令对 I/O端口进行读写操作,
即 IN 和 OUT指令 (在第五章详细介绍) 。