105
1 第二章 80x86 计算机组织结 2.1 80x86 计算机的基本结构 2.2 80x86 CPU 的寄存器 2.3 内存组织结构 2.4 80x86 CPU 的工作模式 2.5 存储器管理机制  1

Ch2 80x86计算机组织结构

  • Upload
    bitistu

  • View
    1.531

  • Download
    9

Embed Size (px)

Citation preview

Page 1: Ch2 80x86计算机组织结构

1

第二章 80x86计算机组织结构

2.1 80x86 计算机的基本结构

2.2 80x86 CPU 的寄存器

2.3 内存组织结构

2.4 80x86 CPU 的工作模式

2.5 存储器管理机制   1

Page 2: Ch2 80x86计算机组织结构

2

教学要求: 1. 掌握存储器地址的概念和分段概念;掌握物理地址和逻辑地址之间的转换;掌握CPU中寄存器的分类和作用。

2. 理解计算机系统的组织结构。 3. 了解CPU 的内部组织。

Page 3: Ch2 80x86计算机组织结构

3

2.1 80x86 计算机的基本结构

2.1.1 中央处理器

2.1.2 总线结构

2.1.3 存储器

2.1.4 外部设备

3

Page 4: Ch2 80x86计算机组织结构

4

微机硬件系统结构由三部分组成: 中央处理器 CPU(Central Processing Unit) 存储器 (Memory) 输入 /输出 (Input/Output)设备

系统总线 (System Bus)将它们连接在一起。

图 2-1 计算机的基本结构

4

Page 5: Ch2 80x86计算机组织结构

5

2.1.1 中央处理器 又称为微处理器 (Microprocessor)

内部包括运算器、控制器和寄存器三部分。 这些器件靠内部总线相连。

内部总线实现 CPU内部各个器件之间的联系。 外部总线实现 CPU和主板上其它器件的联系。

Page 6: Ch2 80x86计算机组织结构

6

CPU的主要功能:执行存放在内存储器中的指令 运算器:也称为算术逻辑部件,是用来执行指令所要求的算术运算、逻辑运算和数据传送等操作。

控制器:控制执行步骤;从内存中取出指令,分析指令的操作码 , 完成操作数的存取,发出相应的控制命令等。

寄存器:每一个寄存器相当于运算器中的一个存储单元,但速度比存储器快,用来存放计算过程中所需要的或得到的各种信息。

Page 7: Ch2 80x86计算机组织结构

7

CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行三类信息的交互: 存储单元的地址(地址信息) 器件的选择,读或写命令(控制信息) 读或写的数据(数据信息)

2.1.2 总线结构

Page 8: Ch2 80x86计算机组织结构

8

总线负责传送地址、数据和控制信息,包括: 数据总线 DB( Data Bus) 地址总线 AB( Address Bus) 控制总线 CB( Control Bus )

三总线的主要任务:负责 CPU与内存、外存、外部设备交换信息。

8

Page 9: Ch2 80x86计算机组织结构

9

1.  数据总线 DB

在 CPU与内存、 I/O设备之间传送数据 80x86系列的数据总线有 8位、 16位、 32位和64位。

数据总线的宽度决定了 CPU和外界的数据传送速度。

例如:向内存中写入数据 89D8H时,是如何通过数据总线传送数据的: 8088CPU数据总线上的数据传送情况 8086CPU数据总线上的数据传送情况

9

Page 10: Ch2 80x86计算机组织结构

10

8位数据总线上传送的信息

8088CPU数据总线上的数据传送情况

Page 11: Ch2 80x86计算机组织结构

11

8086CPU数据总线上的数据传送情况

16位数据总线上传送的信息

Page 12: Ch2 80x86计算机组织结构

12

2. 地址总线 AB

在 CPU与内存、 I/O设备之间传送地址 内存中的每个字节对应一个唯一的地址, I/O设备也是如此。

地址总线的位数与寻址空间的关系 : 例如: 8086/8088地址总线 20根,则可访问的地址为:

220 =1,048,576 = 1M

则 8086/8088最大可用的存储空间为 1M字节。

Page 13: Ch2 80x86计算机组织结构

13

3. 控制总线 CB

传送控制信息 CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,是一些不同控制线的集合。

控制总线的宽度决定 CPU对外部器件的控制能力。 CPU与内存、外设之间的数据传送操作 :

读 : CPU从内存、外设接口读取数据 写 : CPU把数据写到内存、外设接口中去 读写信息就是控制信息,是通过控制总线传送的。

不同型号的 CPU总线位数不同,相应的字长与寻址空间也不同。

如教材表 2-1所示。

13

Page 14: Ch2 80x86计算机组织结构

14

小结 每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。

一个CPU可以引出三种总线的宽度标志了这个CPU的不同方面的性能: 地址总线的宽度决定了CPU的寻址能力; 数据总线的宽度决定了CPU与其它器件进行数据传送时的一次数据传送量;

控制总线宽度决定了CPU对系统中其它器件的控制能力。

Page 15: Ch2 80x86计算机组织结构

15

2.1.3      存储器

存放指令和数据 包括 : 内存 (主存 )、外部存储器 (辅助存储器 ) 存储单元的地址 (物理地址 ):

存储器由若干存储单元构成 ,存储单元的最小单位是字节。

将所有的存储单元按顺序编号,即每一个字节有一个唯一的编号,这些编号称为存储单元的地址。

Page 16: Ch2 80x86计算机组织结构

16

IBM PC机及其兼容机的存储器系统结构基本相同,存储器系统主要分为 3个主要部分: 程序暂驻区 (TPA) 系统内存区 扩展存储区 (XMS)

存储映像如图 2-2所示。

图 2-2 IBM PC 机及其兼容机的存储器映像

Page 17: Ch2 80x86计算机组织结构

17

程序暂住区: 640KB 包含:中断向量表、BIOS通信区、DOS通信区、 I/O.SYS程序、操作系统的核心部分、当前激活或非激活的应用程序等。

应用程序在执行时就存放在程序暂住区。 系统内存区:

384KB 包括可读写的显示RAM、控制视频显示的BIOS

ROM、硬盘控制器ROM等 扩展存储区:

286以上的计算机才包含的存储区。 只有在保护模式下才可以访问。

Page 18: Ch2 80x86计算机组织结构

18

CPU对存储器的读写

Page 19: Ch2 80x86计算机组织结构

19

对于 8086CPU,下面的指令能够完成从3号单元读数据: 机器码:

101000000000001100000000 对应的汇编指令:MOV AX,[3] 含义:从 3号单元读取数据送入寄存器AX CPU接收这条指令后将完成上述的读写工作。

Page 20: Ch2 80x86计算机组织结构

20

Page 21: Ch2 80x86计算机组织结构

21

2.1.4 外部设备

微机系统中最常用的外部设备有: 键盘 显示器 打印机 外部存储器等

CPU与外部设备交换信息是通过 I/O接口电路来完成的。

Page 22: Ch2 80x86计算机组织结构

22

2.2 80x86 CPU 的寄存器

2.2.1 通用寄存器 2.2.2 控制寄存器 2.2.3 段寄存器

22

Page 23: Ch2 80x86计算机组织结构

23

寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。存取速度比内存快,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。

寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。

另外,寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。

Page 24: Ch2 80x86计算机组织结构

24

2.2 80x86 CPU 的寄存器

寄存器分为 3 类: 通用寄存器 、控制寄存器、段寄存器。

图 2-3 80x86 寄存器组

24

Page 25: Ch2 80x86计算机组织结构

25

2.2.1 通用寄存器 包括: 4个 32位数据寄存器, 2个 32位指针寄存器, 2个 32位变址寄存器。

8个 8位通用寄存器: AL、 AH、 BL、 BH、 CL、 CH、 DL、 DH

8个 16位通用寄存器: AX、 BX、 CX、 DX、 SI、 DI、 BP、 SP

8个 32位通用寄存器: EAX、 EBX、 ECX、 EDX、 ESI、 EDI、 EBP、 E

SP

这些寄存器可以独立使用或组合使用。 可以根据指令要求或数据大小决定使用 8位、 16位还是 32位寄存器。 25

Page 26: Ch2 80x86计算机组织结构

26

通用寄存器 主 要 用 途 显示或隐含使用

EAX , AX累加器   

在算术运算中作为累加器在乘法操作中,存放乘数和乘积

在除法操作中,存放被除数、商和余数 在串操作指令中存放操作数 在 DOS 、 BIOS 的功能调用中存放功能号 (AH)在一般操作中存放操作数或结果

显示隐含隐含隐含显示显示

EBX , BX基址寄存器

在间接寻址或基址变址寻址时用于基址寄存器在一般操作中存放操作数或结果

显示显示

ECX , CX计数器 

在循环指令中,作循环次数计数器 在移位操作时用于移位次数计数器在串操作时可作为循环次数计数器

隐含显示显示

EDX , DX数据寄存器

在 16 位乘法中用于存放乘积高位在 32位÷16 位除法中用于存放被除数高位及余数 I/O 指令间接寻址时用于存放端口地址寄存器

隐含隐含隐含

ESP , SP堆栈指针寄存器

在堆栈操作中用作堆栈指针 隐含

EBP , BP基址指针寄存器

在相对堆栈段的基址加变址寻址时用于基址寄存器在利用堆栈来向子程序传递参数时用于基址寄存器

显示

ESI , SI源变址寄存器

间接寻址时用于地址寄存器和变址寄存器 串操作时用于源变址寄存器

显示隐含

EDI , DI目的变址寄存器

间接寻址时用于地址寄存器和变址寄存器 串操作时用于目的变址寄存器

显示隐含

表 2-.2 通用寄存器的用途

26

Page 27: Ch2 80x86计算机组织结构

27

1. 数据寄存器 ( AX 、 BX 、 CX 、 DX )

用来保存操作数或运算结果等信息。 AX(Accumulator)寄存器称为累加器。使用频度最高,用于算术、逻辑运算以及与外设传送信息等。

BX(Base Register)寄存器称为基址寄存器。常用于存放存储器地址。

CX(Count Register)寄存器称为计数器。一般作为循环或串操作等指令中的隐含计数器。在位操作中,当移多位时,要用CL 来指明移位的位数;

DX(Data Register)寄存器称为数据寄存器。常用来存放双字数据的高 16位,在进行乘、除运算时,它可作为默认的操作数参与运算 ,亦可存放外设端口地址。

27

Page 28: Ch2 80x86计算机组织结构

28

4个 16位数据寄存器AX、BX、CX、DX,每个又可以分为两个独立的 8位寄存器AH、 AL、BH、BL、CH、CL、DH、DL 。

8086上一代CPU中的寄存器都是 8位的,为保证兼容性,使基于上代CPU编写的程序稍加修改就可以运行在 8086之上,这四个寄存器都可以分为两个独立的 8位寄存器使用。

4个 32位通用寄存器:用于 80386以上的机型, EAX、 EBX、 ECX、 EDX。每个寄存器均可分为 1个 16位、 2个 8位寄存器使用。

如 EAX为 32位寄存器,也可将 EAX分为 AX( 16位寄存器)或 AH( 8位寄存器)或 AL( 8位寄存器)。

在 16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

Page 29: Ch2 80x86计算机组织结构

29

8086CPU的 8位寄存器存储逻辑

Page 30: Ch2 80x86计算机组织结构

30

16位寄存器及所分成的两个 8位寄存器的数据存储情况

Page 31: Ch2 80x86计算机组织结构

31

字在寄存器中的存储

一个字可以存在一个 16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低 8位寄存器中。

Page 32: Ch2 80x86计算机组织结构

32

几条汇编指令

汇编指令不区分大小写

Page 33: Ch2 80x86计算机组织结构

33

CPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。

几条汇编指令

Page 34: Ch2 80x86计算机组织结构

34

? 044CH 相加所得的值为 1044CH,但是 ax是 16位寄存器,只能存放 4位 16进制的数据,所以最高位 1不能在 ax中保存

Page 35: Ch2 80x86计算机组织结构

35

Page 36: Ch2 80x86计算机组织结构

36

? 0058H al相加后所得为 158H,但是 al为 8位寄存器,所以最高位 1丢失 丢失 ,指的是进位值不能在 8 位寄存器中保存,

但是 CPU 不是并真的不丢弃这个进位值,这个问题会在后面的课程中讨论。

此时 al是作为一个独立的 8位寄存器使用,和 ah无关,不要认为,诸如 add al,93H的指令产生的进位会存储在 ah中,此时进行的是 8位运算。

如果执行 add ax,93H,低 8位的进位会存储在 ah中,此时进行的是 16位运算。

Page 37: Ch2 80x86计算机组织结构

37

进行数据传送或运算时,要注意指令的两个操作对象位数一致。

例如 : mov ax,bx mov bx,cx mov ax,18H mov al, 18H add ax,bx add ax,20000 mov ax,bl mov bh,ax mov al,20000 add al,100H

Page 38: Ch2 80x86计算机组织结构

38

2. 指针寄存器( SP、 ESP, BP、 EBP、 IP、 EIP)

SP、 ESP:堆栈指针寄存器,存放当前堆栈段栈顶的偏移地址

与 SS堆栈寄存器配合存取堆栈中的数据。 在实模式方式使用 SP,保护模式使用 ESP。 BP、 EBP:基址指针寄存器,在间接寻址时,用来存放基地址,是相对于堆栈段的基地址。

指针寄存器不可分割成 8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

Page 39: Ch2 80x86计算机组织结构

39

3. 变址寄存器

SI、 ESI为源变址寄存器,间接寻址时,在指令中用于地址寄存器和变址寄存器,在串操作时用于源串的地址。

DI、 EDI为目的变址寄存器,间接寻址时,在指令中用于地址寄存器和变址寄存器,在串操作时用于目的串的地址

Page 40: Ch2 80x86计算机组织结构

40

2.2.2 控制寄存器

IP、 EIP为指令指针寄存器,是存放当前正在执行的指令的下一条指令的偏移地址,该寄存器所指的地址为代码段的偏移地址。

在目标程序运行时, IP的内容由微处理器硬件自动设置,程序不能直接访问 IP,但一些指令却可改变 IP的值,如转移指令、子程序调用指令等。

32位 CPU把指令指针扩展到 32位,并记作 EIP, EIP的低 16位与先前 CPU中的 IP 作用相同。

Page 41: Ch2 80x86计算机组织结构

41

FLAGS为标志寄存器,用于表示程序运行时的状态和一些特殊控制。 存储相关指令的某些执行结果 为 CPU执行相关指令提供行为依据 控制 CPU的相关工作方式

FLAGS和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。

而 FLAGS寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。

Page 42: Ch2 80x86计算机组织结构

42

8086/8088--80286的标志寄存器为 16位, 80386以上的标志寄存器为 32位。

状态标志: 记录程序运行结果的状态信息,许多指令的执行都将相应地设置它。

OF 溢出标志、 SF 符号标志、 ZF 零标志、CF 进位标志、 AF 辅助进位标志、 PF 奇偶标志

控制标志: 可由程序根据需要用指令设置,用于控制处理器执行指令的方式。

DF 方向标志、 I F 中断标志、 TF 陷阱标志

图 2-4 8086/8088 标志寄存器

Page 43: Ch2 80x86计算机组织结构

43

图 2-5 80286 ~ Pentium 的标志寄存器

Page 44: Ch2 80x86计算机组织结构

44

名 称 标志位状态 功 能

进位标志 CF CF=1 ; CYCF=0 ; NC

CF=1 运算结果最高位有进位或有借位(用于多字节加减运算)否则CF=0 。 ( DEBUG 中 CF=1 : CY , CF=0 : NC )

奇偶标志 PF PF=1 ; PEPF=1 ; PO

运算结果的低 8位中所含“ l”的个数为偶数:PF=1 ,否则 PF=0。( DEBUG中 PF=1 : PE, PF=0: PO)

辅助进位标志 AF AF=1 ;AC, AF=0 ; NA

AF=1:运算结果低四位向高四位有进位或有借位(用于 10进制运算指令)否则 AF=0 。 ( DEBUG中 AF=1: AC, AF=0 : NA)

结果为 0标志 ZF ZF=1 ; ZRZF=0 ; NZ

ZF=1运算结果为 0, ZF=0运算结果不为 0;( DEBUG中 ZF=1: ZR, ZF=0: NZ)

符号标志 SF SF=1 ; NGSF=0 ; PL

运算结果为正(符号位为 0) SF=1; 运算结果为负(符号位为1) SF=0 。( DEBUG中 SF=1: NG, SF=0: PL)

溢出标志 OF=1 ; OVOF=0 ; NV

带符号数的运算结果产生溢出时, OF=1 ;否则 OF=0 。( DEBUG 中 OF= 1 : OV , OF=0 : NV )

  方向标志

DF=1 ; DNDF=0 ; UP

串操作指令用的标志, DF=1 执行字符串操作指令时使地址指针自动增量(字符串处理顺序由低向高进行);DF=0 使地址指令自动减量。可通过指令STD置 DF =1, CLD清 DF =0( DEBUG中 DF=1: DN, DF=0: OP)

  中断标志

IF=1 ; EIIF=0 ; DI

可屏蔽中断的标志; IF=1 允许中断(允许 CPU响应可屏蔽外部中断);IF=0禁止中断,关中断;可通过指令 STI置 IF=1, CLI清 IF=0( DEBUG中 IF=1; EI, IF=0; DI)

单步(跟踪)标志TF

TF=1TF=0

CPU 按跟单步踪方式执行指令

表表 2-3 8086/80882-3 8086/8088 标志寄存器状态功能表标志寄存器状态功能表

Page 45: Ch2 80x86计算机组织结构

45

ZF 标志位

flag的第 6位是 ZF,零标志位。 它记录相关指令执行后,

结果为 0 , ZF = 1 结果不为 0, ZF = 0

比如: mov ax,1 sub ax,1 指令执行后,结果为 0,则 ZF = 1。

mov ax,2 sub ax,1 指令执行后,结果为 1,则 ZF = 0。

Page 46: Ch2 80x86计算机组织结构

46

注意: 在 8086CPU的指令集中,有的指令的执行是影响标志寄存器的,比如: add、 sub、mul、 div、inc、 or、 and等,它们大都是运算指令(进行逻辑或算术运算)

有的指令的执行对标志寄存器没有影响,比如:mov、 push、 pop等,它们大都是传送指令。

使用一条指令的时候,要注意这条指令的全部功能,包括,执行结果对标记寄存器的哪些标志位造成影响。

Page 47: Ch2 80x86计算机组织结构

47

PF标志

flag的第 2位是 PF,奇偶标志位。 记录指令执行后,结果的所有二进制位中 1的个数: 为偶数, PF = 1; 为奇数, PF = 0。

Page 48: Ch2 80x86计算机组织结构

48

示例 指令:mov al,1 add al,10 执行后,结果为 00001011B,其中有 3(奇数)个 1,则 PF=0;

指令:mov al,1 or al,10h 执行后,结果为 00000011B,其中有 2(偶数)个 1,则 PF=1;

注意: PF标志仅反映最低 8 “位中 1”的个数是偶或奇,即使是进行 16位字操作。

Page 49: Ch2 80x86计算机组织结构

49

SF标志 flag的第 7位是 SF,符号标志位。记录指令执行后, 结果为负, SF = 1;结果为正, SF = 0。 示例 mov al,10000001B

add al,1

结果: (al)=10000010B

3AH + 7CH=B6H,最高位D7= 1: SF = 1

84H + 7CH=( 1) 00H,最高位D7=0: SF = 0

有符号数据利用最高有效位表示数据的符号。所以,最高有效位就是符号标志的状态。

Page 50: Ch2 80x86计算机组织结构

50

溢出标志溢出标志 OFOF(( Overflow FlagOverflow Flag))

若带符号数的算术运算结果有溢出,则若带符号数的算术运算结果有溢出,则 OF=1OF=1;; 否则 否则 OFOF== 00。。

例如:例如:3AH + 7CH3AH + 7CH== B6HB6H,产生溢出:,产生溢出: OF = 1OF = 1

AAH + 7CHAAH + 7CH=(=( 11)) 26H26H,没有溢出:,没有溢出: OF = 0OF = 0

Page 51: Ch2 80x86计算机组织结构

51

辅助进位标志辅助进位标志 AFAF(( Auxiliary Carry FlagAuxiliary Carry Flag))

运算时运算时 D3D3位(低半字节)有进位或借位位(低半字节)有进位或借位

时,时, AF=1AF=1;否则;否则 AF = 0AF = 0。。 例如:例如:

3AH + 7CH3AH + 7CH== B6HB6H,, D3D3有进位:有进位: AF = 1AF = 1

这个标志主要由处理器内部使用,用于十进制算这个标志主要由处理器内部使用,用于十进制算

术运算指令中,用户一般不必关心术运算指令中,用户一般不必关心。

Page 52: Ch2 80x86计算机组织结构

52

方向标志方向标志 DFDF(( Direction FlagDirection Flag))

用于串操作指令中,控制地址的变化方向:用于串操作指令中,控制地址的变化方向: 设置设置 DFDF== 00,串操作的存储器地址自动增加;,串操作的存储器地址自动增加; 设置设置 DFDF== 11,串操作的存储器地址自动减少。,串操作的存储器地址自动减少。

CLDCLD指令复位方向标志:指令复位方向标志: DFDF== 00 STDSTD指令置位方向标志:指令置位方向标志: DFDF== 11

Page 53: Ch2 80x86计算机组织结构

53

中断允许标志中断允许标志 IFIF(( Interrupt-enable Interrupt-enable FlagFlag))

用于控制外部可屏蔽中断是否可以被处理器响应用于控制外部可屏蔽中断是否可以被处理器响应:: 设置设置 IFIF== 11,则允许中断;,则允许中断; 设置设置 IFIF== 00,则禁止中断。,则禁止中断。

CLICLI指令复位中断标志:指令复位中断标志: IFIF== 00 STISTI指令置位中断标志:指令置位中断标志: IFIF== 11

Page 54: Ch2 80x86计算机组织结构

54

陷阱标志陷阱标志 TFTF(( Trap FlagTrap Flag))

用于控制处理器是否进入单步操作方式:用于控制处理器是否进入单步操作方式: 设置设置 TFTF== 00,处理器正常工作;,处理器正常工作; 设置设置 TFTF== 11,处理器单步执行指令。,处理器单步执行指令。

单步执行指令:处理器在每条指令执行结束时,便产生一单步执行指令:处理器在每条指令执行结束时,便产生一个编号为个编号为 11的内部中断。这种内部中断称为单步中断,所的内部中断。这种内部中断称为单步中断,所以以 TFTF也称为单步标志。也称为单步标志。 利用单步中断可对程序进行逐条指令的调试。利用单步中断可对程序进行逐条指令的调试。 这种逐条指令调试程序的方法就是单步调试。这种逐条指令调试程序的方法就是单步调试。

Page 55: Ch2 80x86计算机组织结构

55

2.2.3 段寄存器

CS、 DS、 SS、 ES、 FS、 GS 在 PC机中存储器是采用分段管理的方法来组织数据,代码和数据分开存放,代码放在代码段中,数据放在数据段中。段寄存器用来确定该段在内存中的起始地址。

段( segment):在内存中所定义的一片存储空间,因此某个存储单元的物理地址需要用段基地址和偏移地址表示。

段的基地址就存放在段寄存器中,一个程序可以由多个段组成。

8086~80286,有 4个段寄存器,即代码段 CS、数据段DS、堆栈段 SS、附加段 ES。在程序执行过程中可以访问 4个当前段。

80386及以上的机器,有 6个段寄存器,增加了 FS、 GS为附加的数据段寄存器。在程序执行过程中可以访问 6个当前段。

Page 56: Ch2 80x86计算机组织结构

56

CPU内部的段寄存器: CS——代码段寄存器 (Code Segment Register),其值为代码段的段值;代码段用来存放程序的指令序列。CS存放代码段的段首址,指令指针寄存器 IP指示代码段中指令的偏移地址。

DS——数据段寄存器 (Data Segment Register),其值为数据段的段值;

ES——附加段寄存器 (Extra Segment Register),其值为附加数据段的段值;

SS——堆栈段寄存器 (Stack Segment Register),其值为堆栈段的段值;

FS——附加段寄存器 (Extra Segment Register),其值为附加数据段的段值;

GS——附加段寄存器 (Extra Segment Register),其值为附加数据段的段值。

Page 57: Ch2 80x86计算机组织结构

57

16位CPU系统中,只有 4个段寄存器,程序在任何时刻至多有 4个正在使用的段可直接访问;在 32位微机系统中,有 6个段寄存器,在此环境下开发的程序最多可同时访问 6 个段。

32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定如下:

实方式: 前 4个段寄存器CS、DS、 ES和 SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地

“ ”址仍为 段值:偏移量 的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。

保护方式: 情况要复杂得多,装入段寄存器的不再是段值,而是称为

“ ”选择子 (Selector)的某个值。段寄存器的具体作用 在此不作进一步介绍了,

Page 58: Ch2 80x86计算机组织结构

58

寄存器与存储器的比较:寄存器与存储器的比较:

寄 存 器 寄 存 器

存 储 器 存 储 器

在在 CPUCPU 内部 在 内部 在 CPUCPU 外部外部

访问速度快访问速度快 访问速度慢 访问速度慢容量小,成本高容量小,成本高 容量大,成本低 容量大,成本低用名字表示用名字表示 用地址表示 用地址表示没有地址没有地址 地址可用各种方式形成 地址可用各种方式形成

Page 59: Ch2 80x86计算机组织结构

59

2.3 内存组织结构

2.3.1 内存的地址与字节、字的存放

2.3.2 堆栈

59

Page 60: Ch2 80x86计算机组织结构

60

2.3.1 内存的地址与字节、字的存放

1.内存的地址 内存单元的基本单位为字节,每个字节都有一个唯一的地址。

字的地址:字是由两个字节组成 例:字 1234H的地址为 00002H,低字节在前(地址为00002H ) 高字节在后(地址为 00003H)

图 2-6 内存单元的地址与内容

Page 61: Ch2 80x86计算机组织结构

61

2.存储单元的内容

一个存储单元存放的信息为存储单元的内容 字节单元内容:地址 00002H的内容为 34H,表示为( 0002H) =34H。

字单元内容:多用偶地址来表示字单元的地址,字的低字节在偶地址上为偶地址,地址 00002H的字单元内容为 1234H,表示为( 00002H) =1234H。如图 2.6所示。

61

Page 62: Ch2 80x86计算机组织结构

62

某单元内容的内容:某单元的内容为要寻找的单元地址,该地址所指的内容为要寻找的内容。

(0004 )=1234H H

(1234 )=H FFEEH

则记:

((0004 ))=H FFEEH ;

两个括号表示内容的内容,即地址 0004H 单元的内容的内容为 FFEEH 。 图 2-7 某单元内容的内容

Page 63: Ch2 80x86计算机组织结构

63

Page 64: Ch2 80x86计算机组织结构

64

Page 65: Ch2 80x86计算机组织结构

6565

双字: 在汇编中允许用双字的情况进行处理(DWORD),用寄存器存放需要 2个 16位寄存器。

通常使用DX和 AX,DX存放高 16位, AX存放低 16位(或CX和DX)。

表示为DX: AX。

Page 66: Ch2 80x86计算机组织结构

66

2.3.2 堆栈

堆栈 (stack)是内存中的一块特定区域,是一个常用的数据结构。

堆栈中的内容按照“先进后出”的原则进行操作。 通常用来暂存数据、子程序 (过程 )调用与返回,

调用中断处理程序与从中断处理程序返回等。 堆栈的位置和大小是由 SS及 SP/ESP寄存器确定的: 堆栈段地址存放于 SS寄存器中,偏移地址放在堆栈指针寄存器中。

堆栈地址长度为 16位时用 SP,长度为 32位时用 ESP。 SP或 ESP永远指向栈顶。 66

Page 67: Ch2 80x86计算机组织结构

67

假如:最初 SS=2000H, SP= 100H 当没有向堆栈中压入任何数据时,栈顶和栈底是指向同一栈空间的,如图 2-7所示。

当向堆栈中压入了一个字 1234H时,首先移动堆栈指针寄存器 SP, SP-2→SP ,此时 SP=0FEH后再将 1234H压入SP所指单元中,如图 2-8所示。

Page 68: Ch2 80x86计算机组织结构

68

如果栈是空的,栈顶与栈底相同 压入堆栈中的内容越多, SP值越小,栈顶离栈底越远。

堆栈的初始化通过设置 SS及 SP/ESP值完成 其设置既可以由编译系统自动完成,也可以在程序中通过伪指令显式地定义。

堆栈的操作: 压入: PUSH 指令

弹出: POP 指令

当用CALL指令调用过程和用RET指令返回过程或用中断指令 INT时都可以用到堆栈。

Page 69: Ch2 80x86计算机组织结构

69

2.4 80x86 CPU 的工作模式

2.4.1 实模式

2.4.2 保护模式

69

Page 70: Ch2 80x86计算机组织结构

70

2.4.1 实模式

微机中常用的 Intel系列微处理器的主要发展过程:8080, 8086/8088, 80186, 80286, 80386, 80486,Pentium, Pentium II, Pentium III, Pentium 4……

8086/8088工作在实模式下 80286工作在实模式或保护模式下 80386可以在 3个模式下工作:

实模式:工作方式相当于一个 8086。 保护模式:提供支持多任务环境的工作方式,建立保护机制。

虚拟 8086模式:可从保护模式切换至 8086工作方式。这种方式的提供使用户可以方便地在保护模式下运行一个或多个原8086程序。

Page 71: Ch2 80x86计算机组织结构

71

80286以上系统的微处理器在加电或复位时都以实模式方式开始工作。

任何一台使用 Intel系列 CPU的 PC机只要一开机, CPU就工作在实模式下。

如果你的机器装的是 DOS,那么在 DOS加载后 CPU仍以实模式工作。

如果你的机器装的是 Windows,那么 Windows加载后,将由 Windows将 CPU切换到保护模式下工作,因为 Windows是多任务系统,它必须在保护模式下运行。

如果在 Windows中运行一个 DOS下的程序,那么Windows将 CPU切换到虚拟 8086模式下运行该程序。或者,点击开始菜单在程序项中进入 MS-DOS方式,这时, Windows也将 CPU切换到虚拟 8086模式下运行。

Page 72: Ch2 80x86计算机组织结构

72

1.内存地址的分段

8086/8088地址总线 20根可访问的地址为:

220 =1,048,576 = 1M

8086/8088内部寄存器都是 16位,可寻址: 216 =64KB

实模式实际上是为 8088/8086 而设计的工作方式,目的是解决在 16 位字长的机器中提供 20 位地址的问题。

实模式存储器地址采用存储空间的分段技术来解决寻址 1M字节的存储空间

段地址与偏移地址组合形成 20 位物理地址的概念。

Page 73: Ch2 80x86计算机组织结构

73

2.分段方法

1MB的存储器中可以有 64K个段,每个段最多 64KB,最小16B。

用 16位段地址与 16位段内地址的迭加形成 20位物理地址

地址的组合:物理地址 =段地址 *16D(或 10H) +偏移地址

即物理地址等于 2进制的 16位段地址乘以 16(左移 4位)加 2进制 16位偏移地址。

为了书写方便,一般采用 16进制表示地址和数据,则物理地址等于 16进制的 4位段地址乘以 10H(左移 1位)加 16进制 4位偏移地址。 如图 2-10所示。

用 16位段寄存器( CS、 DS、 SS、 ES)存放段地址,用 16位指针寄存器( IP、 SP)存放段内地址(偏移地址)。

Page 74: Ch2 80x86计算机组织结构

74

图 2-10 物理地址的组合

Page 75: Ch2 80x86计算机组织结构

75

图 2-11 实模式下的存储器的段结构

Page 76: Ch2 80x86计算机组织结构

76

观察移位次数和各种形式数据的关系:( 1)一个数据的二进制形式左移 1位,相当于该数据乘以 2;( 2)一个数据的二进制形式左移N位,相当于该数据乘以 2的N次方;( 3)地址加法器如何完成段地址 ×16的运算? 以二进制形式存放的段地址左移 4 位。

Page 77: Ch2 80x86计算机组织结构

77

3.物理地址、段地址、段内地址和逻辑地址

物理地址:与内存单元一一对应的 20位 2进制(或 5位16进制)表示的地址

1MB=00000H ~ FFFFFH

每个物理地址代表一个唯一的内存单元。 段地址:将 1MB的内存空间分成长为 64K字节的程序区和数据区为段,每个段用 1个 16位 2进制地址表示。

段地址是存放在段寄存器中

代码段是存放源程序的 2进制程序代码,该段的段地址放在 CS

数据段是存放操作数据的,其段地址放在 DS中

堆栈段是堆栈用的存储区,其段地址放在 SS中

附加段的段地址放在 ES中。

Page 78: Ch2 80x86计算机组织结构

78

段内地址(偏移地址或偏移值): 16位 2进制段内地址为偏移地址。 不同段内的偏移地址是存放在不同的寄存器中,段寄存器与装偏移地址的寄存器是按照一定的要求组合的。

8086~80286允许访问 4个存储段,组合方式如表 2-4所示。

80386以上允许访问 6个存储段,其段寄存器与偏移地址的寄存器的组合方法如表 2-5所示。

Page 79: Ch2 80x86计算机组织结构

79

逻辑地址:用段地址和偏移地址来表示内存单元的地址为逻辑地址 两地址之间用“:”隔开。 常写成: 段地址 : 偏移地址。

例如: 物理地址为 00001H,逻辑地址为 0000H:0001H 段地址为 0000H,段内地址为 0001H。

在汇编语言程序中,存储单元通常不是用其物理地址标识的,而是用其逻辑地址标识的。逻辑地址的段地址由段寄存器给出,偏移量可由寄存器 (SI、 DI、 BP和 BX等 )给出,也可用符号地址或具体的数值给出。至于在指令中如何指出存储单元的逻辑地址将在第 3 “ ”章 寻址方式 中给

出详细说明。

Page 80: Ch2 80x86计算机组织结构

80

4.逻辑地址与物理地址的换算关系

逻辑地址是段地址和偏移地址的组合表示,物理地址是段地址和偏移地址的迭加表示。

物理地址 =段地址 *16D(或 10H) +偏移地址 逻辑地址 =段地址 :偏移地址 演示:

8086CPU给出物理地址的方法 8086CPU访问地址为 123C8H的内存单元

Page 81: Ch2 80x86计算机组织结构

81

Page 82: Ch2 80x86计算机组织结构

82

Page 83: Ch2 80x86计算机组织结构

83

【例 2-7】设逻辑地址为 1111H: 2222H,则物理地址为: 1111H×10H+2222H=13332H

表示:当逻辑地址为 1111H: 2222H时, 物理地址为 13332H

假设段地址 1111H为代码段地址,则 1111H存放在代码段寄存器 CS中,偏移地址 2222H就放在指针寄存器 IP中。如图 2-12所示。

图图 2-122-12

Page 84: Ch2 80x86计算机组织结构

84

【例 2-8】 167B6H为物理地址,其逻辑地址为多种组合:

1000H: 67B6H

1001H: 67A6H

1002H: 6796H

┇ 1365H: 3166H

1366H: 3156H

┇ 167BH: 0006H

段地址加 1,偏移地址就减10H( 16)个字节,则每种组合的物理地址均为 167B6H。

Page 85: Ch2 80x86计算机组织结构

85

5、内存分配方法

以节为最小单位分配内存区域 16个字节为一个节 节的边界地址就是能够被 16整除的地址,因此, 20位 2进制的物理地址的最后 4位为 0

每个段的首地址为: seg:0000H

Page 86: Ch2 80x86计算机组织结构

86

[ 例如 ] 某一程序的长度为 1020个字节,操作数占 510个字节,堆栈段大约用 250个字节,在定义时将代码段长度定为 1024D=400H,数据段长度 512D=200H,堆栈段长度 256D=100H ,系统以节的边界对齐。假设系统给程序分配的内存区从 6100H开始。

代码段: 6100 H×10H+0000H

+0001H 400H个字节( 1024个字节) ┇ +03FFH 

数据段: 6140H*10H+0000H

+0001H ┇ 200 H个字节( 512个字节) +01FFH 

堆栈段: 6160H*10H+0000H

+0001H ┇ 100H个字节( 256个字节) 00FFH

Page 87: Ch2 80x86计算机组织结构

87图 2-13 内存分配方法 87

Page 88: Ch2 80x86计算机组织结构

88

6.段与段之间的关系 8088/8086 CPU 是把 1M的存储空间划分成若干个逻辑段,每个段的起始地址必须是能够被 16整除的数,逻辑段的最大长度为64K。

1M字节的存储空间最多可以分成 64K个逻辑段,段与段之间可以相邻,分离,重叠,部分重叠。

这种分段方法便于数据与代码之间的隔离,段与段的互访和共享内存,带来了灵活性。

段与段之间的关系如图 2-14所示。

图 2-14 段与段之间的关系

Page 89: Ch2 80x86计算机组织结构

89

注意: 对于段的概念,错误认识:

内存被划分成了一个一个的段,每一个段有一个段地址。

其实: 内存并没有分段,段的划分来自于CPU,由于

8086CPU “用 (段地址×16) + 偏移地址 = 物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

Page 90: Ch2 80x86计算机组织结构

90

可以认为:地址 10000H~100FFH的内存单元组成 一个段,该段的起始地址( 基础地址)为 10000H,

段地址为 1000H,大小为 100H。 也可以认为地址

10000H~1007FH、 10080H~100FFH 的内存单 元组成两个段,它们的起始地址( 基础地址 )为

10000H和 10080H,段地址为: 1000H 和1008H,大小都为 80H。

Page 91: Ch2 80x86计算机组织结构

91

练习:存储器的逻辑地址与物理地址

10011111 00100110

01001000

逻辑地逻辑地址址

段地址 段地址 : : 偏移地偏移地址址 1000 : 0000H 1000 : 0001H

1000 : 0002H

1000 : 0003H

1000 : 0004H1000 : 0005H

物理地址物理地址

10000H

10001H10002H10003H 10004H10005H

10000011

01011100 10100010

字节内容( 10000H)= 9FH;( 10001H)= 26H

字内容 ( 10000H)= 269FH;( 10001H)=4826H访问两次内存

Page 92: Ch2 80x86计算机组织结构

92

段寄存器的引用段寄存器的引用

段和段寄存器的引用示意图

Page 93: Ch2 80x86计算机组织结构

93

段寄存器CS指向存放程序的内存段, IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。

段寄存器 SS指向用于堆栈的内存段, SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。当偏移量用到了指针寄存器BP,其缺省的段寄存器也是 SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶。

段寄存器DS指向数据段, ES指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到存储单元的物理地址。该偏移量可以是具体数值、符号地址和指针寄存

器的值等之一,具体情况将由指令的寻址方式来决定。

Page 94: Ch2 80x86计算机组织结构

94

通常,缺省的数据段寄存器是DS,只有一个例外,即在进行串操作时,其目的地址的段寄存器规定为 ES。

当然,在一般指令中,还可以用强置前缀的方法来改变操作数的段寄存器(见:第 3章中的强置前缀的书写格式)

Page 95: Ch2 80x86计算机组织结构

95

一般情况下,段寄存器及其指针寄存器的引用关系如下“表所示。表中的 ”可选用的段寄存器 即是可以用强置说明这”可选用的段寄存器 即是可以用强置说明这

些段寄存器的值来作为其操作数地址的段地址些段寄存器的值来作为其操作数地址的段地址。

访问存储器方式 缺省的段寄存器

可选用的段寄存器 偏移量

取指令取指令 CS   IP

堆栈操作堆栈操作 SS   SP

一般取操作数一般取操作数 DSCS、 ES、

SS有效地址

串操作

源操作数 DSCS、 ES、

SSSI

目标操作数 ES   DI

使用指针寄存器使用指针寄存器 BPBP SSSS CSCS 、、 DSDS 、、ESES 有效地址有效地址

Page 96: Ch2 80x86计算机组织结构

96

由上表可以看出 16位CPU在段寄存器的引用方面有如下规定: 取指令所用的段寄存器和偏移量一定是用CS和 IP; 堆栈操作所用的段寄存器和偏移量一定是 SS和 SP; 串操作的目标操作数所用的段寄存器和偏移量一定是

ES和DI; 其它情况,段寄存器除了其默认引用的寄存器外,还可以强行改变为其它段寄存器。

对于上述规定,随着后续内容的叙述,将会对它们有更进一步理解。

Page 97: Ch2 80x86计算机组织结构

97

2.4.2 保护模式

实模式下最大寻址空间: 1MB

80286及其后机器采用保护模式的存储寻址的原因

80286及其后机器提供了 16MB、 4GB以及更多的存储空间,那么如何寻址呢?

解决了多任务处理的问题,同时支持虚拟存储器特性(程序运行时,只需把需要执行的代码从外存调入内存即可)。

Page 98: Ch2 80x86计算机组织结构

98

1. 保护模式存储器寻址机制 逻辑地址由选择符和偏移地址( 32位、 4GB)两部分组成

选择符放在段寄存器中,它不直接表示段基地址,而由操作系统管理计算段基地址,再和偏移地址相加,求得所选存储单元的地址。

存储器不必分段就可以访问到所有内存地址。 偏移地址最大可以为 32位 最大段长扩大到 4GB 用户设计程序时,和 8086实模式存储寻址一样,只需要设置段寄存器的内容即可。

Page 99: Ch2 80x86计算机组织结构

99

2. 描述符 描述符描述段在存储器中的位置、段的长度和访问权限。

由基地址、段界限、访问权限、附加字段四部分组成。

描述符的内容由系统自动设置,不由用户建立。

Page 100: Ch2 80x86计算机组织结构

100

2.5 存储器管理机制

2.5.1 分段管理机制 2.5.2 分页管理机制

Page 101: Ch2 80x86计算机组织结构

101

习题 - 选择题

1. 在下列寄存器中,不能用作间接寻址的寄存器是( ) A. BX B. BP C. SI D.

SP

2. 可以为存储器操作数提供偏移地址的寄存器组是( ) A. AX、BX、CX、DX B.

BX、BP、 IP、 SP

C. BX、BP、 SI、DI D. CS、DS、 ES、 SS

3. 存放当前正在执行指令的下一条指令的偏移地址的寄存 器是( )

A. SP、 ESP B. IP、 EIP C. CS D. BP、 EBP

4. 指向程序堆栈区的段寄存器是( ) A. CS B. DS C. SS

D. ES

Page 102: Ch2 80x86计算机组织结构

102

5. 存放当前堆栈段栈顶的偏移地址的寄存器是( ) A. BP B. SP C. IP

D. SS

6. 指向程序代码段的段寄存器是( ) A. CS B. DS C. SS

D. FS

7. 已知内存中两个字节单元的内容:( 20000H) =10H,( 20001H) =20H,则从字单元 20000H 中取出的一个字为( )

A. 10H B. 20H C. 1020H D. 2010H

8. 设DS=7231H,某数据存储单元的偏移地址为3060H ,则该单元的物理地址为( )

A. 0A291H B. 75370H C. 72310H D. 03060H

Page 103: Ch2 80x86计算机组织结构

103

– 习题 问答题

已知 2个数据 4321H 和 0DBCAH,它们相加后的结果是多少?标志位CF、 ZF、 SF的值个是多少? 11FDBH,CF=1、 ZF=0、 SF=0

已知内存中的一段区域如下图所示,请读出字节单元10002H的内容、字单元 10000H的内容和双字单元 10001H的内容。

[10002H]=50H , [10000H]=7090H , [10001H]=1030 5070H

Page 104: Ch2 80x86计算机组织结构

104

已知 SS=1000H, SP=0100H,现要求将数据 5080H、 6172H压入堆栈,然后将栈顶单元的内容弹出堆栈,画出每部操作的堆栈示意图。

Page 105: Ch2 80x86计算机组织结构

105