汇编语言 程序设计第 2章 IBM_PC计算机系统结构
◆ Inter8086微处理器的功能结构
◆ 存储器
◆ 堆栈 (Stack)
◆ Inter80486和 Pentium微处理器的结构及存储管理汇编语言 程序设计
2.1 Inter8086微处理器的功能结构一个典型的微处理器基本结构,一般由算术逻辑单元,寄存器组和指令处理单元等部分组成 。
1,算术逻辑部件算术逻辑部件 (ALU)由全加器组成 。 它的主要任务是执行算术运算,逻辑运算及移位等操作 。
ALU有两个输入端,和两个输出端 。 其连接形式请见下图 。
2,寄存器阵列汇编语言 程序设计返回汇编语言 程序设计
2.寄存器阵列寄存器阵列是微处理器的重要组成部分,可以存放数据和地址。
寄存器位数一般与微处理器片内总线的宽度是一致的,
但也有些寄存器是片内总线宽度的两倍。
微处理器内部寄存器的数量与类型视具体的微处理器而定。
一般包括通用寄存器、累加器、标志寄存器和专用寄存器
(如:程序计数器 PC,堆栈指示器 SP,变址寄存器、地址寄存器)
返回汇编语言 程序设计
( 1) 通用寄存器组通用寄存器可以存放数据和地址 。 这类寄存器的作用并不做预先规定,故称之为通用寄存器组 。
( 2) 累加器它也是数据寄存器 。 累加器往往与 ALU单元一起完成各种算术或逻辑运算 。 运算前,作为运算器的一个输入,运算后它常用来保存运算结果 。
( 3) 标志寄存器进行算术运算或逻辑运算时,可能会发生进位
,溢出,全零,符号及奇偶性等状态的变化,运算后又往往需要保存这些状态的变化 。 为此,在微处理器中设置了标志寄存器 。 常用的状态标志有:进位标志位 C,零标志位 Z,符号标志位 S,奇偶位 P、
溢出位 O和辅助进位位 A(或称半进位 )等 。
汇编语言 程序设计
( 4) 专用寄存器
① 程序计数器 PC
PC它是指令地址寄存器 。 它的内容指出了现行指令在存储器中的存放地址,当按此地址从存储器中取出现行指令时,
PC的内容自动修改为下一条指令的地址 。
② 堆栈指示器 SP
用于确定在堆栈操作时,堆栈在内存中的具体位置 。
③ 变址寄存器用于变址寻址方式,也可做通用寄存器使用 。
另外,在微处理器内部还有一些程序员不能访问的内部工作寄存器,如指令寄存器,暂存器,地址缓冲器和数据缓冲器等 。
汇编语言 程序设计
3,指令处理单元指令处理单元即计算机的控制器,负责对指令进行译码和处理 。 它一般包括:
( 1) 指令寄存器 —— 用来暂存即将被译码处理的指令 。
( 2) 指令译码器 —— 负责对指令进行译码,通过译码获知该指令属于什么功能的指令 。
( 3)时序和控制逻辑 —— 根据指令要求,按一定的时序发出并接收各种信号。
4,指令的执行过程
( 1) 取指令
( 2) 指令译码
( 3) 取操作数
( 4) 执行指令
( 5) 存放运算结果 返回汇编语言 程序设计
2.1.1 执行部件与总线接口部件
2.1.2 Inter8086CPU寄存器的结构
2.1.3 标志寄存器 (FR)及其用途返回汇编语言 程序设计
1,Intel8086微处理器的主要特性数据线 —— 16位 。
地址线 —— 20位,其中低 16位与数据总线复用 。
内存空间 —— 20位地址线可直接寻址 1MB存储空间 。
寻址方式 —— 7种寻址方式提供了灵活的操作数存取方法 。
指令系统 —— 99条基本指令,能完成数据传送,算术运算,
逻辑运算,控制转移和处理器控制功能等 。
时钟频率 —— 8086标准主频为 5MHz,8086-2主频为 8MHz。
中断功能 —— 可处理内部软件中断和外部硬件中断,中断源多达 256个 。
工作模式 —— 支持单处理器,多处理器系统工作 。
兼容性 —— 与 8080,8085在源程序一级兼容。
汇编语言 程序设计
2,Intel8086总线接口部件 BIU和总线执行部件 EU
8086CPU内部从功能上讲由两部份组成:总线接口部件 BIU
( Bus Interface Unit) 和指令执行部件 EU( Execution
Unit) 。
( 1) 总线接口部件 BIU
总线接口部件 BIU的具体任务是:负责从内存单元中预取指令,并将它们送到指令队列缓冲器暂存 。
总线接口单元 BIU由 20位地址加法器,段寄存器,16位指令指针,指令队列缓冲器和总线控制电路等组成 。
① 地址加法器和段寄存器地址加法器用来产生 20位地址,可直接寻址 1MB存储物理空间 。 但是 CPU内部的寄存器都是 16位的,所以需要由地址加法器来根据 16的段寄存器提供的内容 (段的起始地址 )左移 4位后,与 16位偏移地址相加,形成一个 20位的物理地址,
以对存储单元进行寻址 。
汇编语言 程序设计比如,一条指令的物理地址就是根据代码段寄存器 CS和指令指针寄存器 IP的内容得到的。假设 CS=FE00H,IP=0200H,
此时指令的物理地址为 FE200H。
② 16位指令指针 IP
8086CPU中,IP(1nstructionPoimer)用来存放将要取出的指令在现行代码段中的偏移地址。它只有与 CS相结合,才能形成指向指令存放单元的物理地址。
③ 指令队列缓冲器
8086 CPU的指令队列为 6个字节,在 EU执行指令的同时,
从内存中取下面一条或几条指令,将取来的指令依次存放在指令队列中。它们按,先进先出,的原则存放,并按顺序取出到 EU中执行。
④ 总线控制电路总线控制电路将 8086CPU的内部总线和外部总线相连。
汇编语言 程序设计
( 2) 总线执行部件 EU
EU的主要任务是完成指令译码和执行指令的操作 。
EU由算术逻辑运算单元,标志寄存器,数据暂存寄存器,
通用寄存器组和 EU控制电路等组成 。
① 算术逻辑运算单元算术逻辑运算单元 (ALU)是一个 16位的运算器,用于二进制算术和逻辑运算,也可计算寻址存储器所需的 16位偏移量 。
② 标志寄存器是一个 16位的寄存器,用于反映 CPU运算的状态特征和存放某些控制标志 。
③ 数据暂存寄存器它协助 ALU完成运算,暂存参加运算的数据 。
④ 通用寄存器组它包括 4个 16位的数据寄存器 AX,BX,CX,DX,2个 16位的指针寄存器 SP,BP和 2个 16位的变址寄存器 SI,DI。
汇编语言 程序设计
⑤ EU控制电路它负责从 BIU的指令队列缓冲器中取指令,并对指令译码 。 根据指令要求向 EU内部各部件发出控制命令,以完成各条指令规定的功能 。
EU的具体工作过程是:从 BIU指令队列缓冲器中取出指令操作码,通过译码电路分析,发出相应控制命令,控制
ALU数据总线中数据的流向 。 如果是运算操作,操作数经过暂存器送入 ALU,运算结果经过 ALU数据总线送到相应的寄存器 。 同时,标志寄存器 FR根据运算结果改变状态 。 当指令要求访问存储器或 l/O设备时,EU向 BIU发出请求,由 BIU
通过 8086系统总线访问存储器或 I/ O设备 。 因为 EU中所有的寄存器和数据通道 (除队列总线为 8位外 )均为 16位宽度,
可以实现数据的快速传送 。 8086CPU内部结构图如下:
汇编语言 程序设计汇编语言 程序设计
( 3) BIU和 EU的并行工作
8086 CPU中,由于 BIU和 EU是分开并独立工作的,
在 EU执行指令的同时,BIU可预取下面一条或几条指令。
因此,CPU执行完一条指令后,就可以立即执行存放指令队列中的下一条指令,而不需要像以往的 8位 CPU那样,重复地进行先取指令、后执行指令的串行操作。
这种并行重叠操作的特点提高了总线的信息传输效率和整个系统的执行速度。
返回汇编语言 程序设计
2.1.2 Inter8086CPU寄存器的结构
8086微处理器内部共有 14个 16位寄存器,包括:通用寄存器,地址寄存器,段寄存器,指令指针和标志寄存器 。
1,数据寄存器包括 AX,BX,CX,DX四个通用寄存器,它们都可以以字
(16位 )的形式访问,也可以以字节 (8位 )的形式访问 。 例如对 AX可以分别访问高位字节 AH或低位字节 AL。 这四个寄存器都是通用寄存器,但它们又可以用于各自的专用目的 。
AX,作为累加器用,它是算术运算的主要寄存器 。
BX,作通用寄存器使用,它还经常用作基址寄存器 。
CX,作通用寄存器使用,此外在循环 (LOOP)和串处理指令中用作隐含的计数器 。
DX,作通用寄存器使用 。 还有一些特殊用途 。
汇编语言 程序设计
2,指针及变址寄存器包括 SP,BP,SI,DI四个 16位寄存器 。 它们可以像数据寄存器一样在运算过程中存放操作数,但它们只能以字 ( 16
位 ) 为单位使用 。 此外,在段内寻址时用它们来提供偏移地址 。
SP,称为堆栈指针寄存器 。 用来指示栈顶的偏移地址,
BP,称为基址指针寄存器 。 用作堆栈区中的一个基地址以便访问堆栈中的其他信息 。
SI,源变址寄存器 。 当与 DS联用时,用来确定数据段中某一存储单元的地址,在串处理指令中,SI作为隐含的源变址寄存器,与 DS联用达到在数据段寻址的目的 。
DI,目的变址寄存器 。 在串处理指令中,DI作为隐含的目的变址寄存器并 ES联用在附加段中寻址,其它功能和使用方法与 SI基本相同 。
汇编语言 程序设计
3,段寄存器
8086有四个段寄存器 。 为了寻址 1MB内存,将内存分成若干个逻辑段 。 每个段长 64KB。 使用四个段寄存器存放各段的基本地址 。
BIU中的四个段寄存器分别称为代码段 CS(Code Segment)
寄存器,数据段 DS(Data Segment) 寄存器,堆栈段 SS(Stack
Segment) 寄存器和附加段 ES(Extra Segment) 寄存器 。
CS段寄存器给出当前代码段的基址 。 DS段寄存器给出当前数据段的基址 。 SS段寄存器给出当前堆栈段的基址 。 ES段寄存器给出当前使用的附加段的基址 。
4,控制寄存器包括 IP和 FR两个 16位寄存器 。 IP为指令指针寄存器,用来存放代码段中的偏移地址 。 它与 CS寄存器联用确定下一条指令的物理地址 。 FR寄存器,下一小节将详细介绍 。
返回汇编语言 程序设计
2.1.3 标志寄存器 (FR)及其用途
8086CPU中有一个 16位标志寄存器,由 6位条件码标志
(flag)和 3位控制标志构成,如下所示:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
其中,条件码标志用来记录程序中运行结果的状态信息,控制标志用来控制 CPU的工作状态 。
1,条件标志
( 1) OF(OverflowFlag)溢出标志,溢出时 OF=1,否则 OF= 0。
( 2) SF(SignFlag)符号标志,结果为负时 SF=1,否则 SF=0。
( 3) ZF(ZeroFlag)零标志,结果为 0时 ZF=1,否则 ZF=0。
( 4) CF(CarryFlag)进位标志,记录运算时从最高有效位产生的进位或借位值 。 当最高有效位有进位或借位时 CF=1,否则置 CF=0。
OF DF IF TF SF ZF AF PF CF
汇编语言 程序设计注,请读者区分好溢出标志 OF和进位标志 CF,当溢出时,表明运算结果出现了错误 。
( 5) AF(AuxiliarycarryFlag)辅助进位标志,记录运算时第 3位 (字节运算 )或第 7位 ( 字运算 ) 产生的进位或借位值 。
例如,执行加法指令时第 3位有进位时 AF=1,否则 AF=0。
( 6) PF(ParityFlag)奇偶标志,用来检验机器传送信息时可能产生的代码出错情况 。 当结果操作数中 1的个数为偶数时 PF=l,
否则 PF=0。
2,控制标志
( 1) DF(DirectionFlag)方向标志,当 DF位为 1时,每次操作后使变址寄存器 SI和 DI减量,当 DF为 0时,则使 SI和 DI增量,
( 2) IF(InterruptFlag)中断标志,IF为 l时,开中断,否则关中断 。
( 3) TF(TrapFlag)陷阱标志,TF=1时,每条指令执行完后产生陷井,
TF=0时,CPU正常工作不产生陷开 。
其中控制标志是 系统程序 或 用户程序根据需要用指令设置的 。 而状态信息是 由中央处理机根据计算结果自动设置的 。

汇编语言 程序设计
3,标志位举例
【 例 2.1】 执行以下两数的加法操作,判断各标志位的状态 。
0010 0011 0100 0101
+ 0011 0010 0001 1001
0101 0101 0101 1110
执行以上操作后,各状态标志位的状态应为:
CF=0 PF=0 AF=0 ZF=0 ZF=0 OF=0
汇编语言 程序设计
【 例 2.2】 执行加法操作 。
1010 1011 0000 0000
+ 1111 1111 1111 1111
1010 1010 1111 1111
执行操作后,各状态标志位的状态应为:
CF= 1 PF= 1 AF= 0 ZF=0 SF=1 OF=0
【 例 2.3】 执行加法操作 。
0110 0100 0000 0000
+ 0110 0100 0000 0000
1100 1000 0000 0000
执行以上加法操作后,各状态标志位的状态应为:
CF=0 PF=0 AF=0 ZF= 0 SF=1 OF=1
返回汇编语言 程序设计
2.2 存储器
2.2.1 主存储器的组成
2.2.2 8086存储器的组织返回汇编语言 程序设计存储器分类:
按所存放的位置分:分为主存储器和辅助存储器 。
主存储器存放当前正在执行的程序和使用的数据 。
辅助存储器用来长期保存大量程序和数据 。
按读写方式分:分为随机存取存储器 RAM和只读存储器 ROM。
RAM存储器在断电后不能保存信息 。
ROM存储器在断电后仍能保存信息 。
存储器组成:
存储器由存储单元组成,每个存储单元有一个惟一的存储器地址 。 每个存储单元存放 1个字节的数据,1个字节包含了 8个二进制位 。
存储容量是指存储器所具有的存储单元个数,基本单位是字节 B。
为了表达更大的容量,常用的单位是 KB( 千字节 ),MB( 兆字节 ),GB( 吉字节 ),甚至 TB( 太字节 ) 。
换算,1KB=2l10字节 =1024字节,1MB=220字节,1GB=230字节,
1TB=240字节 。
返回汇编语言 程序设计
2.2.2 8086存储器的组织
1.存储器单元的地址和内容
地址:每个存储单元规定的编号是地址,存储单元地址从 0开始顺次加 1。 存储单元的地址是无符数 。 n位二进制数共能表示 2n个存储单元的地址,为了书写方 便,存储单元地址常采用十六进制数表示 。
内容:一个存储单元中存放的信息称为该存储单元的内容 。
地址与内容的关系:见下图汇编语言 程序设计汇编语言 程序设计
字地址:一个字存放到存储器要占用连续的两个字节单元。低字节存放在地址低的字节单元中,高字节存放在地址高的字节的单元中,
字单元的地址用低地址表示。例如,34560H的字单元的内容是
1234H,而地址为 78780H时字单元的内容是 3332H。
双字,4个连续的字节单元就构成了一个双字单元。例如:地址为
34560H的双字单元中存放的内容是 78561234H。
2.物理地址的形成
物理空间,8086CPU地址线是 20位的,最大可寻空间是 220=1MB,其物理寻址范围是 00000H— FFFFFH。
逻辑段,把 1M字节地址空间划成若干逻辑段。每个逻辑段必须满足两个条件,一是逻辑段的起始地址 (简称段首址 )必须是 16的倍数;
二是逻辑段的最大长度为 64K。 按照这两个条件,1M字节地址空间最多可划分成 64K个逻辑段,最少也要划分成 16个逻辑段。逻辑段与逻辑段可以相连,也可以不连,还可以重叠。
段首址,是指逻辑段在主存中的起始位置 。
段内偏移地址,是指主存单元距离段首址的偏移量,简称偏移地址,
用 EA来表示,由于限定每段不超过 64KB,所以偏移地址可以用 16位数据表示。
汇编语言 程序设计
物理地址形成:物理地址用 PA表示,8086内部和用户编程时所采用的,段首址:段内偏移地址,形式,称为逻辑地址。将逻辑地址中的段首址左移 4位,加上偏移地址就得到 20位物理地址。
例如逻辑地址,3850H,200H”表示物理地址
38700H。 同一个物理地址可以有多个逻辑地址形式。
3,存储器各段分配举例
【 例 2.4】 各独立段的分配情况示例 。
设 CS=B000H,DS=1CDEH,SS=4200H,ES=0150H,它们分别为代码段、数据段、堆栈段和附加段的段首址。
自每个段首址开始,各段均占 64KB的范围,各段之间互不重叠。如图 2.7所示。
汇编语言 程序设计汇编语言 程序设计
【例 2.5】各段相互重叠情况示例。
设 CS=0200H,DS=0400H,SS=0480H,这样代码段、
数据段和堆栈段的物理首地址分别为 02000H、
04000H和 04800H。 其中代码段占 8KB地址空间,数据段占 2KB,堆栈段占 256B,SP=0100H。 由于该程序没有使用附加段,所以没有设置 ES值。从该例可以看出,每个段大小应根据实际需要分配,可以重叠。有时,甚至可以将所有 4种段都集中在一个逻辑段内,形成一个短小紧凑的程序,其大小不超过 64KB。 假设使 CS=DS=SS=0200H,则代码段将占据该逻辑段为偏移地址 0000H一 1FFFH的 8KB,
数据段在偏移地址 2000H--27FFH位置,堆栈段指针 SP=2900H。 如图 2.8所示。
汇编语言 程序设计图 2.8 各段重叠存储单元分配图 返回汇编语言 程序设计
2.3.1 堆栈的构造
2.3.2 8086堆栈的组织
2.3.3 堆栈操作返回汇编语言 程序设计
2.3 堆栈 (Stack)
2.3.1 堆栈的构造
1,什么是堆栈堆栈有两种形式:一种是硬堆栈,即用寄存器组来实现的 。
另一种是软堆栈,即用主存的一部分空间作堆栈 。 堆栈的运行方式为先进后出或先进先出两种,先进后出型堆栈的操作数只能从一个口进行读或写 。 堆栈主要用于暂存数据以及在,过程,
调用或处理中断时暂存断点信息 。
2,堆栈的构造现在通常采用软堆栈,由程序设计人员用程序在存储器中划出一块存储区作为堆栈 。 这个存储区最大地址的字存储单元为堆栈底部,叫栈底 (Bottom)。 在堆栈中存放的数据或断点信息从这里开始,逐渐向地址小的方向,堆积,。 在任何时刻,存放最后一个信息的存储单元 (即已存放信息的最小地址单元 )为堆栈顶部,叫栈顶 (TOP)。 栈顶是随着存放信息的多少而变的由于堆栈顶部是浮动的,为了指示现在堆栈中存放数据的位置,通常设置一个指针 —— 堆栈指针 SP(Stack Pointer),它始终指向堆栈的顶部 。
汇编语言 程序设计
2.3.2 8086堆栈的组织栈底为堆栈空间的高地址单元,栈顶为低地址单元 。 数据进栈后,
栈顶向低地址方向浮动;数据出栈后,栈顶向高地址方向调整 。
一个 16位的数据进栈的规律是:高位字节存入高地址单元,低位字节存入低地址单元 。
一个 16位数据出栈规律是:低位字节弹到目标操作数低位,高位字节弹到目标操作数据高位 。
为了指示栈顶的当前位置,用 SP存放栈顶的有效地址 。
堆栈是按字组织的,即每次在堆栈中存取数据均是两个字节,
数据在堆栈中存放的格式是:
汇编语言 程序设计
2.3.3 堆栈操作
1,设置堆栈堆栈的设置主要是对堆栈段寄存器 SS和堆栈指针 SP的赋值 。 在用户源程序中通常安排一个段为堆栈段 。 如:
SEGMENT PARA STACK ; 说明本段为堆栈段
DW 100 DUP(0)
ENDS
2,进栈进栈 (PUSH)就是把数据压人堆栈 。 压入堆栈的数据可以是段寄存器内容,也可以是通用寄存器或内存操作数等 。 进栈操作如下程序段所示 。
例如:
PUSH AX
PUSH DS
PUSH DATA_WORD
PUSHF ; 把标志寄存器内容压人堆栈汇编语言 程序设计
3,出栈出栈 (POP)就是从堆栈顶部弹出一个字送回通用寄存器,段寄存器或者字存储单元,如下程序段所示 。 例如:
POP AX
POP DX
POP DATA_WORD
POPF ; 从堆栈弹出的内容送回标志寄存器返回汇编语言 程序设计
2.4 Inter80486和 Pentium微处理器的结构及存储管理
2.4.1 80486和 Pentium微处理器的结构
2.4.2 80486和 Pentium微处理器寄存器结构
2.4.3 80486和 Pentium存储管理返回汇编语言 程序设计
2.4.1 80486和 Pentium微处理器的结构
1,80486微处理器
80486由 7大部分组成,它们是总线接口部分、指令预取部分、译码部分、控制部分、运算部分、存储管理部分和高速缓冲存储器,
80486的存储空间高达 246字节,并具有多种寄存器和丰富的数据类型 。
运算部分:包含定点运算部件和浮点运算部件 。 进行定点运算时需要算术逻辑运算单元 (ALU),移位器和寄存器组;进行浮点运算时需要浮点运算单元 (FPU)和浮点寄存器组 。
存储管理部分:是为实现虚拟存储器而设置的,它由分段部件和分页部件两部分组成 。 分段部件管理逻辑地址空间,并把逻辑地址转换为线性地址;分页部件把线性地址转换为物理地址 。
汇编语言 程序设计图 2.11 80486微处理品基本结构示意图汇编语言 程序设计
高速缓冲存储器:为了提高计算机的运算速度,80486在内部还集成了一个 8K字节的高速缓冲存储器 (cache),cache用来存放最近运行的程序所需要的指令代码和数据。指令预取部件中包含了两个 16字节的队列寄存器。
控制部分,由控制与保护部件和控制 ROM组成 。 控制部分根据指令译码器送来的信息产生微指令,并通过微指令对运算部分,存储管理部分及指令译码器发出控制信号 。
总线接口部分:功能是产生访问微处理器以外的存储器和输入/
输出接口所需要的地址,数据和命令 。
微处理器与外部的信息交换是通过总线接口部分的数据总线收发器进行的 。 在微处理器内部有两组方向不同的 32位数据线,当外部信息输入时,可通过一组数据线把信息送往 cache和指令预取队列;当向外送出信息时,是通过数据收发器中的写缓冲器进行的 。 这样可缓解高速运行的 CPU与以较低速度运行的存储器,输入
/输出接口之间的矛盾,且可实现并行处理 。
汇编语言 程序设计
2,Pentium微处理器
( 1) Pentium采用的先进技术
① CISC技术和 RISC技术复杂指令集计算机技术 ( CISC) 和简化指令集计算机技术 (RISC)是两种不同的 CPU设计技术,Intel公司在 Pentium之前的 CPU均属于 CISC体系,从 Pentium开始,将 CISC和 RISC结合,取两者之长,实现更高的性能 。
采用 CISC技术的 CPU有如下特点:
( a) 指令系统中包含很多指令 。
( b) 访问内存时采用多种寻址方式 。
( c) 采用微程序机制,使微处理器控制 ROM中存放了众多微程序 。
采用 RISC技术的 CPU有如下特点:
( a) 指令系统只含简单而常用的指令,指令长度较短,并且长度相同 。
( b) 采用流水线机制来执行指令,该机制是一种指令级并行处理方式,在同样的时间段中比非流水线机制下执行更多的指令 。
( c) 大多数指令利用内部寄存器来执行,从而使内存的管理简化 。
Pentium的大多数指令是简化指令,但仍然保留了一部分复杂指令,而对这部分指令采用硬件来实现 。 所以,Pentium吸取了两者之长 。
汇编语言 程序设计
② 超标量流水线技术所谓超标量,就是一个处理器中有多条指令流水线。在
Pentium中,采用 U和 V两条流水线,每条流水线均含有独立的
ALU地址生成电路和连接数据 Cache的接口。超标量流水线机制使 Pentium能够在一个时钟周期执行两条整数运算指令,比相同频率的前一代 CPU实际速度提高一倍。
超标量流水线技术是和 RISC技术密不可分的 。
Pentium内部还含有一个增强型浮点运算器 <floating
processor unit,FPU),在 FPU中,采用快速硬件来实现浮点加,乘,除运算,使其浮点运算速度比前一代 CPU快三倍以上 。
③ 分支预测技术在转移指令执行前,能够预测转移是否发生,从而确定此后执行哪一段程序 。
Pentium用分支目标缓冲器 (branch target buffer,BTB)
来执行预测功能,它含有一个 1KB容量的 Cache,其中可以容纳
256条转移指令的目标地址和历史状态 。
汇编语言 程序设计在程序运行中,BTB采用动态预测方法,当一条指令造成分支时,BTB检测这条指令以前的执行状态,并用此状态信息预测当前的分支目标地址,然后,预取此处的指令。当 BTB判断正确时,分支程序会如同分支未发生一样,维持流水线的照常运行,当 BTB判断错误时,则修改历史记录并重新取指令、译码 …… 即重新建立流水线。但总的说,有了 BTB仍然明显提高了效率。
( 2) Pentium微处理器结构
Pentium微处理器主要由 10大部分组成,它们是:总线接口部件,U流水线和 V流水线、指令 Cache,数据 Cache,指令预取部件、指令译码器、浮点处理部件 FPU,分支目标缓冲器 BTB,控制
ROM,寄存器组。
总线接口部件:实现 CPU与系统总线的连接,其中包括 64位数据线,
32位地址线和众多控制信号线 。
U流水线和 V流水线:两者独立运行,这两条流水线中均有独立的
ALU,U流水线可执行所有整数运算指令,V流水线只能执行简单的整数运算指令和数据交换指令 。
汇编语言 程序设计
指令 Cache,数据 Cache,两者分开,从而减少了指令预取和数据操作之间可能发生的冲突,并可提高命中率。两个
Cache分别配置了专用的转换检测缓冲器,用来将线性地址转换为 Cache的物理地址。
指令预取部件:指令预取部件每次取两条指令,如果是简单指令,并且后一条指令不依赖于前一条指令的执行结果,
那么,指令预取部件便将两条指令分别送到 U流水线和 V流水线独立执行。
指令译码器:指令 Cache,指令预取部件将原始指令送到指令译码器,分支目标缓冲器则在遇到分支转移指令时用来预测转移是否发生 。
浮点处理部件 FPU主要用于浮点运算,内含专用的加法器、
乘法器和除法器。
控制 ROM中,含有 Pentium的微代码,控制部件则直接控制流水线。 返回汇编语言 程序设计
2.4.2 80486和 Pentium微处理器寄存器结构
80486和 Pentium微处理器中的寄存器可以分为 4类,它们是基本结构寄存器、系统级寄存器、浮点寄存器和调试测试寄存器。应用程序只能访问基本结构寄存器和浮点寄存器;而系统程序可访问所有的寄存器。
1.基本结构寄存器
( 1) 通用寄存器
8个 32位的通用寄存器,这些寄存器都可以存放数据或地址,
并能进行 32位,16位,8位和 1位的运算 。
( 2) 段寄存器微处理器内部有 6个 16位的段寄存器,它们直接或间接地指出指令代码和数据所用的地址空间 。 这 6个段寄存器是代码段寄存器 CS,堆栈段寄存器 SS,数据段寄存器 DS,ES,FS和 GS。
( 3) 指令指针它是 32位的寄存器,称作 EIP。 EIP中存放相对于代码段寄存器的基值的偏移量 。
汇编语言 程序设计
( 4) 标志寄存器它是 32位的寄存器,称作 EFLAGS。 EFLAGS中的位可分为标志位和控制位两类,标志位指明程序运行时的微处理器的实时状态;控制位由程序设计者设置,以控制
80486和 Pentium进行某种操作。
2,系统级寄存器包含 4个控制寄存器和 4个系统地址寄存器,它们控制着 80486和 Pentium微处理器的片内 cache,运算部分的浮点部件以及存储管理部分。这些寄存器只在系统程序中才能使用。
3,调试与测试寄存器
80486微处理器有 8个调试寄存器,这就对程序的调试提供了硬件上的支持 。
80486微处理器还包含 5个测试寄存器,用于测试自身的片内 cache和转换用旁视缓冲区 TLB,但 Pentium取消了测试寄存器,用一组模式专用寄存器来实现更多功能 。
返回汇编语言 程序设计
2.4.3 80486和 Pentium存储管理
1.存储地址空间
80486微处理器有 3个明确的存储地址空间,它们是虚拟空间、
线性空间和物理空间。
虚拟空间又称为逻辑空间,是应用程序员编写程序的空间
物理空间也称为主存空间,是计算机中主存储器的实际空间,
相应的地址称作物理地址或主存地址。
80486微处理器通过分段部件把虚拟空间变换为 32位的线性空间 。 如果分页部件未被选用,线性地址就是物理地址
2,输入/输出 (I/ O)地址空间
486有两个独立的物理空间,一个是存储空间,另一个是 I/
O空间 。
80486微处理器的 I/ O空间由 216(64K)个地址组成 。 它与存储地址不重叠,这是因为 80486微处理器芯片的 M/ IO引脚把它们从逻辑上给区分开来了 。
返回