第一章 微型计算机基础知识 联系客服

发布时间 : 星期日 文章第一章 微型计算机基础知识更新完毕开始阅读67fcce19c281e53a5802ffb7

地址EA来确定存储器的地址。

1.5.3堆栈和栈操作指令 (一)堆栈的概念

堆栈是在存储器中开辟的一片数据存储区,这片存储区的一端固定,另一端活动,且只允许数据从活动端进出。这同在货栈中从下至上堆放货物的方式一样,最先堆放进去的货物总是压在最底层,而取出货物时,它将最后取出,即“先进后出”。堆栈中数据的存取也遵循“先进后出”的原则。我们把堆栈的活动端称为栈顶,固定端称为栈底。

存储器的任何可用部分(只读存贮器除外)均可被用来作为堆栈。只是因为栈顶是活动端,所以需要有一指示栈顶位置,即栈顶地址的指示器,这个指示器就是堆栈指示器SP,它总是指向堆栈的栈顶。往堆栈存入或从堆栈取出数据,一般是通过SP从栈顶存取。

栈的伸展方向既可以从高地址向低地址,也可以从低地址向高地址。8086/8088的堆栈的伸展方向是从高地址向低地址。8086/8088的堆栈操作都是字操作。将一个数压入堆栈称为进栈,进栈时SP自动减2,进栈的字就存放在新增加的两个单元内。把一个数从栈顶弹出称为出栈,出栈时SP自动加2,弹出的字是SP让出的两个单元的内容。

堆栈的设置主要用来解决多级中断,子程序嵌套和递归等程序设计中难以处理的实际问题。还可以用来保护现场,寄存中间结果,并为主、子程序的调用和返回提供强有力的依托。

(二)栈操作指令

堆栈操作必须采用专门的指令进行。栈操作指令分为两类,即进栈指令PUSH和出栈指令POP。

(1)进栈指令PUSH source

进栈指令的功能是将通用寄存器、段寄存器或存储器中的一个字压入栈顶。例如:PUSH AX的操作,如图1-28所示。

图1-28 进栈操作 (2)出栈指令POP dest

出栈指令的功能是将栈顶的一个字传送给通用寄存器、段寄存器(除CS外)或存储器。例如:POP BX的操作如图1-29所示。

图1-29 出栈操作

(3)状态标志寄存器的进栈指令PUSHF和出栈指令POPF

8086/8088还有标志寄存器的栈操作指令,其操作与进栈指令和出栈指令相同。它们专用于保护和恢复标志寄存器。

利用这两条指令可以改变追踪标志TF。在8086/8088的指令中没有能直接改变TF标志的指令若要改变TF标志,可先用PUSHF指令将整个标志寄存器进栈,然后改变栈顶存储单元的D8位,再用POPF指令出栈,这样标志寄存器其余的标志不受影响而只有TF标志按需要改变了。

堆栈中的数据也可以通过基址指示器BP或者BX、SI、DI进行存取,不受栈操作之限。此时,堆栈存储器就如同一般的数据存储器一样,可以在堆栈段的任何地址单元中存取数据。

1.6 80x86系列微处理器

Intel公司的80286、80386、80486、Pentium和Pentium Pro/Ⅱ/Ⅲ/Ⅳ等新一代微处理器统称为80x86系列微处理器。本节将根据80x86芯片发展和演变过程介绍80x86系列微处理器。

1.6.1 80286 Intel 80286是Intel公司1982年推出的产品。80286内部和外部数据总线都是16位,

24

地址总线为24位,可寻址2字节即16MB内存。PC AT机就是IBM公司用80286作为CPU的最早的286 PC机。80286片内具有存储器管理和保护机构,它有实地址和受保护的虚地址两种工作方式。

1.80286的结构 80286由地址单元AU(Address Unit)、总线单元BU(Bus Unit)、指令单元IU(Instruction Unit)和执行单元EU等4个单元组成,80286将8086中的总线接口单元BIU分成了地址单元AU、指令单元IU和总线单元BU等3部分。这样,就提高了这些单元操作的并行性,从

而提高了吞吐率,加快了CPU的处理速度。

2.80286的寄存器

80286的通用寄存器、段寄存器和指令寄存器与8086完全一样,不同之处在于新增加了1个机器状态字MSW(Machine Status Word)寄存器,标志寄存器新增加了3个标志位。MSW是一个16位寄存器,只定义了它的低4位,其中最低位是保护允许(PE)位,当PE=0时,CPU处在实地址方式;当PE=1时,CPU处在虚地址保护方式。在CPU复位时,MSW被置为FFF0H,CPU处在实地址方式。标志寄存器中新增加的3位位于它的最高3位,其他9位标志位的定义与位置均和8086相同。

3.80286的工作方式

80286有实地址和受保护的虚地址两种工作方式。 在实地址方式中,80286和8086的工作方式完全一样,使用24位地址中的低20位A19~A0。寻址能力为1MB,其两种地址,即物理地址与逻辑地址的含义也与8086一样。

在保护方式中,80286可产生24位物理地址,直接寻址能力为16MB。和实地址方式一样,80286将寻址空间分成若干段,一个段最大为64KB,物理地址也是由两部分组成的:段地址和偏移地址。但在保护方式下的段地址是24位而不是实地址方式下的16位。而段内的偏移地址与实地址方式相同,是由各种寻址方式所决定的16位。80286的段寄存器是16位的,如何存放24位的段地址呢?

在保护方式下,80286的段寄存器不再存放段地址,而是存放一个指针,又称为段选择子,段选择子和偏移地址这两个成分构成逻辑地址。把程序中可能用到的各种段(如代码段、数据段、附加段、堆栈段)的段地址和相应的特性(称之为指述符)集合在一起形成一张表,称为描述符表,存放在内存的某一区域。每个描述符由6个字节组成,其中有3个字节为段地址,段选择子(实际使用了14位)指向每个描述符的起始始置。80286的地址转换机构根据段选择子的值找出描述符中的24位段地址,再与偏移地址相加,就得到24位物理地址,如图1-30所示。

图1-30 80286在保护方式下的物理地址形成

1416

由于段选择子有14位,因此可以定义2个描述符;而对应各描述符可定义2(64K)

1416

字节的段,所以80286的逻辑地址寻址能力为2×2B=1000MB(1GB)的存储空间。但80286的实际内存最多只有16MB,容纳不下这么大的存储空间,所以只能将其置于辅助存储器(硬盘)上。实际工作时,将当前需要的段调入内存,用过的段返回辅助存储器,这一切都是系统自动管理的。因此,虽然系统只有16MB内存,但对用户来说,好像在使用1GB内存,于是这个1GB内存,称之为虚拟内存。

1.6.2 80386

Intel 80386是Intel公司1985年推出的一种高性能32位微处理器。80386内部和外部数据总线都是32位的,地址总线为32位,可寻址4GB。

1. 80386的结构

80386由总线接口单元BIU、指令译码单元IDU(Instruction Decode Unit)、指令预取单元IPU(Instruction Prefetch Unit)、执行单元EU、段管理单元SU(Segment Unit)和页管理单元PU(Paging Unit)等6个单元组成。80386的结构和80286基本相同,主要的区别是段管理单元和页管理单元。它们负责地址产生、地址转换和总线接口单元的段检查。段管理单元用来把逻辑地址变换成线性地址。页管理单元的功能是把线性地址换算成物理地址。

2. 80386的寄存器

80386共有7类寄存器,它们是通用寄存器、段寄存器、指令指示器、标志寄存器、控制寄存器、系统地址寄存器、调试寄存器和测试寄存器。

80386有8个32位的通用寄存器,它们是8086和80286的16位通用寄存器的扩展,故命名为累加器EAX、基址寄存器EBX,计数寄存器ECX,数据寄存器EDX,堆栈指示器ESP,基址指示器EBP,原变址寄存器ESI和目的变址寄存器EDI。它们的低16位可以作16位寄存器使用,其命名为AX、BX、CX、DX、SP、BP、SI、DI,而AX、BX、CX和DX的低位字节(0~7位)和高字节(8~15位),又可以作为8位的寄存器单独使用,其命名仍为AH、AL、BH、BL、CH、CL、DH和DL。

80386的指令指示器EIP和标志寄存器EFLAGS都是32位的寄存器,它们的低16位即是80286的IP和FLAGS,并可单独使用。80386除了保留80286的所有标志外在高位字的最低两位又增加了两个标志位:虚拟8086方式标志VM和恢复标志RF。在80386处于虚地址保护方式时,使VM=1,80386就进入了虚拟8086方式。RF标志用于断点和单步操作。

80386有6个16位段寄存器,它们是CS、SS、DS、ES、FS和GS。其中CS和SS的作用与8086相同,而DS、ES、FS和GS都可以用来表示当前的数据段。在80386中存储单元的地址仍由段地址和偏移地址两部分组成,只是此时段地址和偏移地址都是32位的,段地址不是由段寄存器直接确定的,而是与80286一样保存在一个表中,段寄存器的值(使用了14位)只是该表的索引。

80386有4个系统地址寄存器,它们是全局描述符表寄存器GDTR(Global Descriptor Table Register)、中断描述符表寄存器IDTR(Interrupt Descriptor Table Register)、局部描述符表寄存器LDTR(Local Descriptor Table Register)和任务寄存器TR(Task Register)。它们主要用来在保护模式下管理用于生成线性地址和物理地址的4个系统表。

80386有4个控制寄存器CR0~CR3,CR1为备用。CR0的低位字节是机器状态字寄存器(MSW),与80286中的MSW寄存器相同。控制寄存器用来进行分页处理。

80386的8个调试寄存器DR0~DR7主要用来设置程序的断点。

80386的2个测试寄存器TR6和TR7也是用来进行页处理的寄存器。 3. 80386的工作方式

80386有实地址、虚地址保护和虚拟8086等3种工作方式。

80386工作在实地址方式中时和8086工作方式相同,但速度更快,对存储器的寻址也仅使用32位地址的A19~A0,逻辑地址与物理地址的含义也与8086一样。

32

80386工作在保护方式时,80386可产生32位物理地址,直接寻址能力为4GB(2B)。和80286一样,80386的物理地址也是由段选择子和偏移地址两部分组成的,段选择子也只

14

用了14位,偏移地址不是16位而是32位。因此80386的逻辑地址可达2个段,每个段的

32143246

长度可达2B=4GB,80386的虚拟内存为2×2B=2B=64TB,在80286中虚拟内存的单位是段,80286的段最大为64KB,在磁盘与内存之间进行调度是可行的,但当段的长度达到4GB就不合适了。为此在80386中将4GB空间以4KB为一页分成1G个等长的页,并以页为单位在磁盘与内存之间进行调度。

由于80386将段进行了分页处理,所以80386要经过两次转换才能得到物理地址。第1次为段转换,由段管理单元将逻辑地址转换为线性地址;第2次为页转换,由页管理单元将线性地址转换为物理地址,80386的物理地址生成如图1-31所示。从图1-31可以看到,如果禁止分页功能,线性地址就等于物理地址,如果进行分页处理,线性地址就不同于物理地址。

虚拟8086方式是在虚地址保护方式下,能够在多任务系统中执行8086任务的工作方式。当80386工作在虚拟8086方式时,所寻址的物理内存是1MB,段寄存器的功能不再是描述符表的选择子,将它的内容乘以16(左移4位)就是20位的段起始地址,与偏移地址相加形成20位的线性地址,线性地址再经过页管理单元的分页处理,就可得到20位的物理地址。

图1-31 80386在保护方式下的地址变换 1.6.3 80486

80486是Intel公司于1989年推出的新型32位微处理器。80486的内部数据总线为64位,外部数据总线为32位,地址总线为32位。

80486内部由总线接口单元、指令译码单元、指令预取单元、执行单元、段管理单元、页管理单元以及浮点处理单元(FPU)和高速缓存(Cache memory)等8个单元组成,比80386新增加了相当于80387功能的FPU和Cache两个单元。8086/8088、80286和80386的字长为16位或32位,能表达的数据范围不大,对于数值计算不太适宜。为此,在8086/8088、80286和80386微处理器的基础上设计了与之配合的专门用于数值计算的协处理器8087、80287和80387。这些协处理器与8086、80286和80386密切配合,可以使数值运算,特别是浮点运算的速度提高约100倍。而80486将FPU集成在其内部,其处理速度显著提高,比80387约快3~5倍。为了进一步提高处理速度,在80486内部又集成了8KB Cache。内存中经常被CPU使用到的一部分内容要烤页到Cache中,并不断地更新Cache中的内容,使得

Cache中总是保存有最近经常被CPU使用的一部分内容。Cache中存放的内容除了内存中的指令和数据外,还要存放这些指令和数据在内存中的对应地址。当CPU存取指令和数据时,Cache截取CPU送出的地址,并判别这个地址与Cache中保存的地址是否相同。若相同,则从Cache中存取该地址中的指令或数据;否则从内存中存取。所以80486可以高速存取指令和数据。

80486的寄存器除了FPU部件外,和80386的寄存器完全相同,不同之处是80486对标志寄存器的标志位和寄存器的控制位进行了扩充。

80486的3种工作方式及逻辑地址、线性地址、物理地址等也都与80386完全相同。 从应用角度看,80486相当于以80386的CPU为核心,内含FPU和Cache的微处理器。再加上80486采用了RISC(Reduced Instruction Set Computer精减指令系统计算机)技术,时钟倍频技术和新的内部总线结构,所以80486的处理速度有极大的提高。

1.6.4 Pentium(奔腾)

Intel公司对80x86系列微处理器的性能不断地创新与改造,继80486之后,1993年推出新一代名为Pentium的微处理器。1995年又推出名为Pentium Pro的微处理器。1997年、1999年和2000年又相继推出Pentium Ⅱ、Pentium Ⅲ和Pentium Ⅳ微处理器。Pentium是希腊字Pente(意思为5)演变来的。Pentium有64位数据线和32位地址线。Pentium Pro/Ⅱ/Ⅲ/Ⅳ具有64位数据线和36位地址线。

除了将控制寄存器和测试寄存器均增加到5个外,Pentium与80486的最大区别是:Pentium内部具有8KB指令Cache和8KB数据Cache,而Pentium Pro内部具有8KB指令Cache和8KB数据Cache外,还有256KB二级Cache。PentiumⅡ/Ⅲ/Ⅳ的指令Cache和数据Cache均增加到16KB,二级Cache也增加到512KB。Pentium和Pentium Pro/Ⅱ/Ⅲ/Ⅳ还采用了一些其他的最新技术,在体系结构上还有一些新的特点。因而它们的性能明显高于80486。

Pentium微处理器除了实地址方式、虚地址保护方式和虚拟8086方式3种方式外,还增加了一种系统管理方式SMM(System Management Mode)。系统管理方式主要为系统对电源管理、对操作系统和正在运行的程序实行管理而设置。一旦Pentium微处理器收到系统管理中断(系统管理中断引线有效)请求,无论Pentium微处理器工作在实地址方式、虚地址保护方式还是虚拟8086方式,便立即转换到系统管理方式。在系统管理方式中,执行从系统管理方式返回指令RSM(Resume from System Management Mode),Pentium微处理器便恢复保存的内容,返回到进入系统管理方式之前的工作方式。

80x86处理器在实地址方式、虚地址保护方式、虚拟8086方式和系统管理方式4种方式之间的转换关系如图1-32所示。在系统上电或复位之后,微处理器首先进入实地址方式。控制寄存器CR0(80286为机器状态字寄存器MSW)的保护允许标志位PE控制微处理器是工作在实地址方式还是工作在虚地址保护方式;标志寄存器EFLAGS的虚拟8086方式标志位VM决定微处理器是工作在虚地址保护方式还是工作在虚拟8086方式。

图1-32 80x86处理器4种工作方式之间的关系图