第2章 微处理器内部结构

发布于:2021-10-25 18:54:43

第2章 Intel 80x86微处理器的结构
主要内容 8086/8088微处理器内部结构 80386微处理器的结构 Pentium微处理器的结构

2014-6-8

1

qingyang@whut.edu.cn

2.1 Intel 8086/8088微处理器的结构
一、 8086/8088的功能结构 (执行单元与总线接口单元) 二、8086/8088的寄存器结构 三、8086/8088的存储器组织

2014-6-8

2

qingyang@whut.edu.cn

一、执行单元与总线接口单元 (8086 CPU)

qingyang@whut.edu.cn 3 注:8086 CPU数据总线16位,指令队列为6个字节; 8088 CPU数据总线8位,指令队列为 4个字节。 2014-6-8

(一)总线接口单元BIU (Bus Interface Unit)
?

功能:负责与 Memory、I/O 端口传送数据。
? ?

取指令时,从存储器指定地址取出指令送入指令队列排队。 执行指令时,根据EU命令对指定存储器单元或I/O端口存取数据。

?

组成:
? ? ?

? ?

4 个段地址寄存器(CS、DS、ES、SS) 16位指令指针寄存器IP 20位的地址加法器 (16d?段地址+偏移地址=物理地址) 6字节(8086)或4字节(8088)的指令队列 总线控制电路: ? 处理器与外界总线联系的转接电路。包括三组总线:20 位地址总 线, 8 位(8086)/16位(8086)双向数据总线,一组控制总线。

2014-6-8

4

qingyang@whut.edu.cn

(一)总线接口单元BIU (Bus Interface Unit) (cont.)
指令队列
? ?

8086 的指令队列为6个字节, 8088 的指令队列为4个字节。

?

不论是8086还是8088都会在执行指令的同时从内存中取下 一条或几条指令,取来的指令放在指令队列中,使 BIU 具 有预取指令的功能,是一种先进先出(FIFO)的数据结构。

2014-6-8

5

qingyang@whut.edu.cn

(二)执行单元EU ( Execution Unit )
?

功能
? ?

执行指令,进行全部算术逻辑运算、完成偏移地址的计算 向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通用寄存 器和标志寄存器进行管理。

?

组成:
?
? ?

4个通用寄存器:AX、BX、CX、DX 4个专用寄存器:BP、SP、SI、DI 标志寄存器(PSW):
?

9个标志位,其中6个条件标志位用于存放结果状态, 16 位加法器,用于对寄存器和指令操作数进行算术或逻辑运算, 接受从总线接口单元的指令队列中取来的指令代码,对其译码和向 EU 内 各有关部分发出时序命令信号,协调执行指令规定的操作。
6 qingyang@whut.edu.cn

?

算术逻辑单元:
?

?

EU 控制系统:
?

2014-6-8

(三)流水线工作方式
?

8086/8088取指部分与执行部分是分开的。
?

?

在一条指令的执行过程中可以取出下一条(或多条)指令,指令 在指令 队列中排队; 在一条指令执行完成后,就可以立即执行下一条指令,减少CPU为取指令 而等待的时间,提高CPU的利用率和整个运行速度。

?

8086/8088微处理器:
? ?

BIU和EU分开,取指和执行可以重迭, 大大减少了等待取指所需的时间,提高CPU的利用率。

2014-6-8

qingyang@whut.edu.cn

7

(三)、流水线工作方式(cont.)
?

对于8080与8085及较早的8位微处理器:
? ?

程序执行由取指令和执行指令的循环来完成的, 每条指令执行完后CPU必须等到下条指令取出来后才能执行。

2014-6-8

qingyang@whut.edu.cn

8

二、8086/8088的寄存器结构
15 8 7 AX BX CX DX
AH
BH
CH DH SP

0
AL
BL CL DL

累加器 基址寄存器 计数寄存器 数据寄存器 堆栈指针 基址指针 源变址寄存器 目的变址寄存器 指令指针 标志寄存器 控制寄存器 通用寄存器组 数据寄存器

BP
SI DI IP FLAGS CS DS SS ES

地址指针、 变址寄存器

代码段寄存器
数据段寄存器 堆栈段寄存器 附加段寄存器 段寄存器

2014-6-8

9

qingyang@whut.edu.cn

二、8086/8088的寄存器结构(cont.)
?

1、通用寄存器 :
数据寄存器、地址指针寄存器、变址寄存器 ? 数据寄存器包括: AX 、BX 、CX 、DX ? 地址指针寄存器包括: SP 、 BP ? 变址寄存器包括: SI 、 DI

? ?

2、段寄存器:CS 、 SS 、 DS 、 ES 3、控制寄存器 :IP 、PSW

2014-6-8

10

qingyang@whut.edu.cn

(一)通用寄存器
?

(1)数据寄存器
?

AX:(Accumulator)作为累加器。
?

它是算术运算的主要寄存器,所有I/O指令都使用这一寄 存器与外部设备交换数据。 在计算内存储器地址时,经常用来存放基址。 在循环LOOP指令和串处理指令中用作隐含计数器。 一般在双字长乘除法运算时,把DX和AX组合在一起存放 一个双字长(32位)数,DX用来存放高16位; 对某些I/O操作DX可用来存放I/O的端口地址(口地址 ? 256)。
11 qingyang@whut.edu.cn

?

BX : Base用作基址寄存器使用。
?

?

CX : Count可以作计数寄存器使用。
?

?

DX : Data可以作为数据寄存器使用。
?

?

2014-6-8

(一)通用寄存器(cont.)
?

(2)地址指针与变址寄存器
?

SP、BP、SI、DI 四个16位寄存器。以字为单位在运算过 程中存放操作数,经常用以在段内寻址时提供偏移地址。
SP(stack pointer)——堆栈指针寄存器
?

?

用来指示栈顶的偏移地址, 必须与SS段寄存器联合使用确定实际地址。
可以与SS寄存器联合使用来确定堆栈段中某一存储器单元地址。 SI——Source Index Register 源变址寄存器。 DI——Destination Index 目的变址寄存器。
? ? ?

?

BP(base pointer)——基址指针寄存器
?

?

变址寄存器(SI 、 DI)
?

?

使用场合:常用于变址寻址。 一般与DS联用,用来确定数据段中某一存储单元的地址。 串操作中,[DS:SI]寻址源操作数,[ES:DI]寻址目的操作数 , SI、DI具有自 动增量和自动减量功能.

2014-6-8

12

qingyang@whut.edu.cn

(二)段寄存器
?

段寄存器: 4个16位段寄存器CS、DS、SS、ES。 用来识别当前可寻址的四个段,不可互换使用。
?

CS——Code Segment Register 代码段寄存器
?

用来识别当前代码段(程序一般放在代码段)。 用来识别当前数据段。 用来识别当前堆栈段。 用来识别当前附加段。

?

DS——Data Segment Register数据段寄存器
?

?

SS——Stack Segment Register堆栈段寄存器,
?

?

ES——Extra Segment Register附加段寄存器,
?

2014-6-8

13

qingyang@whut.edu.cn

(三) 控制寄存器
?

控制寄存器:IP 、 PSW
?

IP—Instruction Pointer指令指针寄存器
? ?

用来存储代码段中的偏移地址; 程序运行过程中IP始终指向下一次要取出的指令偏移地 址。IP要与CS寄存器相配合才能形成真正的物理地址。 程序状态字寄存器, 16位寄存器。 由状态标志、控制标志构成。
?

?

PSW—(Processor States Word Program)
? ?

只用了其中9位, 6位条状态标志 , 3位控制标志。

2014-6-8

14

qingyang@whut.edu.cn

状态标志寄存器(PSW)

2014-6-8

15

qingyang@whut.edu.cn

标志寄存器---状态标志位
? ?

用来记录程序中运行结果的状态信息,作为后续条件转移指令的转移 控制条件。 状态标志位(条件码)包括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。
16 qingyang@whut.edu.cn

?


? ?

?


?

?

2014-6-8

标志寄存器--状态标志位
?

④ CF(Carry Flag)进位标志
?
?

CF=1:记录运算时从最高有效位产生进位或借位。 CF=0:记录运算时从最高有效位不产生进位/借位。

?

⑤ AF(Auxiliary Carry Flag)辅助进位标志
?
?

AF=1:记录运算时D3位(半个字节)产生进位或借位。 AF=0:记录运算时D3位(半个字节)不产生进位或借位。

?

⑥ PF(Parity Flag)奇偶标志
? ?
?

PF=1: 结果操作数低8位中有偶数个1。 PF=0: 结果操作数低8位中有奇数个1。
用来为机器中传送信息时可能产生的误码提供检验条件。

2014-6-8

17

qingyang@whut.edu.cn

控制标志位
?
?

对控制标志位进行设置后,对其后的操作起控制作用。
控制标志位包括3位: 标志 DF 。 TF、 IF 、 DF 。跟踪(陷阱)标志TF、中断标志IF 、方向

?
?

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方向标志位是在串处理指令中控制处理信息的方向用的。

?

?

2014-6-8

18

qingyang@whut.edu.cn

例:指出8086CPU执行如下指令后,标志寄存器中各状态 标志位的值。 (1) MOV AX,32C5H (2) MOV AX,0E453H ADD AX,546AH ADD AX,0C572H

解 (1) 0011001011000101
+ 0101010001101010 1000011100101111

(2) 1110010001010011 +1100010101110010 1010100111000101 OF=0 SF=1 ZF=0 AF=0 PF=1 CF=1

所以,

OF=1 SF=1 ZF=0 AF=0 PF=0 CF=0

2014-6-8

19

qingyang@whut.edu.cn

例1:执行两个数的加法,分析对标志位的影响。

?

标志: 运算结果最高位为0 ∴SF=0; 运算结果≠0 ∴ZF=0 低8位中1的个数为奇数个 ∴PF=0; 最高位没有进位 ∴CF=0 D3位向D4位无进位 ∴AF=0; 次高位向最高位没有进位 ,最高位向前没有进位 , ∴OF=0。
qingyang@whut.edu.cn 20

2014-6-8

例2:执行两个数的加法,分析对标志位的影响。

?

标志:
运算结果最高位为1, SF=1 ; 运算结果本身不为0, ZF=0 ; 最高位向前无进位, CF=0 次高位向最高位产生进位,而最高位向前没有进位, OF=1 ; 结果低8位含偶数个1, PF=1 ; D3位向D4位有进位, AF=1 。 在绝大多数情况下,一次运算后并不影响所有标志, 程序也并不需要对所有的标志作全面的关注。 一般只是在某些操作后,对其中某个标志进行检测。

2014-6-8

qingyang@whut.edu.cn

21

三、8086/8088的存储器组织
(一)存储器结构 (二)存储器的分段结构和物理地址的形成

2014-6-8

22

qingyang@whut.edu.cn

(一)存储器结构
存储单元的的内容:一个存储单元有效的信息。
一个字存入存储器占有相继的二个单元:
低位字节存入低地址,高位字节存入高地址。

字单元的地址采用它的低地址来表示,可以是 偶地址也可以是奇地址。 同一个地址既可以看作字节单元地址,又可看 作字单元地址,需要根据使用情况确定。

例:字单元
字节单元

:(0004H)= 1234H,
:(0004H)= 34H

2014-6-8

23

qingyang@whut.edu.cn

(一)、存储器结构(cont.)

Intel 8088管理的存储空间: 1.存储单元按字节编址,存 储单元地址20位。 2.存储器的地址空间为1M 字节单元,其地址范围为 00000H~FFFFFH。

2014-6-8

24

qingyang@whut.edu.cn

. (一)、存储器结构(cont.)
FFFFFH

专用区
FFFF0H FFFEFH

1. 存储器地址空间被分为通用和专用 两种存储区。 2. 从地址00000H~003FFH为中断向 量表区,用来存放256个中断服务 程序的入口地址(也称中断向量), 每个入口地址占4个字节单元。 3. 从地址FFFF0H~FFFFFH这16个 字节单元保留给系统的初始化代码。 当处理器加电或复位(Reset)时, CPU执行的第一条指令就是起始于 地址FFFF0H的。 4. 通用区域用来存储一般的程序指令 和数据,它的地址范围为 00400H~FFFEFH。
25

通用区

00400H 003FFH

专用区
00000H

实模式下存储器地址空间
2014-6-8

qingyang@whut.edu.cn

.

(二)存储器的分段结构和物理地址的形成
8086/8088有20条地址总线,直接寻址能力为 220=1M字节。
用16进制数表示1M字节的地址范围应为0000H~FFFFFH。

(1)8086/ 8088内部20位物理地址形成 (2)逻辑地址与物理地址
2014-6-8 26 qingyang@whut.edu.cn

(1)存储器地址分段
?

8086/8088地址总线是20位的,CPU中的寄存器是16位的, 20位地址无法用16位寄存器表示。 Intel8088 对存储器采用分段管理方法。

?

?

段内地址16位,每个段的大小最大可达64KB (实际可以根据需要来确定段大小,可以是1,100, 1000等在64K范围内的任意字节数。) 对段的起始地址有限制 即段不能从任意地址开始,必须从任一小段的首地址开 始。( 从0地址开始每16字节为一小段)

?

2014-6-8

27

qingyang@whut.edu.cn

?

具体做法是,将1M字节的存储空间分成许多逻辑段, 每段最长64K字节单元,可以用16位地址码进行寻址。 每个逻辑段在实际存储空间中的位置是可以浮动的,其 起始地址的低4位必须是0。段寄存器中存放的是段起 始地址的高16位,称之为“段地址” 。 “偏移量”(offset)也称偏移地址,它是所访问的存储 单元距段的起始地址之间的字节距离。 段地址和偏移地址均是16位的。

?

?

2014-6-8

28

qingyang@whut.edu.cn

?

逻辑地址:由段基址和段内偏移地址组成的地址,在程序设计时使用。
? ?

段地址:段起始地址高16位值。 偏移地址:指在段内某内存单元物理地址相对段起始地址 的偏移值。

?

物理地址:存储器的绝对地址(20位的实际地址), 范围从00000H~FFFFFH , 是由CPU访问存储器时由地址总线发出的地 址。
逻辑地址 15 段寄存器 0 段地址16位 15 偏移地址16位 0

15

段地址16位

0
0000

地址加法器 19 物理地址(20位)
29

0
qingyang@whut.edu.cn

2014-6-8

?

物理地址计算方法:
?

即把段地址左移4位再加上偏移地址值形成物理地址,写成:

物理地址= 16d?段地址+偏移地址
物理地址=段地址×10H+偏移地址

?

需注意的是,每个存储单元有惟一的物理地址,但该存储 单元的“段地址”和“偏移地址”是相对的。
? ?

?

换句话说,同一个物理地址与多个逻辑地址相对应。 例如,段地址为0020H,偏移地址为0013H,对应的物理地址为 00213H; 若段地址为0021H,偏移地址为0003H,其对应的物理地址仍然 是00213H。

2014-6-8

30

qingyang@whut.edu.cn

例2.1 设代码段寄存器CS的内容为4232H,指令指针寄存
器IP的内容为0066H,即CS=4232H,IP=0066H,则被 访问的代码段存储单元的物理地址是: 4232H×10H+0066H= 42386H

左移4位

4 2 3 2

段基值 逻辑地址 偏移量

4 2 3 2 0

0 0 6 6

+)

0 0 6 6 4 2 3 8 6
物理地址

2014-6-8

31

qingyang@whut.edu.cn

例2.2 设数据段寄存器DS的内容为1234H,基址寄存器BX
的内容为0022H,即(DS)=1234H,(BX)=0022H,则被 访问数据段存储单元的物理地址是: 1234H×10H+0022H= 42386H
左移4位 1 2 3 4 段基值 逻辑地址 1 2 3 4 0 0 0 2 2 偏移量

+)

0 0 2 2 1 2 3 6 2

物理地址

2014-6-8

32

qingyang@whut.edu.cn

例2.3 若段寄存器内容是002AH,产生的物理地址 是002C3H,则偏移量是多少? 物理地址-段地址×10H = 002C3H-002A0H = 0023H。

2014-6-8

33

qingyang@whut.edu.cn

(二)存储器的分段结构和物理地址的形成(cont.)
?

四种类型的段:代码段,数据段,附加数据段, 堆栈段。
CS – 代码段寄存器,保存代码段段地址 DS – 数据段寄存器,保存数据段段地址 ES – 附加数据段寄存器,保存附加数据段段地址 SS – 堆栈段寄存器,保存堆栈段段地址

?

偏移地址由BX、BP、SP、SI、DI、IP或以这些寄存器 的组合形式来提供 IP – 代码段偏移地址 SP – 堆栈段偏移地址 BX、BP、 SI、DI – 数据段或附加数据段偏移地址
34 qingyang@whut.edu.cn

2014-6-8

(二)存储器的分段结构和物理地址的形成(cont.)
?

存储器典型的分段结构

2014-6-8

35

qingyang@whut.edu.cn

?

各段在存储器中分配:
?

(1)由操作系统负责分配
?

一般情况,各段在存储器中的分配是由操作系统负责。每个段可以独 立地占用64K存储区。

?

(2)各段也可以允许重迭
? ? ?

每个段的大小允许根据实际需要分配,不一定要占64KB。 每个存储单元的内容不允许发生冲突 (段可重迭,但使用时需防止冲突)。

?

( 3)在程序的首部设定各段寄存器的值
?

如果程序中的四个段都是64K的范围之内,程序运行时所需要的信息都 在本程序所定义的段区之内,程序员只要在程序的首部设定各段寄存 器的值就可以了。

?

( 4)动态地修改段寄存器的内容
?

如果程序的某一段(如数据段)在程序运行过程中会超过64K空间,或 者程序中可能访问除本身四个段以外的其他段区的信息,那么在程序 中必须动态地修改段寄存器的内容。

2014-6-8

36

qingyang@whut.edu.cn

堆栈
堆栈定义:
堆栈是存储器中的一个特定的存储区,它的一端(栈底) 是 固定的,另一端(栈顶)是浮动的,信息的存入和取出都只 能在浮动的一端进行,并且遵循后进先出(Last In First Out) 的原则。 *堆栈是一种后进先出型数据结构。 *堆栈是插入和删除操作都只能在一端进行的线性表。

2014-6-8

37

qingyang@whut.edu.cn

堆栈的用途:

?

堆栈主要用来暂时保存程序运行时的一些地址或数据 信息。

? 例如,当CPU执行调用(Call)指令时,用堆栈保存程序
的返回地址(亦称断点地址);

? 在中断响应及中断处理时,通过堆栈“保存现场”和
“恢复现场”;

? 有时也利用堆栈为子程序传递参数。

2014-6-8

38

qingyang@whut.edu.cn

堆栈的结构:
?

堆栈是在存储器中实现的,并由堆栈段寄存器SS和堆 栈指针寄存器SP来定位。
SS寄存器中存放的是堆栈段的段基值,它确定了堆栈 段的起始位置。 SP寄存器中存放的是堆栈操作单元的偏移量,SP总是 指向栈顶。 下图给出了堆栈的基本结构及操作示意图。

?

?

?

2014-6-8

39

qingyang@whut.edu.cn

低地址 SS

SP

SP 高地址 (a) 空栈堆

栈底 (栈顶)

78H 56H 34H 12H

栈顶 SP 栈底

78H 56H 34H 12H

栈顶 栈底

(b) 入栈 PUSH AX (AX=1234H)
PUSH BX (BX=5678H)

(c) 出栈 POP CX
(CX=5678H)

2014-6-8

40

qingyang@whut.edu.cn

堆栈的操作特点:
?

8086管理的堆栈为16位宽(字宽),堆栈操作指令(PUSH 指令或POP指令)对堆栈的操作总是以字为单位进行。 8086对堆栈的操作是“向下生长的(下推式)”,可概括 为: “压栈时, 先修改栈指针后压入数据”, “弹栈 时, 先弹出数据后修改栈指针”。
堆栈为空, SP指向栈底; SP=0, SP指向栈顶,此时 若对堆栈进行“写”操作,将产生“溢出”。

?

?

2014-6-8

41

qingyang@whut.edu.cn

例2.4,已知堆栈段寄存器SS的内容是0FFA0H, 堆栈指针寄存器SP的内容是00B0H,先执行两 条把8057H和0F79H分别进栈PUSH的指令,再 执行一条POP指令。试画出堆栈区和SP的内容 变化过程示意图(标出存储单元的物理地址)。

2014-6-8

42

qingyang@whut.edu.cn


相关推荐

最新更新

猜你喜欢