第二讲 8086/8088cpu 的结构 2006.9.26( 星期二 )
DESCRIPTION
第二讲 8086/8088CPU 的结构 2006.9.26( 星期二 ). 主要内容: 1. 复习 三种码制之间关系及特点 2. 第三章 8086/8088 微处理器及其系统. 三种码制之间关系及特点: 正数: 原,反,补相同 负数: 原,反,补不同,但最高位为 1 。 负数 : 原→反, 符号位不变,尾数按位求反 反→原 ,符号位不变,尾数求反 . 原→补 ,符号位不变,尾数按位求反 +1 补→原, 符号位不变,尾数求反 +1. [X] 补= 1 000 0000 ,求二进制的真值。 - PowerPoint PPT PresentationTRANSCRIPT
三种码制之间关系及特点:正数:原,反,补相同
负数:原,反,补不同,但最高位为 1 。
负数 : 原→反, 符号位不变,尾数按位求反
反→原 ,符号位不变,尾数求反 .
原→补 ,符号位不变,尾数按位求反 +1
补→原, 符号位不变,尾数求反 +1
[X] 补= 1 000 0000 ,求二进制的真值。
[X] 原= 1 111 1111 + 1 =- 1000 0000 =- 128
真值为绝对值,为 128 。
5. 判断溢出的方法:根据结果判断溢出(运算结果超出了数据宽度表示的范围 127 > D >- 128 )
V=CD7 CD6 , CD7 CD6 不等, V=1 表示有溢出。
两正数相加、两负数相加、正数与负数相加的正数几种情况分析得到。
例:正数溢出的情况
X=0100 0000 (64)10 Y=01000001 (65) 10
0100 0000[ 补码 ]+ 0100 0001[ 补码 ]
= 1000 0001 [ 补码 ](-127) 10 ,
CD7=0 , CD6=1 , V=1, 有溢出,需要进行调整。
本讲内容:
一、 8086/8088 微处理器
1. 内部结构
2. 寄存器结构
概述INTEL 8086 为 16 位机 .
INTEL 8088 (简称 8088 )是一种准 16 位微处理器,
在 INTEL8080 与 8085 的基础上发展起来的。
GND
AD14
AD13
AD12
AD11
AD10
AD9
AD8
AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
NMI
INTR
CLK
GND
VCC (5V)
AD15
A16/S3
A17/S4
A18/S5
A19/S6
BHE/S7
MN/MX
RD
HOLD (RQ/GT0)
HLDA (RQ/GT1)
WR (LOCK)
M/IO (S2)
DT/R (S1)
DEN (S0)
ALE (QS0)
INTA (QS1)
TEST
READY
RESET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
8086CPU
8086/88 结构特点:
(1) 内部结构 是 16 位的
(内部寄存器,内部运算部件,内部操作按 16 位设计);
(2) 外部数据总线 8 条,能处理 16 位数据 , 也能处理 8 位数据;
(具有 16 位运算指令,包括 * 、 / 指令)
(3) 汇编语言与 8080/8085 兼容,即能执行整套 8080/8085 的指令 .
增加了许多 16 位操作指令;
(4) 20 条地址总线,直接寻址能力 1M 字节;
(5) 40 条引线封装;
(6) 单相时钟;
(7) 电源为 5V 。
8086 与 8088 的主要区别在于 8086 的外部数据总线 16 位。
(一)、 8088 编程结构编程结构:从程序员和使用者的角度来看的结构。
这种结构与 CPU 内部的物理结构和实际布局有区别。
8088 编程结构如下页图所示( P23 )
分两部分:
1 、总线接口单元 BIU ( Bus Interface Unit )
2 、执行部件 EU ( Execution Unit )
8086 编程结构
CH
DH
DI
SP
BP
SI
65
标志
3执行部分
控制电路
运算寄存器
ALU1 2 4
DSSS
ES输入/输出
控制电路I P
CS
内部暂存器
BH
AH
DL
CL
AL
BL
20位
地址加法
16位
外部总线
指令队列缓冲器
8位
16位
通用寄存器
执行部件(EU) 总线接口部件(BIU)
1 、总线接口单元 BIU ( Bus Interface Unit )
( 1 ).功能:负责与 M 、 I/O 端口传送数据。
具体讲:
总线接口部件要从内存 取指令送到指令队列;
CPU 执行指令时,要配合执行部件从指定的内存单元 或者外设端口中取数据,将数据传送给执行部件;
或把执行部件的操作结果传送给指定的 M 或 I/O 口。
( 2 ).组成 4 个段地址寄存器( CS 、 DS 、 ES 、 SS ), 16 位指令指针寄存器 IP , 20 位的地址加法器 (16d 段地址 + 偏移地址=物理地址 ),
6 字节( 8086 )或 4 字节( 8088 )的指令队列 ,
总线控制电路 :
处理器与外界总线联系的转接电路。
包括三组总线:
20 位地址总线, 16/8 位双向数据总线,一组控制总线。
(3 ) .二点说明 指令队列
8086 的指令队列为 6 个字节 ,
8088 的指令队列为 4 个字节。
不论是 8086 还是 8088 都会在执行指令的同时从内存中取下一条或几条指令,取来的指令放在指令队列中,使 BIU 具有预取指令的功能,是一种先进先出( FIFO )的数据结构。
指令执行顺序
顺序指令执行:指令队列存放紧接在执行指令后面的那一条指令。
执行转移指令: BIU 清除指令队列中的内容,从新的地址取入指 令,立即送往执行单元,然后再从新单元开始重 新填满队列。
2 、 EU ( Execution Unit )执行单元( 1 )、 功能:负责指令执行。
( 2 )、 组成: 4 个通用寄存器: AX 、 BX 、 CX 、 DX
4 个专用寄存器: BP 、 SP 、 SI 、 DI , 标志寄存器( PSW ):
9 个标志位,其中 6 个条件标志位用于存放结果状态, 算术逻辑单元:
16 位加法器,用于对寄存器和指令操作数进行算术或逻辑运算, EU 控制系统:
接受从总线接口单元的指令队列中取来的指令代码,
对其译码和向 EU 内各有关部分发出时序命令信号,
协调执行指令规定的操作。
由此可见, 8086/8088 取指部分与执行部分是分开的。• 在一条指令的执行过程中可以取出下一条(或多条)指令,指令 在指令队列中排队;• 在一条指令执行完成后 ,就可以立即执行下一条指令,减少 CPU 为取指令而等待的时间,提高 CPU 的利用率和整个运行速度。
8086/8088 微处理器 :
BIU 和 EU 分开,取指和执行可以重迭,
大大减少了等待取指所需的时间,提高 CPU 的利用率。
重迭操作技术:一方面提高了整个执行速率,
另一方面降低了与之相配的存储器的存取速度的要求。
取指 取指 取指 取指 得到数据
等待 执行 执行 执行 执行
(二 ) 、 8088 的寄存器结构 (P22)
PSW (程序状态字)结构
AH AL
BH BL
CH CL
DH DL
SP
BP
SI
DI
IP
PSW
CS
DS
SS
ES
AX
BX
CX
DX
累加器
基址
计数
数据
数据寄存器
015
07815
015
015
附加数据段
堆栈段
数据段
代码段
段寄存器
指令指针
状态标志控制寄存器
堆栈指针
基址指针
源变址
目的变址
指针寄存器
变址寄存器
通用寄存器
OF DF IF TF SF ZF AF PF CF
015 245678910
1 、通用寄存器
通用寄存器包括:
数据寄存器、地址指针寄存器、变址寄存器。 数据寄存器包括 : AX 、 BX 、 CX 、 DX 。
地址指针寄存器包括 : SP 、 BP 。
变址寄存器包括 : SI 、 DI 。
2 、段寄存器 段寄存器包括 : CS 、 SS 、 DS 、 ES 。
3 、控制寄存器 控制寄存器包括: IP 、 PSW 。
1 、通用寄存器
( 1 )数据寄存器AX 、 BX 、 CX 、 DX 作为通用寄存器。
用来暂存计算过程中所用到的操作数,结果或其它信息。
访问形式 : 可以用 16 位的访问 ;
或者可以用字节( 8 位)形式访问 ,
它们的高 8 位记作 : AH 、 BH 、 CH 、 DH 。
它们的低 8 位记作 : AL 、 BL 、 CL 、 DL 。
AX—— ( Accumulator )作为累加器。
它是算术运算的主要寄存器,
所有 I/O 指令都使用这一寄存器与外部设备交换数据。
例: IN AL , 20H
OUT 30H , AX
BX——Base 用作基址寄存器使用。
在计算内存储器地址时,经常用来存放基址。
例: MOV AX, [BX+03H]
CX——Count可以作计数寄存器使用。
在循环 LOOP 指令和串处理指令中用作隐含计数器。
例: MOV CX , 200H
AGAIN: ……
……
LOOP AGAIN ;( CX)-1(CX), 结果 0 转 AGAIN
DX——Data可以作为数据寄存器使用。
一般在双字长乘除法运算时, 把 DX 和 AX 组合在一起存放一个双字长 (32 位 ) 数, DX 用来存放高 16 位 ;
对某些 I/O 操作 DX可用来存放 I/O 的端口地址(口地址 256 )。
例: MUL BX ; (AX)(BX)(DX)(AX)
例 : IN AL , DX
( 2 )地址指针与变址寄存器: 段起始地址
SP 、 BP 、 SI 、 DI 四个 16 位寄存器。
以字为单位在运算过程中存放操作数,
经常用以在段内寻址时提供偏移地址。 段内偏移地址
段地址 :只取段起始地址高 16 位值。
偏移地址 : 指在段内某内存单元物理地址相对段起始地址的偏移值。
…
高 16 位值 0000B
地址指针寄存器 (SP 、 BP )
SP ( stack pointer )——堆栈指针寄存器 用来指示栈顶的偏移地址 , 必须与 SS 段寄存器联合使用确定实际地址。
堆栈和指针如下页图所示。
BP ( base pointer )——基址指针寄存器 可以与 SS 寄存器联合使用来确定堆栈段中某一存储器单元地址。
• 变址寄存器 (SI 、 DI)
SI——Source Index Register 源变址寄存器。
DI——Destination Index 目的变址寄存器。
使用场合:常用于变址寻址。• 一般与 DS 联用,用来确定数据段中某一存储单元的地址,
SI , DI 具有自动增量和自动减量功能 .
例: MOV AX, [SI]
2 、段寄存器段寄存器 : 4 个 16 位段寄存器 CS 、 DS 、 SS 、 ES 。
用来识别当前可寻址的四个段,不可互换的使用。
CS——Code Segment Register 代码段寄存器
用来识别当前代码段(程序一般放在代码段)。
DS——Data Segment Register 数据段寄存器
用来识别当前数据段寄存器。
SS——Stack Segment Register堆栈段寄存器,
用来识别当前堆栈段。
ES——Extra Segment Register附加段寄存器,
用来识别当前附加段。
3 、控制寄存器控制寄存器: IP 、 PSW
IP—Instruction Pointer 指令指针寄存器
用来存储代码段中的偏移地址 ;
程序运行过程中 IP 始终指向下一次要取出的指令偏移地址。 IP 要与 CS 寄存器相配合才能形成真正的物理地址。
PSW— ( Processor States Word Program )
程序状态字寄存器, 16 位寄存器。 由条件码标志 FLAG 、控制标志构成。
只用了其中 9 位 , 6 位条件码标志 , 3 位控制标志。如下表示。 OF DF IF TF SF ZF AF PF CF
015 245678910
条件码标志 :
用来记录程序中运行结果的状态信息作为
后续条件转移指令的转移控制条件。∴称为条件码。条件码包括 6 位: CF 、 PF 、 AF 、 ZF 、 SF 、 OF 。
① OF ( Overflow Flag )溢出标志(一般指补码溢出)
OF=1 :在运算过程中,如操作数超过了机器表示的范围称为溢出。
OF=0 :在运算过程中,如操作数未超过了机器能表示的范围称为 不溢出。
字节允许范围 -128—+127 ,字运算范围 -32768—+
32767 。
② SF ( Sign Flag )符号标志
SF=1 :记录运算结果的符号为负。
SF=0 :记录运算结果的符号为正。
③ ZF ( Zero Flag )零标志
ZF=1 :运算结果为 0 。
ZF=0 :运算结果不为 0 。
④ CF ( Carry Flag )进位标志
CF=1 :记录运算时从最高有效位产生进位值。
CF=0 :记录运算时从最高有效位不产生进值。
⑤ AF ( Auxiliary Carry Flag )辅助进位标志
AF=1 :记录运算时第 3 位(半个字节)产生进位值。
AF=0 :记录运算时第 3 位(半个字节)不产生进位值。
⑥ PF(Parity Flag)奇偶标志
PF=1: 结果操作数低 8 位中有偶数个 1 。
PF=0: 结果操作数低 8 位中有奇数个 1 。
用来为机器中传送信息时可能产生的代码出现情况提供检验条件。
控制标志 :
对控制标志位进行设置后 , 对其后的操作起控制作用。
控制标志位包括 3 位 : TF 、 IF 、 DF 。
跟踪(陷阱)标志 TF 、中断标志 IF 、方向标志 D
F 。 ① TF(Trap Flag)跟踪 (陷阱 ) 标志位
TF=1 ,每执行一条指令后,自动产生一次内部中断,
使 CPU 处于单步执行指令工作方式,便于进行程序调试,用户能检查程序。
TF=0, CPU 正常工作,不产生陷阱。
② IF(Interupt Flag) 中断标志 位
IF=1, 允许外部可屏蔽中断。 CPU可以响应可屏蔽中断请求。
IF=0, 关闭中断。 CPU禁止响应可屏蔽中断请求。
IF 的状态对不可屏蔽中断和内部软中断没有影响。
③DF(Direction Flag)方向标志位
DF=1,每次串处理操作后使变址寄存器 SI 和 DI减量,使串处理从 高地址向低地址方向处理。
DF=0,每次串处理操作后使变址寄存器 SI 和 DI 增量 , 使串处
理从 低地址向高地址方向处理。 DF方向标志位是在串处理指令中控制处理信息的方向用的。
在调试程序时, DEBUG提供了测试标志位的手段,用符号表示标志位的值,每种标志位的符号如下表:
标志名 1标志为 0标志为
OF ( /溢出 是 否) OV NV
DF / )方向(减量 加量 DN UP
IF ( / )中断 允许 关闭 EI DI
SF ( / )符号 负 正 NG PL
ZF ( /零 是 否) ZR NZ
AF ( /辅助进位 是 否) AC NA
PF ( / )奇偶标志 偶 奇 PE PO
CF ( /进位标志 是 否) CY NC
DEBUG 不提供 TF 的符号用于单步方式操作。
1 0 0 0 1 1 0 1 0 0 0 1 0 100
0 0 1 1 0 0 1 0 0 0 0 1 1 0 0 1+
0111101010101010
标志 :
运算结果最高位为 0 SF=0∴ ;
运算结果本身≠ 0 ZF=0∴
低 8 位中 1 的个数为奇数个 ∴ PF=0 ;
最高位没有进位 ∴ CF=0
第三位向第四位无进位 ∴ AF=0 ;
次高位向最高位没有进位 ,最高位向前没有进位 , OF=0 。
例 1 :执行 1345+3219 两个数的加法,分析对标志位的影响。
标志 :运算结果最高位为 1 , SF=1 ;运算结果本身不为 0 , ZF=0 ;最高位向前无进位, CF=0 次高位向最高位产生进位 ,而最高位向前没有进位, OF=1 ;结果低 8 位含偶数个 1 , PF=1 ;第三位向第四位有进位 , AF=1 。在绝大多数情况下,一次运算后并不影响所有标志,程序也并不需要对所有的标志作全面的关注。一般只是在某些操作后 , 对其中某个标志进行检测。
例 2 :执行 5439+456A 两个数的加法,分析对标志位的影响。0 1 0 1 0 0 0 0 1 1 1 0 0 110
0 1 0 0 0 1 0 1 0 1 1 0 1 0 1 0+
1100010110011001
AF=1OF=1
(三) 引脚信
号
8086
GND
AD14
AD13
AD12
AD11
AD10
AD9
AD8
AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
NMI
INTR
CLK
GND
VCC (5V)
AD15
A16/S3
A17/S4
A18/S5
A19/S6
BHE/S7
MN/MX
RD
HOLD (RQ/GT0)
HLDA (RQ/GT1)
WR (LOCK)
M/IO (S2)
DT/R (S1)
DEN (S0)
ALE (QS0)
INTA (QS1)
TEST
READY
RESET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
8086CPU
8088引脚信号
GND
A14
A13
A12
A11
A10
A9
A8
AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
NMI
INTR
CLK
GND
VCC (5V)
A15
A16/S3
A17/S4
A18/S5
A19/S6
SS0
MN/MX
RD
HOLD (RQ/GT0)
HLDA (RQ/GT1)
WR (LOCK)
IO/M (S2)
DT/R (S1)
DEN (S0)
ALE (QS0)
INTA (QS1)
TEST
READY
RESET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
8088CPU
8086/8088 系统的复位• 复位和启动操作通过 RESET 信号触发执行
– 复位信号• 维持 4 个时钟周期的高电平
– 初次加电复位• 维持不小于 50μs 的高电平
• RESET 信号一进入高电平, 8086/8088CPU 就会结束现行操作。
• 只要 RESET 信号停留在高电平状态, CPU 就维持在复位状态,在复位状态 CPU 各内部寄存器都被设为初值。
复位时各内部寄存器的值标志寄存器 清零
I P指令指针( ) 0000H
CS寄存器 FFFFH
DS寄存器 0000H
SS寄存器 0000H
ES寄存器 0000H
指令队列 空其他寄存器 0000H
8086/8088 系统的启动操作• 复位信号 RESET 从高电平到低电平的跳
变会触发 CPU 内部的一个复位逻辑电路,经过 7 个时钟周期之后, CPU 就被启动而恢复正常工作。
• 系统从 FFFF0H 处开始执行程序。