64
安安安安安安 安安安安安安安安安 安安安 安安安安安 《》 安2安 80x86 安安安安 安安安安1. 安安 安安安安安 安安安安安安安安安 安安 安安安安 安安 安安安安 安安安安安安安 安安安 安安安安安 安安 CPU 安 安安安安安安安安安 安安安安安安安安安2. 安安安安安安安 安安安安安安 3. 安安 CPU 安安安安安

第 2 章 80x86 计算机组织

Embed Size (px)

DESCRIPTION

第 2 章 80x86 计算机组织. 教学要求: 1. 掌握 存储器地址 的概念和 分段 概念;掌握 物理地址 和 逻辑地址 之间的转换;掌握 CPU 中 寄存器的分类和作用 。 2. 理解计算机系统的组织结构。 3. 了解 CPU 的内部组织。. 2.1 80x86 微处理器. 奔腾 4 代. 奔腾 3 代. 奔腾 2 代. 奔腾. 80486. 80386. 80286. 8086. 4004. 2.2 计算机系统. 硬件: 三个主要组成部分 ,用系统总线连接。. 内存储器. 大容量 存储器. 中央处理机 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

第 2 章 80x86 计算机组织

教学要求:

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

2. 理解计算机系统的组织结构。

3. 了解 CPU 的内部组织。

Page 2: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2.1 80x862.1 80x86 微处理器微处理器

80386

80486

奔腾奔腾 2 代

奔腾 4 代

80286

8086

奔腾 3 代

4004

Page 3: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

型号型号 字字长长 主频主频 MHzMHz 数据总数据总

线宽度线宽度外部数据外部数据总线总线

地址总地址总线宽度线宽度

寻址寻址空间空间 cachecache

80868086 1616 4.774.77 1616 1616 2020 1M1M 无无

80888088 1616 4.774.77 1616 88 2020 1M1M 无无

8028680286 1616 6~206~20 1616 1616 2424 16M16M 无无

8038680386 323212.5~312.5~333

3232 3232 3232 4G4G 有有 (( 很少很少 ))

8048680486 3232 25~10025~100 3232 3232 3232 4G4G 8KB8KB

P5P5 3232 60~16660~166 6464 6464 3232 4G4G 16KB16KB

P6(PRP6(PRO)O)

3232150~20150~2000

6464 6464 3636 64G64G16KB16KB256K(256K( 二二级级 ))

PⅡPⅡ 3232233~33233~3333

6464 6464 3636 64G64G32KB32KB512K(512K( 二级二级

Page 4: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2.2 计算机系统

硬件:三个主要组成部分,用系统总线连接。

中央处理机中央处理机

CPUCPU

总线控制

逻辑

接 口

接 口

内存储器内存储器

大容量

存储器

I/O 设备

I/OI/O 子系统子系统

系统总

线...

.

.

.

Page 5: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

系统软件系统软件核心为操作系统,包括:I/O 驱动程序、文件管理程序、文本编辑程序等。应用程序是建立在操作系统之上的,我们采用 DOS ( MS-DOS 6.22 或 Windows 9.x 的 MS-DOS

环境),开发汇编语言程序涉及到 文本编辑器 汇编程序 连接程序 调试程序

应用软件应用软件微机中的应用软件丰富多彩 .

软件:系统软件 应用软件系统软件 应用软件

Page 6: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2.3 中央处理机

2.3.1 CPU2.3.1 CPU 组成组成 它包括算术逻辑部件算术逻辑部件 ALUALU 、控制器、寄存器、控制器、寄存器

ALUALU ::是运算器的核心部件,执行算术运算、逻辑运算、移位、比较等各种数据处理的操作。

控制逻辑:控制逻辑:处理程序指令,并协调各逻辑部件按一定时序工作。包括:从存储器中读取程序指令、指令译码、从存储器中取得操作数,执行指令,把结果存入存储器,以及对总线和 I/O

的传送控制等。

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

Page 7: 第 2 章         80x86 计算机组织

AH AL

BH BL

CH CL

DH DL

SP

BP

DI

SI

通用寄存器

运算寄存器

ALU

标志

执行部分控制电路

1 2 3 4 5 6

CSDS SS ES IP

内部寄存器

I/O控制电路

地址加法器

20 位

16 位

8 位 指令队列缓冲器

外总线

执行部件 总线接口部件

8086CPU 结构图

Page 8: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言 ( 如: C/C++ 语言 ) 中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

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

由于 16 位 /32 位 CPU 是微机 CPU 的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。

Page 9: 第 2 章         80x86 计算机组织

2.3.2 80x862.3.2 80x86 寄存器组寄存器组

80x8680x86 的程序可见寄存器的程序可见寄存器组组

通用寄存器专用寄存器 段寄存器

AH AX AL BH BX BL CH CX CL DH DX DL SP BP SI DI IP FLAGS

CS DS SS ES

8086 /8086 /

8088 /8088 /

8028680286

寄寄

存存

器器

EAXEAXEBXEBXECXECXEDXEDXESPESPEBPEBPESIESIEDIEDI

EIPEIP EFLAGSEFLAGS

FSFSGSGS

31 16 15 8 7 031 16 15 8 7 0

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 10: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

16 位寄存器组

16 位 CPU 所含有的寄存器有

4 个数据寄存器 (AX 、 BX 、CX 和 DX)

2 个 变 址 和 指 针寄存器 (SI 和 DI)

2 个指针寄存器 (SP和 BP)

4 个段寄存器 (ES 、 CS 、SS 和 DS)

1 个 指 令 指 针 寄存器 (IP)

1 个标志寄存器 (Flags)

Page 11: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

32 位寄存器组32 位 CPU除了包含了先前 CPU 的所有寄存器,并把通用寄存器、指令指针和标志寄存器从 16 位扩充成 32 位之外,还增加了 2 个16 位的段寄存器: FS 和 GS 。

Page 12: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》表 2.1 通用寄存器的主要用途

Page 13: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 14: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

(( 11 )数据寄存器)数据寄存器数据寄存器共有数据寄存器共有 44 个寄存器个寄存器 AXAX 、、 BXBX 、、 CXCX 、、 DXDX ,,用来保存操作数或运算结果等信息。 AX(Accumulator)(Accumulator) 寄存器称为累加器累加器。使用频度最高,用于算用于算术、逻辑运算以及与外设传送信息等。术、逻辑运算以及与外设传送信息等。 BX(Base Register)(Base Register) 寄存器称为基址寄存器基址寄存器。常用于存放存储器常用于存放存储器地址。地址。 CX(Count Register)(Count Register) 寄存器称为计数器计数器。一般作为循环或串操作循环或串操作等指令中的隐含计数器。等指令中的隐含计数器。在位操作中,当移多位时,要用在位操作中,当移多位时,要用 CLCL 来来指明移位的位数; 指明移位的位数; DX(Data Register)(Data Register) 寄存器称为数据寄存器数据寄存器。常用来存放常用来存放双字数双字数据的高据的高 1616 位位,在进行,在进行乘、除乘、除运算时,它可作为默认的操作数参与运算时,它可作为默认的操作数参与运算运算 ,,亦可亦可存放外设端口地址存放外设端口地址。

2.3.2.1 通用寄存器组

Page 15: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

Page 16: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

( 2 ) 变址寄存器

寄存器寄存器 ESIESI 、、 EDIEDI 、、 SISI 和和 DIDI 称为变址寄存器称为变址寄存器 (Index Registe(Index Register)r) ,主要,主要用于存放某个存储单元的偏移地址用于存放某个存储单元的偏移地址。。

SI 是源变址寄存器源变址寄存器, DI 是目的变址寄存器目的变址寄存器,在字符串操作中,SI 和 DI 都具有自动增量或减量的功能具有自动增量或减量的功能。它们主要用于存放存储单元段内的偏移量,用它们可实现多种存储器操作数的寻址方式( 在第 3 章有详细介绍 ) ,为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成变址寄存器不可分割成 88 位寄存器。作为通用寄存器,也可位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 存储算术逻辑运算的操作数和运算结果。

Page 17: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

( 33 )指针寄存器)指针寄存器

寄存器寄存器 EBPEBP、、 ESPESP、、 BPBP和和 SPSP 称为指针寄存器称为指针寄存器 (Pointer R(Pointer Register)egister) ,,主要用于存放堆栈内存储单元的偏移量主要用于存放堆栈内存储单元的偏移量,用它们可,用它们可实现多种存储器操作数的寻址方式实现多种存储器操作数的寻址方式 (( 在第在第 33 章有详细介绍章有详细介绍 )) ,为,为以不同的地址形式访问存储单元提供方便。以不同的地址形式访问存储单元提供方便。

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

SP(Stack Pointer)(Stack Pointer) 为堆栈指针寄存器堆栈指针寄存器,用于存放当前堆栈段中栈顶的偏移地址; BP (Base Pointer)(Base Pointer) 为基址指针寄存器基址指针寄存器,用于存放堆栈段中某一存储单元的偏移地址。

Page 18: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

( 1 )指令指针寄存器指令指针寄存器 IP( Instruction Pointer )( Instruction Pointer )

指令指针寄存器: 8086CPU 中的指令指针 IP ,它总是保保存下一次将要从主存中取出指令的偏移地址,偏移地址的值存下一次将要从主存中取出指令的偏移地址,偏移地址的值为该指令到所在段段首址的字节距离。为该指令到所在段段首址的字节距离。在目标程序运行时, II

PP 的内容由微处理器硬件自动设置,程序不能直接访问的内容由微处理器硬件自动设置,程序不能直接访问 IPIP ,,但一些指令却可改变但一些指令却可改变 IPIP 的值的值,如转移指令、子程序调用指令等。 32 位 CPU 把指令指针扩展到 32 位,并记作 EIP , EI

P 的低 16 位与先前 CPU 中的 IP 作用相同。

2.3.2.2 专用寄存器: IP 、 SP 、 FLAGS

( 2 )堆栈指针寄存器堆栈指针寄存器 SP用于存放当前堆栈段中栈顶的偏移地址存放当前堆栈段中栈顶的偏移地址

Page 19: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

( 3 )标志寄存器 ( FLAGS / PSW )

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

状态标志状态标志: 控制标志控制标志:OFOF 溢出标志 DFDF 方向标志 SFSF 符号标志 I FI F 中断标志ZFZF 零标志 TFTF 陷阱标志CFCF 进位标志AFAF 辅助进位标志PFPF 奇偶标志

OF DF IF TF SF ZF AF PF CF

注:指令的执行与标志有很大关系。状态标志状态标志 用来记录程序运行结果的状态信息记录程序运行结果的状态信息,许多指令的执行都将相应地设置它。控制标志控制标志 可由程序根据需要用指令设置,用于控制处理器执根据需要用指令设置,用于控制处理器执行指令的方式行指令的方式。

Page 20: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

零标志零标志 ZFZF(( Zero FlaZero Flagg))

若运算结果为若运算结果为 00,则,则 ZF = 1ZF = 1 ,否则,否则 ZF = 0ZF = 0。。

例如:例如:

3AH + 7CH3AH + 7CH== B6HB6H ,结果不是零:,结果不是零: ZF = 0ZF = 0

86H + 7CH86H + 7CH=(=( 11 )) 00H00H ,结果是零:,结果是零: ZF = 1ZF = 1

注意:注意: ZFZF为为 11表示的结果是表示的结果是 00

Page 21: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

符号标志符号标志 SFSF(( Sign FlagSign Flag)) 运算结果最高位为运算结果最高位为 11 ,则,则 SF = 1SF = 1 ;否则;否则 SF = 0SF = 0。。

例如:例如:

3AH + 7CH3AH + 7CH== B6HB6H ,最高位,最高位 D7D7 == 11 :: SF = 1SF = 1

86H + 7CH86H + 7CH=(=( 11 )) 00H00H ,最高位,最高位 D7D7 == 00:: SF = 0SF = 0

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

Page 22: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

奇偶标志奇偶标志 PFPF(( Parity FlaParity Flagg))

当运算结果最低字节中“当运算结果最低字节中“ 1”1”的个数为零或偶数时,的个数为零或偶数时,PF = 1PF = 1 ;否则;否则 PF = 0PF = 0。。

例如:例如:

3AH + 7CH3AH + 7CH== B6HB6H== 10110110B10110110B ,,

结果中有结果中有 55 个个 11 ,是奇数:,是奇数: PF = 0PF = 0

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

Page 23: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

溢出标志溢出标志 OFOF(( Overflow FlaOverflow Flagg)) 若算术运算的结果有溢出,则若算术运算的结果有溢出,则 OF=1OF=1 ;否则 ;否则 OOFF == 00。例如:。例如:

3AH + 7CH3AH + 7CH== B6HB6H ,产生溢出:,产生溢出: OF = 1OF = 1AAH + 7CHAAH + 7CH=(=( 11 )) 26H26H ,没有溢出:,没有溢出: OF = 0OF = 0

Page 24: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

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

AF = 1AF = 1 ;否则;否则 AF = 0AF = 0。。

例如:例如:3AH + 7CH3AH + 7CH== B6HB6H ,, D3D3 有进位:有进位: AF = 1AF = 1这个标志这个标志主要由处理器内部使用主要由处理器内部使用,用于,用于十进制算十进制算

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

Page 25: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

方向标志方向标志 DFDF(( Direction FlaDirection Flagg)) 用于串操作指令中,控制地址的变化方向:用于串操作指令中,控制地址的变化方向:设置设置 DFDF == 00,串操作的存储器地址自动增加;,串操作的存储器地址自动增加;设置设置 DFDF == 11 ,串操作的存储器地址自动减少。,串操作的存储器地址自动减少。 CLDCLD指令复位方向标志:指令复位方向标志: DFDF == 00 STDSTD指令置位方向标志:指令置位方向标志: DFDF == 11

Page 26: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

中断允许标志中断允许标志 IFIF(( Interrupt-enable FlaInterrupt-enable Flagg)) 用于控制外部可屏蔽中断是否可以被处理器响用于控制外部可屏蔽中断是否可以被处理器响

应:应:设置设置 IFIF == 11 ,则允许中断;,则允许中断;设置设置 IFIF == 00,则禁止中断。,则禁止中断。 CLICLI指令复位中断标志:指令复位中断标志: IFIF == 00 STISTI指令置位中断标志:指令置位中断标志: IFIF == 11

Page 27: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

陷阱标志陷阱标志 TFTF(( Trap FlaTrap Flagg)) 用于控制处理器是否进入单步操作方式:用于控制处理器是否进入单步操作方式:设置设置 TFTF == 00,处理器正常工作;,处理器正常工作;设置设置 TFTF == 11 ,处理器单步执行指令。,处理器单步执行指令。单步执行指令——处理器在每条指令执行结束时,便产生单步执行指令——处理器在每条指令执行结束时,便产生

一个编号为一个编号为 11 的内部中断。这种内部中断称为单步中断,的内部中断。这种内部中断称为单步中断,所以所以 TFTF也称为单步标志。也称为单步标志。 利用单步中断可对程序进行逐条指令的调试。利用单步中断可对程序进行逐条指令的调试。 这种逐条指令调试程序的方法就是单步调试。这种逐条指令调试程序的方法就是单步调试。

Page 28: 第 2 章         80x86 计算机组织

OF DF IF TF SF ZF AF PF CF

8086/8088

OF DF IF TF SF ZF AF PF CF IOPLNT

80286

RF OF DF IF TF SF ZF AF PF CF IOPLNTVM

80386

RF OF DF IF TF SF ZF AF PF CF IOPLNTVMAC

80486

RF OF DF IF TF SF ZF AF PF CF IOPLNTVMACID VIP VIF

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Pentium

80x86 的标志寄存器

(P.23)

IOPL : I/O 特权级 VIP :虚拟中断未决标志 NT : 嵌套任务标志 VIF :虚拟中断标志 RF : 重新启动标志 VM :虚拟 80

86 模式位 AC : 对准检查方式位 ID : 标识标志

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 29: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2.3.2.3 2.3.2.3 段寄存器段寄存器

段寄存器段寄存器: 8086CPU 的4个 16 位的段寄存器分别称为

代码段寄存器代码段寄存器 CSCS ,数据段寄存器,数据段寄存器 DSDS ,堆栈段寄,堆栈段寄存器存器 SSSS ,附加数据段寄存器,附加数据段寄存器 ESES 。。段寄存器用来确确定该段在内存中的起始地址定该段在内存中的起始地址。段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。

Page 30: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

CPUCPU内部的段寄存器内部的段寄存器::

CS——CS—— 代码段寄存器代码段寄存器 (Code Segment Register)(Code Segment Register) ,,其值为代码段的段值其值为代码段的段值;;代码段用来存放程序的指令序列。代码段用来存放程序的指令序列。 CSCS 存放代码段的段首址,指存放代码段的段首址,指令指针寄存器令指针寄存器 IPIP 指示代码段中指令的偏移地址。指示代码段中指令的偏移地址。DS——DS—— 数据段寄存器数据段寄存器 (Data Segment Register)(Data Segment Register) ,,其值为数据段的段值;其值为数据段的段值;

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

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

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

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

Page 31: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

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

实方式:前 4个段寄存器 CS、 DS、 ES和 SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为“段值:偏移量段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。

保护方式:在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子” (Selector) 的某个值。段寄存器的具体作用在此不作进一步介绍了,有兴趣的读者可参阅其它科技资料。

Page 32: 第 2 章         80x86 计算机组织

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

寄 存 器 存 储 器寄 存 器 存 储 器

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

访问速度快访问速度快 访问速度慢 访问速度慢

容量小,成本高容量小,成本高 容量大,成本低 容量大,成本低

用名字表示用名字表示 用地址表示 用地址表示

没有地址没有地址 地址可用各种方式形成 地址可用各种方式形成

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 33: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2.4 存储器2.4.1 存储单元的地址和内容• 存储单元地址存储单元地址 : 8086 系统中,为了标识和存取每一个存储单元,给每个存储单元规定一个编号,这就是存储单元地址。 • 存储单元的内容存储单元的内容 :一个存储单元中存放的信息称为该存储单元的内容。• 注意: 注意: 存储器存储器以字节(以字节( 8 bit8 bit )为编程单位)为编程单位 每个字节单元都有每个字节单元都有唯一的地址唯一的地址编码编码 地址用无符号整数地址用无符号整数来表示(编程用来表示(编程用十六进制十六进制表示)表示) 一个字一个字要要占占用用相继相继的的两个字节两个字节 低位字节存入低地址,高位字节存入高地址低位字节存入低地址,高位字节存入高地址 字单元地址字单元地址用它的用它的低地址来表示低地址来表示 机器以机器以偶地址访问偶地址访问(读 (读 / / 写)写)存储器存储器

Page 34: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 35: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 36: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

二进制位二进制位:存储:存储一位一位二进制数:二进制数: 00或或 11 。。字节字节:: 88个二进制位,个二进制位, D7D7 ~~ D0D0。。字字:: 1616 位,位, 22 个字节,个字节, D15D15~~ D0D0。。双字双字:: 3232 位,位, 44个字节,个字节, D31D31~~ D0D0。。最低有效位最低有效位 LSBLSB (( Least Significant BitLeast Significant Bit):指):指

数据的最低位,即数据的最低位,即 DD00位;位;最高有效位最高有效位 MSBMSB (( Most Significant BitMost Significant Bit):指):指

数据的最高位,对应字节、字、双字分别指数据的最高位,对应字节、字、双字分别指 DD77、、 DD1515 、、DD3131 位。位。

Page 37: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

7 6 5 4 3 2 1 07 6 5 4 3 2 1 0

1 0 0 1 1 1 1 1 00000000H (0000H)=9FHH (0000H)=9FH0 0 1 0 0 1 1 0 0001H (0001H)=26H0001H (0001H)=26H0 0 0 1 1 1 1 0 00020002H (0002H)=1EHH (0002H)=1EH1 1 0 1 0 1 1 1 00030003H (0003H)=D7HH (0003H)=D7H

存储器存储器

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 015 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0字字

高位字节 低位字节高位字节 低位字节

1 0 0 1 1 1 1 10 0 1 0 0 1 1 0

(0000H)=269FH(0000H)=269FH(0002H)=D71EH(0002H)=D71EH(0001H)=1E26H(0001H)=1E26H 访问两次存储器访问两次存储器

字节字节

Page 38: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

存储单元中所存放的二进制信息通常称为该存储单元的内容或值,并且规定: 一个字节的内容是该字节单元内存放的二进制信息; 一个字的内容是该字地址所指向的单元及其后继一个单元的内容拼接而成; 一个双字的内容是该字地址所指向的单元及其后继三个单元的内容拼接而成。

在拼接“字内容”时,我们按“在拼接“字内容”时,我们按“高高高高低低低低”的原则来处理,即:高存储单元”的原则来处理,即:高存储单元(( 地址大的存储单元地址大的存储单元 )) 的值是“字内容”的值是“字内容”的高的高 88位,低存储单元位,低存储单元 (( 地址小的存储单地址小的存储单元元 )) 的值是“字内容”的低的值是“字内容”的低 88位。在拼接位。在拼接“双字内容”时也是如此。“双字内容”时也是如此。

Page 39: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

字节 字节 12340H 、 1234112341H 的内容分别为: 12H 和 3434H 等;

字 字 12340H 、 1234112341H 的内容分别为: 3412H 和 5634H 等;

双字 双字 12340H 、 1234112341H 的内容分别为: 78563412H 和 9078590785634634H 等。

内存单元存放内容示意图

Page 40: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2.4.2 2.4.2 实模式存储器寻址实模式存储器寻址

实模式实模式实际上是为实际上是为 80888088 // 80868086 而设计的工而设计的工作方式,目的是作方式,目的是解决在解决在 1616 位字长的机器中如何位字长的机器中如何提供提供 2020 位地址的问题位地址的问题。。 8028680286 及其后微处理器及其后微处理器除可在实模式下工作外,还可在保护模式下工作除可在实模式下工作外,还可在保护模式下工作。。 下面,我们将首先介绍一下实模式下的存储下面,我们将首先介绍一下实模式下的存储器寻址方法 —— 存储器地址的分段。器寻址方法 —— 存储器地址的分段。

Page 41: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

11 、存储器的分段、存储器的分段 “ ”我们知道:计算机的内存单元是以 字节 为最小单位进行线性编址的。为了标识每个存储单元,就给每个存储单元规定为了标识每个存储单元,就给每个存储单元规定一个编号,此编号就是该存储单元的物理地址。一个编号,此编号就是该存储单元的物理地址。

存储单元的物理地址是一个无符号的二进制数。但为了书存储单元的物理地址是一个无符号的二进制数。但为了书写的简化,物理地址通常用十六进制来表示。写的简化,物理地址通常用十六进制来表示。

16 位 CPU 内部有 20根地址线,其编码区间为: 00000H~0FFFFFH ,所以,它可直接访问的物理空间为 1M(220) 字节。而 16 位 CPU 内部存放存储单元偏移量的寄存器(如: IP 、 SP 、 BP 、 SI 、 DI 和 BX 等)都是 16 位,它们的编码范围仅为: 00000H~0FFFFH 。这样,如果用如果用 1616 位寄存器来访问内存位寄存器来访问内存的话,则只能访问内存的最低端的的话,则只能访问内存的最低端的 64K64K ,,其它的内存将无法访其它的内存将无法访问问。。为了能用 16 位寄存器来有效地访问 1M 的存储空间, 16位 CPU 采用了内存分段的管理模式,并引用段寄存器段寄存器的概念。

Page 42: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

1616 位微机把内存空间划分成若位微机把内存空间划分成若干个逻辑段干个逻辑段,每个逻辑段的要求如下:,每个逻辑段的要求如下:逻辑段的起始地址逻辑段的起始地址 (( 通常简称为:段通常简称为:段地址地址 ))必须是必须是 1616 的倍数,的倍数,即即最低最低 44位二进制必须全为位二进制必须全为 00 ;;

逻辑段的最大容量为逻辑段的最大容量为 64K64K ,这由,这由1616 位寄存器的寻址空间所决定。位寄存器的寻址空间所决定。

按上述规定,按上述规定, 1M1M 内存最多可分内存最多可分成成 64K64K 个段,即个段,即 6553665536 个段个段 (( 段之段之间相互重叠间相互重叠 )) ,,至少可分成至少可分成 1616 个相个相互不重叠的段。互不重叠的段。

图图为为内存各逻辑段之间的分布情内存各逻辑段之间的分布情况示意图,况示意图,其中有相连的段其中有相连的段 (( 如:如: CC和和 DD 段段 )) 、、不相连的段不相连的段 (( 如:如: AA 和和 BB段段 )) 以及以及相互重叠的段相互重叠的段 (( 如:如: BB 和和 CC段段 )) 。。

1616 位微机内存分段管理示意图位微机内存分段管理示意图

Page 43: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

(( 11 )存储器地址的分)存储器地址的分段段

20 20 根地址线根地址线: 地址范围 0000000000H ~ FFFFFFFFFFH ( 1MB1MB )机器字长字长 1616 位位:仅能表示地址范围 00000000H ~ FFFFFFFFH ( 64K64K

BB)

小段:每小段:每 1616 个字节为一小段,共有个字节为一小段,共有 64K64K 个小段个小段 小段的首地址 0000000000 H ~ 0000F H

0001000010 H ~ 0001F H

0002000020 H ~ 0002F H

FFFF0FFFF0 H ~ FFFFF H

段起始地址:小段首地址段起始地址:小段首地址 段的大小: 段的大小: 64K 64K 范围内的任意字节范围内的任意字节

Page 44: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

物理地址的形成方式 由于规定段地址必须是段地址必须是 1616 的倍数的倍数,所以,其值的一般形式为: XXXX0XXXX0H ,即:前前 1616 位二进制位是变化的,位二进制位是变化的,后四位是固定为后四位是固定为 00。鉴于段地址的这种特性,我们可以仅仅保存其前保存其前 1616 位二进制来达到保存整个段地址,其后四位位二进制来达到保存整个段地址,其后四位可通过“左移补可通过“左移补 0”0”来获得。来获得。 在确定了某个存储单元所属的内存段后,我们也只知道其所处内存位置的范围所处内存位置的范围,还不能确定其具体位置不能确定其具体位置。要想确定内存单元的具体位置,还必须知道该单元离该段地址必须知道该单元离该段地址有多远有多远。我们通常把存储单元的实际地址与其所在段的段我们通常把存储单元的实际地址与其所在段的段地址之间的距离称为地址之间的距离称为段内偏移段内偏移,也可称为,也可称为有效地址有效地址 (EA—(EA—Effective Address)Effective Address) 或或偏移量偏移量 (Offset)(Offset) 等等。有了段地址和偏移量,就能唯一地确定某一内存单元在存储器内的具体位置。

Page 45: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

由此可见,存储单元的逻辑地址分为两部分:段地址和偏移量。由逻辑地址得到其物理地址 (PA—Physical Address) 的计算方法如下: 物理地址物理地址 PA=PA=段地址段地址×16 + ×16 + 偏移量偏移量 计算存储单元物理地址的公式可用“左移 4位”和“加”运算来实现。图是物理地址的计算示意图。

物理地址

偏移量

段地址

Page 46: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

存储器分段:段起始地址必须是某一小段的首地址,段的大小可以是 64K范围内的任意字节。 物理地址:每个存储单元的唯一的物理地址:每个存储单元的唯一的 2020 位地址位地址 段地址:段起始地址的高 16 位,低低 44 位为位为 0000B0000B

偏移地址(有效地址偏移地址(有效地址 EAEA )):段内相对于段起始地址的偏移:段内相对于段起始地址的偏移值(值( 1616 位)位) 物理地址 = 16d 段地址 + 偏移地址

16 位 段 地 址

16 位 偏 移 地 址

0000

+

20 位 物 理 地 址

Page 47: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

对物理地址来说,当段地址变化时,只要对其偏对物理地址来说,当段地址变化时,只要对其偏移量进行相应的调整就可对应同一个物理地址移量进行相应的调整就可对应同一个物理地址,所以,同一个物理地址可有多个逻辑地址同一个物理地址可有多个逻辑地址。如图所示。

物理地址和逻辑地址之间的关系

Page 48: 第 2 章         80x86 计算机组织

存储器的逻辑地址与物理地址

10011111 00100110 01001000

逻辑地址逻辑地址

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

1000 : 0001H1000 : 0002H1000 : 0003H

1000 : 0004H1000 : 0005H

物理地址物理地址

10000H

10001H10002H10003H

10004H10005H

10000011 01011100 10100010

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

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

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 49: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

Page 50: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2 段寄存器

8086 有 4 个 16 位段寄存器:

CSCS (代码段寄存器)指明代码段代码段的起始地址

SSSS (堆栈段寄存器)指明堆栈段堆栈段的起始地址

DSDS (数据段寄存器)指明数据段数据段的起始地址

ESES (附加段寄存器)指明附加段附加段的起始地址每个段寄存器用来确定一个段的起始地址,每种段均有各自的用途。

Page 51: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

段寄存器是因为对内存的分段管理而设置的。 1616 位位 CPUCPU有四个有四个段寄存器,所以,其程序可同时访段寄存器,所以,其程序可同时访问四个不同含义的段问四个不同含义的段。段寄存器及其偏移量的引用关系如图所示。

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

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

Page 52: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

段寄存器段寄存器 SSSS指向用于堆栈的指向用于堆栈的内存段,内存段, SPSP是用来指向该堆栈的是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶栈顶,把它们合在一起可访问栈顶单元。另外,当偏移量用到了指针单元。另外,当偏移量用到了指针寄存器寄存器 BPBP,则其缺省的段寄存器,则其缺省的段寄存器也是也是 SSSS,并且用,并且用 BPBP可访问整个可访问整个堆栈,不仅仅是只访问栈顶。堆栈,不仅仅是只访问栈顶。 段寄存器段寄存器 DSDS指向数据段,指向数据段, ESES指向附加段,在存取操作数时,二指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到者之一和一个偏移量合并就可得到存储单元的物理地址。存储单元的物理地址。该偏移量可以是具体数值、符号地址和指针寄存器的值等之一,具体情况将由指令的寻址方式来决定。

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

Page 53: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

通常,缺省的数据段寄存器是缺省的数据段寄存器是 DSDS,只有一个例外,即:在进行串操作时,其目在进行串操作时,其目的地址的段寄存器规定为的地址的段寄存器规定为 ESES。当然,在一般指令中,我们还可以用强置前缀的方法来改变操作数的段寄存器 (见:第 3 章中的强置前缀的书写格式 )

Page 54: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

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

可选用的段寄存器 偏移量

取指令取指令 CS   IP

堆栈操作堆栈操作 SS   SP

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

SS有效地址

串操作

源操作数 DSCS 、 ES 、

SSSI

目标操作数 ES   DI

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

Page 55: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

由上表可以看出 16 位 CPU 在段寄存器的引用方面有如下规定: 取指令取指令所用的段寄存器和偏移量一定是用 CS 和 IP ; 堆栈操作堆栈操作所用的段寄存器和偏移量一定是 SS 和 SP ; 串操作串操作的目标操作数所用的段寄存器和偏移量一定是 ES 和 DI ; 其它情况,段寄存器除了其默认引用的寄存器外,其它情况,段寄存器除了其默认引用的寄存器外,还可以强行改变为其它段寄存器还可以强行改变为其它段寄存器。

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

Page 56: 第 2 章         80x86 计算机组织

存储器的逻辑分段:

存储器

64KB 代码015000H

420000H

1CD000H0150H

42004200HH

1CD01CD0HH

段寄存器

CS

DS

SS

ES

6464KBKB堆栈堆栈

6464KBKB 数据数据

6464KBKB附加数据附加数据B00000H

B000H

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 57: 第 2 章         80x86 计算机组织

存储器

8KB 代码

2KB 数据 256 堆栈

02000H

04800H

04000H

0200H

0400H

0480H

CS

DS

SS

优点 : 允许程序在存储器内重定位;

允许实模式程序在保护模式下运行;

有利于程序和数据的分离。

各段允许重叠

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 58: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

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

( 1 ) 80286 及其后机器提供了 16MB 、 4GB 以及更多的存储空间,那么如何寻址呢?( 2 )解决了多任务处理的问题,同时支持虚拟存储器特性(程序运行时,只需把需要执行的代码从外存调入内存即可)。 保护模式的存储寻址的管理方法保护模式的存储寻址的管理方法 ( 1 )逻辑地址由选择器选择器和偏移地址( 32 位、 4GB )两部分组成,选择器放在段寄存器中,由操作系统管理计算段基选择器放在段寄存器中,由操作系统管理计算段基址,址,再加上偏移地址,找到相应的存储单元。 ( 2 )用户设计程序时,和设计程序时,和 80868086实模式存储寻址一样,只实模式存储寻址一样,只需要设置段寄存器的内容即可需要设置段寄存器的内容即可。

Page 59: 第 2 章         80x86 计算机组织

支持支持多任务多任务处理功能处理功能支持支持虚拟存储器虚拟存储器特性特性

保护模式下的存储器寻址

所选存储单元所选存储单元

描 述 符描 述 符 64描述符表描述符表

所选段所选段

存 储 器存 储 器

段基地址段基地址 32

选择器选择器 16 偏移地址偏移地址 3232

逻辑地址逻辑地址

保护模式存储器寻址 安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 60: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

2.5 外部设备 外部设备与主机的通信是通过外设接口( Interface )进行的,每个接口包括一组寄存器每个接口包括一组寄存器。

数据寄存器:存放外设和主机间传送的数据数据寄存器:存放外设和主机间传送的数据 状态寄存器:保存外设或接口的状态信息状态寄存器:保存外设或接口的状态信息 命令寄存器:保存命令寄存器:保存 CPUCPU 发给外设或接口的控制命令发给外设或接口的控制命令

外设中每个寄存器都分配一个端口( Port )地址 (端口号), 80x8680x86 允许有允许有 6553565535 个个 88 位或位或 1616 位端口,构成一个独位端口,构成一个独立于内存的 立于内存的 I / O I / O 地址空间:地址空间: 0000H ~ FFFFH0000H ~ FFFFH 。 386 以后有32 位端口 .

便于用户使用外设, 80x86 提供了两种类型的例行程序共用户调用: BIOSBIOS 和 DOSDOS 功能调用。

Page 61: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 62: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 63: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 64: 第 2 章         80x86 计算机组织

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

第 2 章作业

Page 33 Page 33 2.1 ~ 2.5, 2.1 ~ 2.5,

2.82.8