第二章80X86微处理器的结构张德煌第二章80X86微处理器的结构张德煌虚拟存储器地址是一个 概念性的逻辑地址,它与内存物理地址之间通过一个转换表对应。只有虚拟存储器地址中的内容被读入内存后,虚拟存储器地址才有对应的物理地址 填入转换表,当虚拟存储器地址中的内容未读入内存时,与之对应的物理内存地址为空。在段式虚拟存储器中,程序访问的逻辑地址以“ 段号+段内偏移地址”的形式给出。“段号”是一个16位数值,它表示该段在段表中的序号,被称为段选择子(Selector,又称选择符) 。选择子指向的记录被称为描述子(Descriptor,又称描述符),用于描述该段的相关信息。程序访问的逻辑地址可以由“逻 辑页号+页内偏移地址”构成。逻辑页号用于表示在页表中该地址所在的页表记录项的序号,页表记录项中存放着页的物理起始地址,它与逻辑地址 的“页内偏移地址”相加得到实际要访问的物理地址。存放页起始地址的项放在一起构成页表,每个页表占用4个字节,用于存放20 位的页起始地址和页属性。(1)GDTR(GlobalDescriptorTableRegister)全局描述子表 寄存器GDTR是一个48位的寄存器。包括两部分:一部分是全局描述子表的32位段基址,另一部分是全局描述子表的16位段限。(2) IDTR(InterruptDescriptorTableRegister)中断描述子表寄存器IDTR也是一个48 位的寄存器,同样包括32位中断描述子表的段基址和16位段限。(3)LDTR(LocalDescriptorTableR egister)局部描述子表寄存器是一个16位的寄存器,用于存放局部描述子表的选择子。操作系统为每个任务创建一个局部描述 子表(LDT),用于存放该任务使用的段描述子。2.6.4调试和测试寄存器80386以上的处理器中还有调试寄存器和 测试寄存器,用于排除故障、测试分页和Cache状态等。1.调试寄存器(DebugRegisters)80386以 上的微处理器中定义了6个用于调试的寄存器,命名为DR0~DR5,其中DR0~DR3指定了4个线性断点地址,DR7为调试控制寄存器, 用于设置断点,DR6为调试状态寄存器,用于显示断点的当前状态。这是一组32位的寄存器,是程序员可访问的,提供片上调试支持。2. 测试寄存器(TestRegisters)80386中定义了2个测试寄存器,分别命名为TR6和TR7,用于测试TLB( TranslationLookasideBuffer,转换后备缓冲器)。TLB中保存着最常用的页表地址转换关系。TR6是TLB 的命令测试寄存器,指示读写TLB的入口,TR7是TLB的数据寄存器,保存TLB的测试数据。80486处理器中增加了3个用 于调试片上Cache的测试寄存器TR3、TR4和TR5,其中TR3为Cache数据寄存器、TR4为Cache状态寄存器,TR5为C ache控制寄存器。Pentium处理器中取消了测试寄存器组TR,测试寄存器的功能由一组“模型专用寄存器”MSR(Mod elSpecialRegisters)实现。Pentium处理器中专门使用两条指令来访问MSR寄存器,RDMSR指令和WRMS R指令。2.6.5浮点寄存器从80486处理器开始,80X86系列微处理器在片内都集成了FPU(Floating ProcessingUnit,浮点处理部件),从而使CPU的运算能力得了极大提高。这些浮点运算部件使用专门的浮点寄存器。这些 寄存器包括:8个数据寄存器、1个标记字、1个控制寄存器、1个状态寄存器、1个指令指针以及1个数据指针。3.状态寄存器(Stat usRegister)状态寄存器用于存放16位状态字,反映FPU的工作状态。1514TAG764位数值有效位 15位阶码值符号位R7TAG664位数值有效位15位阶码值符号位R6TAG564位数值有效位15位阶码值符 号位R5TAG464位数值有效位15位阶码值符号位R4TAG364位数值有效位15位阶码值符号位R3TAG 264位数值有效位15位阶码值符号位R2TAG164位数值有效位15位阶码值符号位R1TAG064位数值有效 位15位阶码值符号位R01063…078…6479标记字数据寄存器1.数据 寄存器(DataRegisters)这是一组80位的寄存器,提供了相当于20个32位寄存器的容量。这8个80位的数据寄 存器中的每一个都分成同FPU的扩展精度数据类型相对应的字段,即1位符号位、15位阶码、64位数值(尾数)。指令中可以隐式或显式寻址 这些数据寄存器。2.标记字(TagWord)标记字共16位用来标记每个数值数据寄存器的内容。每2位标记表示8个数据寄 存器中的一个。标记字的主要功能是优化FPU的功能,并通过标记字能识别“空”和“非空”寄存器单元来控制堆栈。它还允许异常处理程序检查 堆栈单元的内容,而不需要对现行数据进行复杂的译码。无效操作非规格化数除数为零上溢标志下溢标 志精度堆栈标志错误状态条件码栈顶指针条件码忙标志IEDEZEOEUEPESF ESC0C1C2TOPC3B01234567891013121114152.6 80X8632位编程结构1985年80386处理器应用于PC机,微型计算机进入了32位数据处理的时代,一直 到2005年以前个人电脑都是以32位数据处理为主。2.6.132位微处理器虚拟存储器管理虚拟存储器(VM,Virtual Memory)虚拟存储器是一种存储管理技术,它提供比物理内存大得多的存储空间,使程序设计人员编写的程序不考虑实际内存容 量,从而可以编写出远大于实际内存容量的应用程序。32位80X86虚拟存储器管理结构按照内存与外存之间信息交换时传送单 位的不同,虚拟存储器可分为段式虚拟存储器、页式虚拟存储器和段页式虚拟存储器三种。(1)段式虚拟存储器段是按照程序逻辑结 构划分的一种方式,段的大小是不确定的,它由段中内容决定。优点:段是程序自然分界的描述,与程序结构的一致性好;段的逻辑独 立性使它易于编译、管理、修改和保护,也便于多道程序共享;某些类型的段(如堆栈、队列等)具有动态可变长度,允许自由调度以便有效利用主 存空间。缺点:段的长度各不相同,在分配和管理上具有一定难度,而且段的长度相对较大,在内存分配时容易产生一些空余的小空 间造成内存资源浪费。描述子共64位,主要包括三个方面的内容:一是段的基地址(共32位),用于表示 段在内存中的起始位置;二是段限(共20位),用于描述段的大小;三是段属性,包括段类型、访问权限、段是否已加载到 内存、段限的单位(字节/页)等。0段限(0~15)2段基地址(0~15)4段基地址(16~23)段类型DTDPL P6段限(16~19)AVLODG段基地址(24~31)?01234567891011 12131415描述子数据结构:段式虚拟存储器地址转换过程:(2)页式虚拟存储器页是一个固定长度的信 息描述单位,一个程序可以被分为若干页。如果将内存空间也按照页的大小分成若干个固定大小的存储块,则该存储块被称为页面。优点: 在页式管理中由于页面大小固定,进行内存分配时,不考虑分配信息的逻辑关系等因素,因此对页面的管理将变得十分方便。由于页面的大小通 常较小(如4KB),浪费只是在最后一个页面中的零头产生,因此页式管理具有较高的内存利用率。缺点:由于页不是逻辑上独立 的实体,因而处理、保护和共享等方面都不如段式方便。页式虚拟存储器地址转换过程:由于每一页只有4KB大小,如果 只使用一级页地址转换最多会有220个页表项,这需要占用很大的连续存储空间,如果分为两级,则可以将页表变小,从而更加灵活。因此80X 86使用的是两级页表结构。两级页表转换过程:第一次转换查页目录表,找到二级页表的起始地址第二次转换查页表,找到数据所在页 的起始地址起始地址+偏移找到对应的数据(3)段页式虚拟存储器为了克服段式和页式存储器管理各自的缺点,可以将 这两种管理方式结合成段页式管理。段页式管理首先将程序按照模块分段,段内再分页,分配内存以页为单位进行,而管理以段为单位进行。这样就 结合了这两种管理方式的优点。首先查段表项找到对应的段内线性地址根据段内线性地址查两级页表找到数据所在页的起始地址+偏移地 址得物理地址2.6.2基本结构寄存器80X86/32位微处理器有16个基本结构寄存器,这些寄存器按其用途可分为8个 通用寄存器、2个专用寄存器和6个段寄存器。DIEDI目的变址寄存器SIESI源变址寄存器BPEBP基址指针SPE SP堆栈指针DLDHDXEDX数据寄存器CLCHCXECX计数寄存器BLBHBXEBX基址寄存器ALA HAXEAX累加器低16位高16位1.通用寄存器(GeneralPurposeRegisters)分别是 累加器EAX、基址寄存器EBX、计数寄存器ECX、数据寄存器EDX、堆栈指针ESP、基址指针EBP、源变址寄存器ESI及目的变址寄 存器EDI。这些32位的通用寄存器可以用来保存数据和地址,支持1、8、16和32位的数据操作数,1~32的位字段以及16 位或32位的地址操作数。在这8个32位寄存器中,8个16位寄存器AX、BX、CX、DX、SP、BP、SI和DI可以存放16位信息, 8个8位寄存器AH、AL、BH、BL、CH、CL、DH和DL可以存放8位信息。串操作中用来访问目的串数据EDI串操作 中用来访问源串数据ESI堆栈指针间接寻址时用来保存偏移地址(用作基址寄存器)ESP间接寻址时用来保存偏移地址(用作基址和 变址寄存器)EBP在32位乘/除指令中用作辅助寄存器间接寻址时用来保存偏移地址(用作基址和变址寄存器)EDX循环指令 LOOPD中用作计数器间接寻址时用来保存偏移地址(用作基址和变址寄存器)ECX间接寻址时用来保存偏移地址(用作基址和变址 寄存器)EBX32位乘/除指令中用作累加器32位I/O指令中用作数据寄存器间接寻址时用来保存偏移地址(用作基址和变址寄 存器)EAX隐含使用规则寄存器通用寄存器具有一些隐含的用法,常用规则如下:2.专用寄存器(SpecialR egisters)80X86/32位CPU的专用寄存器有指令指针EIP和标志寄存器EFLAGS。FLAGSEFLA GS标志寄存器IPEIP指令指针低16位高16位(1)指令指针EIP指令指针指向要执行的下一条指令的 偏移地值,该偏移地值为相对于指令所在代码段的基地址(段起始地址)。(2)标志寄存器EFLAGS32位标志寄 存器EFLAGS用于指示微处理器的状态,并控制其操作。8048680386802868088,8086,80186Pen tium/PentiumProCPAZSTIDOIOPLIOPLNT024678910 1112131415RFVMACVIFVIPID……16171819202122……31 各标志位在标志寄存器的位置如下:VM标志提供保护方式中的虚拟8086方式。当该位在保护方式时置位(“l”)时,即转换到虚拟808 6方式,像8086那样处理段装入,但产生特权操作码的异常13故障,VM位只能在保护方式中由IRET指令置位(如果现行特权级=O), 以及在任何特权级上通过任务切换而置位。VM(Virtual8086Mode)虚拟8086方式RF标志同调试寄存器断点一起使 用,断点处理前在指令边界上检查该位,当RF被置位(“1”)时,下一条指令的任何调试故障都被忽略。然后,在每条指令成功的执行完毕(未 通知出现故障)后RF位自动被复位(但IRET、POPF以及引起任务切换的JMP、CALL和INT指令除外,这些指令将RF置成存储器 映象指定的值)。RF(Resume)恢复标志用以指示该任务是否嵌套于另一个任务中执行的状态。该位置位和复位通过向其它任务的控 制转移来实现,NT的值由IRET指令检测,以确定执行任务间返回还是任务内返回,NT用于保护方式。NT(NestedTask) 嵌套任务标志用以指示I/O设备的特权级别,IOPL共2位产生0~3共4级特权级。如果现行特权有CPL(CurrentPriv ilegeLevel)高于IOPL则I/O指令顺利执行,否则产生中断(异常13故障),使任务挂起。IOPL=00为最高优先级,I OPL用于保护模式。IOPL(Input/OutputPrivilegeLevel)IO特权级标志功能描述标志位 部分286以上CPU使用的标志位功能如下:用以指示Pentium/PentiumPro微处理器对CPUID指令的支持状态。C PUlD指令为系统提供了有关Pentium/PentiumPro处理器的信息,诸如型号及制造商。仅用于Pentium及Penfi umPro微处理器。ID(Identification)标识标志在虚拟方式下提供有关中断的信息,在多任务环境下,为操作系统 提供虚拟中断标志和中断挂起信息,仅用于Pentium及PentiumPro微处理器。VIP(VirtualInterru ptPending)虚拟中断挂起在虚拟方式下中断允许标志位的复本(Copy),仅用于Pentium及PentiumPro微 处理器。VIF(VirtualInterrupt)虚拟中断标志在进行字或双字访问时,用以指示地址是否处于字或双字边界上的状态 。当AC位置位时,地址不处于字或双字的边界上。AC标志仅用于80486SX微处理器,供协处理器80487SX使用,用作同步。AC (AlignmentCheck)对界检查功能描述标志位3.段寄存器 80X86系列的32位微处理器中有 6个16位段寄存器,其中CS、DS、ES、SS寄存器功能与16位微处理器的功能基本相同,只是在保护模式下访问空间更大。而FS、GS 段寄存器是在80386及其以后的微处理器特有的,这两个段寄存器均为附加段寄存器,用于描述两个不同数据段的起始地址。 在保护模式下,段寄存器中并不存放段的实际起始地址,而是保存要访问段的选择子。通过选择子可以找到该段的描述子,进而找到对应物理段的 起始地址。为了提高对描述子的访问速度,在微处理器中还设置了段描述子高速缓存寄存器,用于存放每个段的描述子。12 位20位32位16位选择子GS选择子FS选择子ES选择子DS选择子SS选择子CS段属性段限段基 址段描述子高速缓存寄存器(系统自动装入)段寄存器2.6.3系统寄存器80X86/32位微处理器中有一组系统级寄 存器,包括:5个控制寄存器CR0~CR4和4个系统地址寄存器GDTR、IDTR、LDTR、TR。1.控制寄存器(Control Registers)80X86/32位微处理器有5个控制寄存器,实现对微处理器的多种功能的控制与选择(其中CR1寄存器保 留未使用)。(1)CR0PentiumPro微处理器的CR0定义了11个控制位。NE位控制是由中断向量16还是 由外部中断来处理未屏蔽的浮点异常,NE=0,处理器同IGNNE(ignorenumericerror,忽略数字错)输人引脚和F EPR(floatingpointerror,浮点错)输出引脚配合工作;NE=1,在执行下一条非控制浮点指令或WAIT指令之前 ,任何UFPE(unmaskedfloatingpointexceptions,未屏蔽的浮点异常)将产生软件中断16。NE (5位)数字异常ET位用于80386微处理器,标志系统中采用的协处理器的类型。ET=1,采用80387协处理器;ET=0,采用 80287协处理器。大多数80386系统中以及80486以上系统ET置1。ET(4位)处理器扩充类型TS位用以指出任务是否切 换,执行任务切换操作时,TS=l。TS=1时,执行浮点指令将产生异常7。Ts(3位)任务切换EM位用以确定浮点指令是被自陷 ,还是被执行。EM=1,所有浮点指令将产生异常7。EM(2位)仿真协处理器MP位同TS位一起使用,用来确定WAIT指令 是否自陷。MP=1(且IS=1)执行WAIT指令产生异常7。MP(1位)监控协处理器PE位允许段使用保护机制。PE=1,允 许保护;PE=0,以实方式工作。PE(0位)允许保护功能描述位置及名称CR0控制寄存器说明:PG用来控制 是否允许分页。PG=1,允许分页;PG=0,禁止分页。PG(31位)分页使能控制CD用来控制允许或禁止向片内Caehe填 充新数据。CD=l,当Cache未命中时,禁止填充Cache;CD=0,未命中时,允许填充Cache。CD(30位)Cac he控制NW用来选择片内数据Caehe的操作模式。NW=1,禁止通写,写命中不修改主存;NW=0,允许通写。NW(29位) 通写控制AM控制标志寄存器中对界检查位(AC)是否允许对界检查。AM=1,允许AC位;AM=0,禁止AC位。AM(1 8位)边界对齐屏蔽WP用来保护管理程序写访问用户级的只读页面。WP=1时,强制一个由任一特权级写入只读页面的故障。WP=0 时,允许只读页面由特权级0-2写入。WP(16位)写保护功能描述位置及名称CR0控制寄存器说明:(2)C R2页故障线性地址寄存器CR2用来保存发生页故障中断(异常14)之前所访问的最后一个页面的线性页地址。(3)CR3 页目录基地址寄存器CR3,用来存放页目录表的物理基地址。由于页目录表是按页对齐的(4KB),因而CR3通过高20位来实施 这一要求,低12位用作其它功能,已定义的有7位。CR3为80386以上微处理器才被定义和使用,其中PWT和PCD两位为 80486以上的微处理器才具有的新控制标志。在对该页面目录或页表条目所覆盖的某一地址进行读或写访问之前,将A位置位;在对页表 条目所覆盖的某一地址进行写人之前将D位置位;对于页面目录条目,D位未定义。A(5位)被访问D(6位)被修改PCD用于指 示页面cache工作情况。PCD=1,禁止片内cachePCD=0,允许片内cachePCD(4位)页面cache控制P WT用于指示是页面通写还是回写。PWT=1,外部cache对页目录进行通写PWT=0,进行回写PWT(3位)页面通写控制 R/W、U/S位用于页面级保护。为最低的级——特权级3设置分页优先级保护。特权级3的存取保护为:U/S R/W 特权级3存取 0 0 无0 1 无1 0 只读1 1 读/写R/W、U/S(1,2位 )读/写、用户/超级管理员控制P位指出页面目录或页表条目是否可用于地址转换。P=1,该条目可用于地址转换P=0,该条目不 可用于地址转换,所有其余各位可供软件使用。P(0位)存在位功能描述位置及名称CR3控制寄存器说明:(4) CR4CR4是Pentium以上处理器中新增加的控制寄存器,已定义了8位。PGE同PAE和PSE一起设置时,用于控制新 的64GB的寻址方式PGE(7位)页尺寸扩展控制位MCE=I,允许机器检查异常;MCE=0,禁止机器检查异常MCE(6位 )机器检查使能控制位PAE=1,允许页地址扩充;PAE=0,禁止页地址扩充;当使用PentiumPro中由PSE控制的新寻 址方式时允许使用A35~A32PAE(5位)页地址扩充位PSE=l,允许页面大小扩充;PSE=0,禁止页面大小扩充。在Pen tium中设置时允许4MB,而PentiumPro为2MBPSE(4位)页尺寸扩充控制位DE用来控制是否支持I/O断点D E=1时,允许I/O断点调试扩充;DE=0时,禁止I/O断点调试扩充。DE(3位)调试扩充TSD=1,且当前特权级不为0时 ,禁止RDTSC(读时间戳计数器)指令;TSD=0,RDTSC将在所有特权级上执行TSD(2位)时间戳控制位PVI=1,允 许保护方式虚拟中断PVI=0,禁止保护方式虚拟中断虚拟中断标志位VIFPVI(1位)保护方式虚拟中断位VME=1,允许虚拟8086方式扩充VME=0,禁止虚拟8086方式扩充VME(0位)虚拟方式扩充位功能描述位置及名称2.系统地址寄存器(SystemAddressRegisters)在保护模式下,存储器操作数所在的段的性质由一个称为“描述子”(Descriptor)的数据结构来描述。所有段的描述子存放在一个或几个称为“描述子表”的存储区中。为了寻址和定义这些描述子表的地址,80X86(80286以上)中包含有4个系统地址寄存器:全局描述子表寄存器GDTR中断描述子表寄存器IDTR局部描述子表寄存器LDTR任务状态段寄存器TR4)TR(TaskStateSegmentRegister)任务状态段寄存器是一个16位的寄存器。TS的功能是为了实现任务或进程之间的快速切换。每个任务都必须有一个与其相关联的TSS(任务状态段,TaskStateSegment)。现行的TSS由任务状态段寄存器TR来标识。TR7TLB测试状态DR7断点控制TR6TLB测试控制DR6断点状态TR5Cache测试控制DR5Intel保留TR4Cache测试状态DR4Intel保留TR3Cache测试数据DR3线性断点地址3测试寄存器DR2线性断点地址2DR1线性断点地址1DR0线性断点地址0调试寄存器 |
|