版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章微处理器的结构及存储器组成2.180x86和Pentium微处理器的结构2.2存储器的组织2.180x86和Pentium微处理器的结构2.1.180x86和Pentium微处理器的结构1.8086微处理器的结构
Intel8086(简称8086)是在Intel公司的8位微处理器8080与8085的基础上发展起来的一种16位微处理器。它的内部结构是16位的,数据总线也是16条;它能处理16位数据(具有16位运算指令,包括乘法和除法指令),同时也能处理8位数据;它能执行整套8080/8085的指令,所以它在汇编语言上与8080/8085是兼容的。图2-18086的功能结构
BIU负责与存储器接口,即8086CPU与存储器之间的信息传送,都是由BIU进行的。具体地说,BIU负责从内存的指定部分取出指令,送至指令流队列中排队,在执行指令时所需的操作数,也由BIU从内存的指定区域取出,传送给EU部分去执行。
EU部分负责指令的执行,取指部分与执行指令部分是分开的,于是在一条指令的执行过程中,就可以取出下一条(或多条)指令,在指令流队列中排队。在一条指令执行完以后就可以立即执行下一条指令,减少了CPU为取指令而等待的时间,提高了CPU的利用率和执行速度,降低了与之相配的存储器对采样速度的要求。图2-28086的执行方式在8080与8085以及标准的8位微处理器中,程序的执行是由取指和执行指令的循环来完成的,执行的顺序为取第一条指令,执行第一条指令;取第二条指令,执行第二条指令;……;直至取最后一条指令,执行最后一条指令。这样,在每一条指令执行完以后,CPU必须等待,直到下一条指令取出来以后才能执行。所以,它的工作顺序如图2-3所示。图2-3一般8位机的执行方式2.80486微处理器的结构80486是一种高性能全32位的微处理器。它把构成80386微机系统的主处理器、数值协处理器和一个具有8KB的Cache存储器集成在一块集成电路芯片中。沿用了指令流水线技术,采用RISC思想设计,使用静态高速RAM作为程序和数据共用的Cache,提高了存储器的读/写速度,浮点运算部件FPU集成在片内,提高了浮点运算的速度和能力,它支持多任务处理。80486微处理器的基本组成如图2-4所示,包括总线接口部件、指令预取部件、指令译码部件、控制和保护部件、算术与逻辑运算部件、浮点运算部件FPU、分段部件、分页部件和8KB的Cache部件。这些部件可以独立工作,也能与其他部件一起并行工作。在取指令和执行指令时,每个部件完成一项任务或某一操作步骤,这样既可同时对不同的指令进行操作,又可对同一指令的不同部分并行处理,即采用流水线工作方式。80486微处理器的特点有:(1)浮点运算器FPU、8KB程序与数据共用Cache和主CPU集成在同一芯片中,减少了外部数据传送环节,提高了浮点运算及数据处理的能力、速度和可靠性。(2)把分段部件和分页部件有机地结合在一起,建立起完整的存储器管理与保护机构,为存储器管理提供4级保护,对指令的执行进行测试与监督,保证指令的正确执行。(3)采用RISC思想设计,使80486既带有CISC类微处理器的特点,又具有RISC类微处理器的特色,与以往的CISC(80x86)微处理器兼容。(4)在总线接口部件中设有成组控制和Cache控制部件,支持CPU在成组传送周期几乎以每个时钟周期传送一个字(2个字节)的速度连续从主存或外部Cache存储器中选取指令和数据,送入内部Cache存储器。另外还设有总线大小控制部件,控制传送数据的宽度,同时提供数据传送时的奇偶控制。为了使宽总线达到最佳使用效果,在系统总线接口部件中配有写缓冲存储器。(5)由预取部件负责从内部Cache中取指令或数据。如果指令或数据不在内部Cache中,则从主存中读取,同时填入内部Cache。预取部件的数据通路为16字节(128位),使指令码和数据传送速度加快。预取指令队列为32字节,可存放更多的指令代码或数据,从而有效地加快了指令执行的速度。许多指令(如寄存器之间的数据传送、加减运算等)可在一个时钟周期内完成。图2-480486结构逻辑图(6)在内部Cache和浮点运算器FPU之间的内部通路采用64位(两个32位)数据线,使浮点数据的传送及运算速度加快。(7)Cache采用“写贯穿”(WriteThrough)方式,使写入数据不仅写入Cache存储器,同时还要写入主存储器,保证了Cache与主存数据的一致性。(8)采用单倍频时钟,简化了时钟电路,提高了CPU的速度。(9)除了内部Cache和FPU外,支持配置外部Cache和数值协处理器FPU,使系统的性能进一步提高。(10)在指令系统方面保持与80386兼容。除了包含80387的浮点运算指令外,还增加了6条新指令,即字节交换指令BSWAP、交换并相加指令XADD、比较并交换指令CMPXCH和Cache指令INVD、WBINVD、INVLPG。其中前3条可在系统软件和应用软件中使用,增强数据运算与处理能力;后3条只能在系统软件中使用,增强对内部Cache和TLB的管理。3.Pentium微处理器的结构图2-5Pentium体系结构示意图1)超标量流水线超标量流水线(SuperScalar)设计是Pentium处理器技术的核心。它由U和V两条指令流水线构成,如图2-6所示。每条流水线都拥有自己的ALU(算术逻辑单元)、地址生成电路和与数据Cache的接口。这种流水线结构允许Pentium在单个时钟周期内执行两条整数指令,比相同频率的486DX的CPU性能提高了一倍。
Pentium双流水线中的每一条流水线分为5个步骤,即指令预取、指令解码、地址生成、指令执行、回写。当一条指令走过预取步骤,流水线就可以开始对另一条指令进行操作。图2-6Pentium超标量流水线结构
Pentium是双流水线结构,可以一次执行两条指令,每条流水线执行一个。这个过程称为“指令并行”。在这种情况下,要求指令必须是简单指令,且V-流水线总是接受U-流水线的下一条指令。例如,在下述4条指令中
MOVAX,5INCBXMOVAX,5INCAX
前两条指令可以并行工作,而后两条指令则不行,它会产生结果的冲突,因为后两条指令都在对同一个寄存器AX进行操作。因而,Pentium的有效使用还必须借助于有适用的编译工具,能产生尽量不冲突的指令序列。2)独立的指令Cache和数据Cache80486片内有8KBCache,而Pentium则为两个8KB,一个作为指令Cache,另一个作为数据Cache,即双路Cache结构,如图2-7所示。图2-7Pentium双路Cache结构图中TLB的作用是将线性地址翻译成物理地址。指令Cache和数据Cache采用32×8的线宽(80486DX为16×8线宽),是对Pentium64b总线的有力支持。
Pentium的数据Cache有两个接口,分别通向U和V两条流水线,以便能在相同时刻向两个独立工作的流水线进行数据交换。当向已被占满的数据Cache写数据时,将移走一部分当前使用频率最低的数据,并同时将其写回主存,这个技术称为Cache回写技术。由于处理器向Cache写数据和将Cache释放的数据写回主存是同时进行的,所以,采用Cache回写技术可大大节省处理时间。指令和数据分别使用不同的Cache,使Pentium的性能大大提高。例如,流水线的第一个步骤为指令预取,在这一步中,指令从指令Cache中取出来,如果指令和数据合用一个Cache,指令预取和数据操作之间很有可能发生冲突。提供两个独立的Cache则可避免这种冲突并允许两个操作的并发执行。3)浮点操作
Pentium的浮点单元流水分为8级,浮点操作的执行过程分为8级流水,使每个时钟周期能完成一个浮点操作,甚至在一个时钟周期内能完成两个浮点操作。浮点单元流水线的前4个步骤同整数流水线相同,后4个步骤的前两步为二级浮点操作,后两步为四舍五入及写结果和出错报告。Pentium的FPU对一些常用指令如ADD、MUL和LOAD等采用了新的算法,同时,用电路进行了固化,用硬件来实现,提高了速度。4)分支预测循环操作在软件设计中使用十分普遍,而每次循环中循环条件的判断占用了大量的CPU时间。为此,Pentium提供一个称为分支目标缓冲器BTB(BranchTargetBuffer)的小Cache来动态地预测程序分支。当一条指令导致程序分支时,BTB记住这条指令和分支目标的地址,并用这些信息预测这条指令再次产生分支时的路径,预先从此处预取,保证流水线的指令预取步骤不会空置。BTB机制如图2-8所示。当BTB判断正确时,分支程序即刻得到解码。从循环程序来看,在进入循环和退出循环时,BTB会发生判断错误,需重新计算分支地址。在Pentium中,常用指令如MOV、INC、DEC、PUSH、POP、JMP、CALL(near)、NOP、SHIFT、NOT和TEST等改用硬件实现,不再使用微码操作,使指令的运行得到进一步加快。而其他的微码指令由于运行于双流水线上,速度也得到了提高。图2-8Pentium的BTB机制2.1.280x86和Pentium微处理器的寄存器结构1.8086微处理器的寄存器结构8086的寄存器结构如图2-9所示。它能处理16位数,AX、BX、CX和DX这4个寄存器均是16位的数据寄存器,用以暂存16位的操作数。其中AX为累加器,其他3个16位寄存器用以存放操作数,通常的用途如表2-1所示。图2-98086的寄存器结构表2-18086通用寄存器的用法寄存器通常用途AX字乘法、字除法、字I/OAL字节乘法、字节除法、字节I/O、转移、十进制算术运算AH字节乘法、字节除法BX转移CX串操作、循环次数CL变量移位或循环DX字乘法、字除法、间接I/O8086也能处理8位数。图2-9中的4个16位数据寄存器也可作为8个8位寄存器使用。8086中有4个16位的段寄存器,即CS(CodeSegmentRegister)、DS(DataSegmentRegister)、SS(StackSegmentRegister)、ES(ExtraSegmentRegister),使8086能在1MB的范围内对内存进行寻址。8086中的堆栈指针SP(StackPointer)用于确定在堆栈操作时,堆栈在内存中的位置。但在8086中SP还必须与SS(堆栈段寄存器)一起才能确定堆栈的实际位置。在8086中有3个16位寄存器,BP(BasePointerRegister)、SI(SourceIndexRegister)和DI(DestinationIndexRegister),寻址方式较多,寻找操作数灵活、方便。8086中的指令指针IP(InstructionPointer)是指向下一次要取出的指令,与CS寄存器相配合才能形成真正的物理地址。8086有一个状态标志寄存器,如图2-9(b)所示。
2.80x86和Pentium微处理器的寄存器结构80x86和Pentium微处理器的寄存器可以分为基本体系结构寄存器、系统级寄存器和调试与测试寄存器3类。其中基本体系结构寄存器和浮点寄存器应用程序可以直接访问,一般称作程序可见寄存器。其他寄存器在应用程序设计期间不能直接寻址,只有特权级为0级的程序才可以使用它们,一般称为程序不可见寄存器。80486和Pentium微处理器中包含的寄存器有8种:通用寄存器,段寄存器,指令指针寄存器,状态标志寄存器,控制寄存器,系统地址寄存器,调试与测试寄存器和浮点寄存器。1)通用寄存器通用寄存器共有8个,如图2-10所示。其中EAX、EBX、ECX和EDX可作为8位、16位或32位寄存器使用,ESI、EDI、EBP、ESP可作为16位或32位寄存器使用,作用如下:EAX:常用作累加器;EBX:常用作基址寄存器;ECX:常用作计数器;EDX:常用作数据寄存器;ESI:常用作源变址寄存器;EDI:常用作目的变址寄存器;EBP:常用作基址寄存器;ESP:常用作堆栈指针寄存器。图2-1080486通用寄存器2)段寄存器段寄存器有6个,每个16位,其中CS、DS、SS分别作为指令代码段、数据段和堆栈段寄存器,ES、FS和GS作为附加数据段寄存器。在实地址方式和虚拟8086方式下分别存放相应段的基地址;在保护方式下作为选择器,存放相应的选择符,如图2-11所示。每个段寄存器对应一个隐含不可访问的段描述符寄存器,存放由选择符寻址的描述符。选择符的高13位是段描述符表的地址(简称选择码),低3位表示段描述符的类型和特权标志。段选择符与段描述符寄存器如图2-12所示。图2-1180486段寄存器代码段寄存器数据段寄存器堆栈段寄存器附加段寄存器附加段寄存器附加段寄存器图2-12段寄存器与段描述符高速缓冲寄存器3)指令指针寄存器指令指针寄存器是一个32位的寄存器,如图2-13所示,用来存放当前代码段中下一条要执行指令的偏移量(或称偏移地址)。在实地址方式和虚拟8086方式下,作为16位指针寄存器使用;在保护方式下,作为32位指针寄存器使用。
IP3116150图2-1380486指令指针寄存器4)状态标志寄存器状态标志寄存器是一个32位的寄存器,实际使用了15位,用来存放微处理器的状态标志和控制标志。其中部分标志供系统使用,因此也称为系统标志。各位的符号如图2-14所示。图2-1480486状态标志寄存器
FLAGS是16位标志寄存器,由EFLAGS中的D15~D0组成,其中包含了两种标志:状态标志(S)、控制标志(C)。SF、ZF、PF、CF、AF和OF组成了状态标志,控制标志由DF、IF和TF构成。EFLAGS是32位标志寄存器,其中包含了3种标志:状态标志(S)、控制标志(C)和系统标志(X)。状态标志报告算术/逻辑运算指令执行后的状态;控制标志仅含一个标志DF,用于控制串操作指令的地址改变方向;系统标志用于控制I/O、屏蔽中断、调试、任务转换和控制保护方式与虚拟8086方式间的转换。图2-14给出了EFLAGS各位的标志名,共定义了15位14种标志。其中CF、PF、AF、ZF、SF、TF、IF、DF、OF属于8086的标志位;LF、RF是80286新增的标志位;VM是80386新增的;AC则是80486新增的。各个标志位的功能分述如下:(1)辅助进位标志AF(AuxitiaryCarryFlag)。在字节操作时,由低半字节(一个字节的低4位)向高半字节(一个字节的高4位)进位或借位;在字操作时,低位字节向高位字节有进位或借位,则AF=1,否则为0。这个标志用于十进制算术运算指令中。(2)进位标志CF(CarryFlag)。当结果的最高位(字节操作时的D7或字操作时的D15)产生一个进位或借位,则CF=1,否则CF=0。这个标志主要用于多字节数的加、减法运算。移位和循环移位指令也能够把存储器或寄存器中的最高位(左移时)或最低位(右移时)放入标志CF中。(3)溢出标志OF(OverflowFlag)。在算术运算中,带符号数的运算结果超出了8位或16位(带符号数能表达的范围),即在字节运算时结果大于+127或结果小于-128,在字运算时结果大于32767或结果小于-32768,此标志置位。溢出和进位是两个不同性质的标志,千万不能混淆了。例如,在字节运算中
MOVAL,64HADDAL,64H即 01100100 +01100100 11001000
D7位向前无进位,故运算后CF=0;但运算结果超过了+127,此时,溢出标志OF=1。又例如,在字节运算中
MOVAL,0ABHADDAL,0FFH即 10101011(-85) + 11111111(-1) 110101010
D7位向前有进位,故运算后CF=1;但运算的结果又不小于-128,此时,溢出标志OF=0。在字运算中
MOVAX,0064HADDAX,0064H即 0000000001100100+ 0000000001100100 0000000011001000D15位未产生进位,故CF=0;运算结果未超过 +32 767,故OF=0。但若有MOVAX,6400H
ADDAX,6400H即 0110010000000000+ 0110010000000000 1100100000000000
D15位未产生进位,故CF=0,但运算结果超过了+32 767,故OF=1。又例如:
MOVAX,0AB00HADDAX,0FFFFH即: 1010101100000000 +111111111111111111010101011111111D15位产生进位,故CF=1,但运算结果不小于 -32768,故OF=0。(4)符号标志SF(SignFlag)。它的值与运算结果的最高位相同。即结果的最高位(字节操作时为D7,字操作时为D15)为1,则SF=1;否则SF=0。由于在80X86中符号数是用补码表示的,所以SF表示了结果的符号,SF=0为正,SF=1为负。(5)奇偶标志PF(ParityF1ag)。若操作结果中“1”的个数为偶数,则PF=1,否则PF=0。这个标志可用于检查在数据传送过程中是否发生错误。(6)零标志ZF(ZeroFlag)。若运算的结果为0,则ZF=1,否则ZF=0。80x86还提供了三个控制标志,它们能由程序来置位和复位,以变更对处理器的操作。(7)方向标志DF(DirectionFlag)。若用指令置OF=1,则引起串操作指令为自动减量指令,也就是从高地址到低地址处理字符串;若使OF=0,则串操作指令就为自动增量指令,也就是从低地址到高地址处理字符串。(8)中断允许标志IF(Interrupt-enableFlag)。若指令中置IF=1,则允许CPU去接收外部的可屏蔽中断请求;若使IF=0,则屏蔽上述的中断请求,对内部产生的中断不起作用。(9)追踪标志TF(TrapFlag)。置TF标志,使处理进入单步方式,以便于调试。在这个方式中,CPU在每条指令执行以后,产生一个内部中断,允许程序在每条指令执行以后进行检查。(10)特权级标志IOPL是状态标志寄存器中的D13和D12位。其表示0~3级的4个I/O特权级,用于保护方式。只有当任务的现行特权级高于或等于IOPL时(0级最高,3级最低),执行I/O指令才能保证不产生异常。(11)任务嵌套标志NT是状态标志寄存器中的D14位。80486/80386/80286的中断和CALL指令可以引起任务转换。NT=1表示引起了任务转换,当前任务嵌套在另一任务内,这样,在执行IRET指令时,便返回父任务;NT=0表示没引起任务转换,执行IRET时是进行同任务内的返回,而不发生任务转换。该标志位用来控制被中断的链和被调用的任务。(12)恢复标志RF是状态标志寄存器中的D16位。该标志与调试寄存器的代码断点结合使用,以保证不重复处理断点。RF=1时,即使遇到断点或调试故障也不产生异常中断。在成功地执行每条指令后,RF将自动复位。80486在响应“断点异常”(中断)时,先将RF位置1,然后将EFLAGS压栈;在断点处理程序结束处,IRET指令将弹出具有RF=1的EFLAGS,恢复程序在断点位置的执行,从而保证了代码在断点只执行一次。(13)虚拟8086模式标志VM是状态标志寄存器中的D17位。VM=1表示工作在虚拟8086方式。该位只能以两种方式来设置,在保护方式下,由最高特权级(0级)的代码段的IRET指令来设置,或者由任务转换来设置。(14)对准检查标志AC是状态标志寄存器中的D18位。该位仅对80486有效。AC=1且CR0的AM位也为1,则进行字、双字或四字的对准检查。若处理器发现在访问内存时操作数未按边界对准(所谓对准,是指访问字操作数时从偶地址开始,访问双字数据时从4的整数倍地址开始,访问4字数据时从8的整数倍地址开始),则发生异常。对80386,AC位恒为0,不进行对准检查。
EFLAGS的低16位含有80286的全部标志,称为FLAGS标志寄存器。它对于执行8086/80286的代码是很有用的。5)控制寄存器控制寄存器为CR0~CR3共有4个,各32位,用来存放全局性与任务无关的机器状态,其标志符号如图2-15所示。与80386相比,80486的CR0增加了NE、WP、AM、NW和CD,CR3增加了PWT和PCD。图2-1580486控制寄存器(1)CR0用来存放系统控制标志或表示处理器的状态,定义了11位,其功能是:
PE:保护方式允许位。置1,进入保护方式;清0,进入实地址方式。
MP:监控协处理器位。置1,表示有协处理器。若在80486系统中运行80286或80386程序,该位置1;若运行80486程序,该位清0。
EM:模拟协处理器位。该位为1,表示软件模拟协处理器,这时若使用协处理器指令将产生协处理器无效异常中断;该位为0,允许协处理器指令使用实际的协处理器。在运行80286或80386程序时,该位置1;在80486SX系统中该位也必须置1。
TS:任务切换位。每次任务转换,该位置1。在解释浮点算术运算指令时,对该位进行测试。清除任务切换标志指令CLTS可将该位清0。
ET:处理器扩展类型标志。该位置1,表示配置80387;否则表示未配置。
NE:数值异常事故位。该位用来控制浮点运算中未被屏蔽的异常故障。该位置1,允许报告浮点数值错;该位清0且IGNNE输入有效,则不予以报告。当NE清0且IGNNE输入无效时,数值错将会使处理器停止运行,并等待一次中断。
WP:写保护位。该位用来净化80486的页写保护机构,即保护用户级的那些页。该位置1,禁止管理级的写操作写入用户级的页上;该位清0,管理级可向用户级的页进行写入。
AM:对准屏蔽位。该位与状态标志AC配合使用,控制对数据的对准校验。该位置1且AC也置1时,对用户级(CPL=3)访问的存储器单元进行对准校验,即边界检查,否则不校验。
NW:不透明写位。该位也称为不是写贯穿,用来控制Cache操作。该位清0,所有命中Cache的写操作将按写贯穿方式写入Cache,同时写入主存;该位置1且CD位也置1,只写入Cache存储器,而不写入主存。
CD:允许Cache位。该位用来控制是否使用片内Cache。该位清0,允许使用内部Cache,这时若不命中,可对片内Cache存储器填充写入;该位置1,又不命中Cache时不能对Cache填充写入。若访问Cache命中,则Cache正常运行;若要彻底禁止Cache,可用专门的指令INVD或WBINVD对片内Cache刷新。刷新就是使片内Cache中的所有数据无效即清0。
PG:允许分页位。该位置1,允许分页;该位清0,禁止分页。(2)CR1未用。(3)CR2为页故障线性地址寄存器,用来保存最后出现页故障的32位线性地址。只有当CR0中的PG位为1时,CR2才有意义。(4)CR3为页目录基址寄存器。其中高20位存放页目录表的物理基地址。在低12位中用2位作为标志位,其余10位未用。标志位的作用是:
PCD:禁止页高速缓冲位。该位置1,不对页进行高速缓冲操作。在不分页情况下的总线周期,该信号由PCD引脚输出,控制外部二级Cache的高速缓冲操作。
PWT:写贯穿位。在80486内部Cache中使用的是“写贯穿”方式,而外部二级Cache有的使用“写贯穿”方式,有的既可使用“写贯穿”方式又可使用“写回”方式。PWT=1,使片外二级Cache采用“写贯穿”方式,否则采用“写回”方式。“写贯穿”就是向Cache写入数据的同时,也写入到主存中;“写回”是只有当Cache中的某一存储块被刷新时,才把这一存储块写回到主存中去。6)系统地址寄存器在80486微处理器中设置了4个系统地址寄存器,如图2-16所示。其作用也与80386基本相同,用来在保护方式下管理4个系统表,即引用80486在保护方式下所需要的段表信息。由于只能在保护方式下使用,因此又称为保护方式寄存器。图2-1680486系统地址寄存器(1)全局描述符表寄存器GDTR,一个48位寄存器,用来存放全局描述符表GDT的32位线性基地址和16位的界限值,在全局描述符表中不仅包括有操作系统使用的描述符,而且还有所有任务使用的公用描述符。(2)中断描述符表寄存器IDTR,一个48位寄存器,用来存放中断描述符表IDT的32位线性基地址和16位的界限值。(3)局部描述符表寄存器LDTR,一个16位寄存器,用来存放局部描述符表LDT的16位选择符。另外还有一个隐含的描述符高速缓冲寄存器,用来存放LDT表描述符。(4)任务状态寄存器TR,一个16位寄存器,用来存放任务状态段TSS的16位选择符。与之相应,也有一个隐含的描述符高速缓冲寄存器,用来存放任务状态段TSS的描述符。7)调试与测试寄存器(1)调试寄存器。该类寄存器有8个,各32位,如图2-17(a)所示,表示为DR0~DR7。其中DR0~DR3用作线性断点地址寄存器,可保存4个断点地址,DR6用作断点状态寄存器,用来设置若干个状态标志,其中低4位分别表示4个断点处的调试状态。若进入调试状态,由硬件置1;退出调试状态时应由软件清0。另外还有3位,即BT、BS和BD,其中BT是与任务状态段中调试自陷位T相关的状态标志位,BS是与状态标志寄存器中的自陷标志TF相关的状态标志位,BD是当内部电路仿真使用的下一条指令对8个调试寄存器中的任一个进行读/写时,置1。DR7是断点控制寄存器,用来设置控制标志、控制断点的设置、设置条件、断点地址的有效范围以及是否进入异常中断等。DR4~DR5为Intel公司保留。图2-17调试与测试寄存器(a)调试寄存器;(b)调试与测试寄存器(2)测试寄存器。该类寄存器有4个,各32位,如图2-17(b)所示,表示为TR3~TR7。其中TR3~TR5用于片内Cache测试。TR6~TR7用来控制分页部件中的转换旁视缓冲存储器TLB的工作。TR6作为测试命令寄存器,用来存放测试控制命令,TR7作为数据寄存器,用来存放转换旁视缓冲存储器测试的数据。8)浮点寄存器80486微处理器内部的浮点运算器是用于浮点运算的,其内部设有相应的寄存器,包括8个80位通用数据寄存器,一个48位指令指针寄存器、一个48位数据指针寄存器,一个16位控制字寄存器,一个16位状态字寄存器和一个16位标记字寄存器。
3.总线接口部件总线接口部件用来与外部主存、外围设备等部件进行数据传送。80486微处理器内部设有高速算术/逻辑运算器、浮点运算器和Cache存储器,配置了外部Cache,这就要求其能与外存、外设高速成批地进行数据传送,故此对总线接口部件的功能有更高的要求。它在内部通过3条32位总线与内部Cache和指令预取部件连接;在外部通过多种电路与系统总线连接,根据优先级别协调数据输入/输出、指令预取、Cache行的填充等工作。为了支持片内Cache的连贯性,配置了总线监视功能。总线接口部件中各部分的功能是:(1)总线大小(也称为宽度)控制。用来控制数据总线的位数,即按32位、16位或8位进行数据传送。(2)奇偶校验控制。数据传送时进行奇偶校验,写操作时产生偶校验,读操作时实施偶校验。如果出错,给出错误信息。(3)地址驱动器。提供所有地址信号A31~A2和字节允许信号BE3~BE0的功率驱动,其中高28位地址为双向信号。(4)写缓冲存储器。由于外部数据线是32位,为了传送可靠,在接口部件中设有缓冲存储器,以等待总线全部空闲时再进行写入操作。(5)数据总线收发器。为32位,用来控制总线数据的接收与发送。(6)总线请求序列发生器。也就是总线周期与总线控制电路,用来产生总线周期的时序及控制信号。其中包括成组和非成组传送、总线请求仲裁、浮点运算、中断以及复位等操作所需要的定时控制信号。(7)成组传送控制。用来控制内部Cache等部件与外部主存之间的成批数据传送。(8)Cache控制。Cache控制电路与成批传送控制配合,对系统Cache存储器实施控制。
4.标志操作指令80x86中有一部分指令是专门对标志寄存器或标志位进行操作的。包括四条标志寄存器传送指令和标志位操作指令。1)标志寄存器传送指令(1)LAHF(LoadAHwithFlags)
格式:LAHF
功能:把标志寄存器的低8位(包括符号标志SF、零标志ZF、辅助进位标志AF、奇偶标志PF和进位标志CF)传送至AH的指定位,即相应地传送至位D7、D6、D4、D2和D0。(位D5、D3、D1的内容没有定义),如图2-18所示。这条指令本身不影响这些标志位。图2-18LAHF指令示意图(2)SAHF(StoreAHintoFlags)
格式:SAHF
功能:这条指令与上一条的操作刚好相反,它是把寄存器AH的指定位传送至标志寄存器的低8位的SF、ZF、AF、PF和CF标志。因而这些标志的内容就要受到影响,这取决于AH中相应位的状态,但这条指令并不影响溢出标志OF、方向标志DF、中断屏蔽标志IF和追踪标志TF,即不影响标志寄存器的高位字节。(3)PUSHF(PushFlags)
格式:PUSHF
功能:把整个标志寄存器FLAGS推入至栈指针所指的栈的顶部,同时修改栈指针,即SP-2→SP。
这条指令不影响标志位。(4)POPF(POPFlags)
格式:POPF
功能:把现行栈指针所指的一个字,传送给标志寄存器FLAGS,同时相应地修改栈指针,即SP+2→SP。这条指令执行后,80X86的标志位就取决于原栈顶部的内容。
PUSHF和POPF这两条指令可保存和恢复标志寄存器。在子程序调用和中断服务中可利用这两条指令来保护和恢复标志位。另外,这两条指令也可以用来改变追踪标志TF。在80X86的指令系统中,没有直接能改变TF标志的指令,故若要改变TF标志,先用PUSHF指令把标志位入栈,然后设法改变栈顶存储单元的D8位(把整个标志看成一个字),再用POPF指令恢复。这样其余的标志不受影响,而只有TF标志按需要改变了。(5)PUSHFD
格式:PUSHFD
功能:PUSHFD为标志寄存器入栈指令,用于将32位EFLAGS的内容压入堆栈。操作后,使(E)SP减4。(6)POPFD
格式:POPFD
功能:POPFD为标志寄存器出栈指令,用于将栈顶32位数弹出到EFLAGS中。说明:①EFLAGS的恢复标志RF(D16)和虚拟8086方式标志VM(D17)不受POPF和POPFD指令的影响;I/O特权级标志IOPL(D13、D12)只有在当前代码段的特权级为0时才受影响;中断标志IF(D9)只有在当前特权级至少等于I/O特权级时才受影响。②当压入堆栈的是8位数时,执行上述指令(其操作数宽度属性隐含为16位或32位)应对8位带符号数扩展到16位或32位。2)标志位操作指令80x86有7条直接对标志单独进行操作的指令。其中三条是针对进位标志CF的,两条是针对方向标志DF的,两条是针对中断标志IF的。(1)CLC(ClearCarryFlags)
格式:CLC
功能:标志CF清0,即0→CF。(2)CMC(ComplementCarryFlags)格式:CMC功能:标志CF取反,即若CF=0,则1→CF;若CF=1,则0→CF。(3)STC(SetCarryFlags)格式:STC功能:标志CF置1,即1→CF。(4)CLD(ClearDirectionFlag)格式:CLD功能:标志DF清0,即0→DF,则在串操作指令时,使地址增量。(5)STD(SetDirectionFlag)格式:STD功能:标志DF置1,即1→DF,则在串操作指令时,使地址减量。(6)CLI(ClearInterruptenableFlag)
格式:CLI
功能:中断允许标志IF清0,即0→CF,于是在80X86系统中,外部装置送至可屏蔽中断INTR引线上的中断请求,CPU就不予以响应,即中断屏蔽。但此标志对于非屏蔽中断NMI引线上的请求以及软件中断都没有影响。(7)STI(SetInterrupt-enableFlag)
格式:STI
功能:标志IF置1,即1→IF,则CPU就可以响应出现在INTR引线上的外部中断请求。上述7条指令除对指定的标志位进行操作外,对其他标志位皆无影响。2.2存储器的组织2.2.1基本概念1.常用的术语1)位(bit)
计算机中存储信息的基本单位是一个二进制位,简称位,是计算机所能表示的最基本最小的数据单元,英文为bit,可用小写字母b表示。一位可存储一位二进制数,它只能有两种状态,即“0”和“1”。由若干个二进制位的组合就可以表示各种数据、字符等。2)字节(Byte)
相邻的8位二进制数称为一个字节(1Byte=8bit),英文为Byte,可用大写字母B表示。一个字节由8位二进制数组成,其位编号自左至右为b7、b6、b5、b4、b3、b2、b1、b0。一个字节占用一个存储单元。字节是微型机中存取信息的基本单位,长度是固定的,但不同微型机的字长是不同的。8位微机的字长就等于1个字节,而16位微机的字长等于2个字节,32位微机的字长等于4个字节。为了表示方便,常把1个字节定为8位,把一个字(Word)定为16位,一个双字(DoubleWord)定为32位。3)字(Word)和字长字是计算机内部进行数据处理的基本单位,通常它与计算机内部的寄存器、运算装置、总线宽度相一致。一个字是16位,其位编号自左至右为b15~b0且占用两个存储单元。计算机的每一个字所包含的二进制位数称为字长。不同类型的微型计算机有不同的字长,例如,Intel的8080、8085为8位,Intel的8086和80286的字长为16位,Intel的80386和80486的字长为32位。一个计算机的字长与它能表达数的范围不是一回事,因为可以用单字长,也可以用多字长表示数。4)双字和四字双字:一个双字有32位,其位编号自左至右为b31~b0。一个双字占用4个存储单元。四字:一个四字有64位,其位编号自左至右为b63~b0。一个四字占用8个存储单元。5)内存单元的编址为了正确地区分不同的内存单元,给每个单元分配一个存储器地址,地址从0开始编号,顺序递增1。机器中的地址是用无符号二进制数表示,可简写为十六进制数形式。一个存储单元中存放的信息称为该单元的内容。例如,2号单元中存放了一个数字8,则表示为:(2)=8。对于字、双字、四字数据类型,由于它们每个数据都要占用多个单元,访问时只需给出最低单元的地址号即可,然后依次存取后续字节。习惯上,对于字、双字、四字数据类型,其低地址中存放低位字节数据,高地址中存放高位字节数据,这就是所谓的数据“逆序存放”。例2-1内存现有以下数据:地址:0123 45数据:12H34H45H67H89H0AH则对于不同的数据类型,取到1号单元的数据是:(1)字节=34H(1)字=4534H(1)双字=89674534H
2.分段与分页结构1)分段结构存储器的分段管理是微型机常用的一种存储管理方法。8086存储管理、80486和Pentium工作在实地址方式时的存储管理,均采用分段管理的方法。这种方法既解决了其字长为16位的机器(如以8086为CPU的PC机)访问1M字节存储空间的矛盾,也便于程序在内存中重定位。采用分段管理后,一个内存单元地址要用段基地址和偏移量两个逻辑地址来描述,表示为 段基址:偏移量其段基址和偏移量的限定、物理地址的形成要视CPU工作模式决定。2)分页结构在80486/Pentium保护模式中,存储器在逻辑上仍采用分段式结构。存储器最多可以由16384(214)个段组成,每个段最大可达4GB。从程序设计者角度看,整个存储空间可高达64GB,每一段为相连地址空间单元。存储器分段有利于程序与数据间的隔离及任务之间的隔离和保护。图2-19存储器映像
3.存储器映像一般情况下,存储器被划分为3部分:程序暂驻区(TPA)、系统内存区和扩展存储区(XMS),其映像见图2-19。通常把最低端的1MB叫做常规内存,因为每个设计成实模式的程序都在这个区域里完成。程序暂驻区长度为640KB,其中驻留操作系统的核心部分、其他控制计算机的程序、当前激活或非激活的应用程序等,应用程序在执行时就存放在程序暂驻区。系统内存区长度为384KB,主要包括BIOSROM、显示RAM、硬盘控制器ROM等,另外还有一块空闲内存,在80386以上的机器中,可以利用CPU的换页功能,把1MB以上的内存映射到这块区域,使DOS也可以使用这块空间。基于80286以上的计算机可以包含扩展存储区,使存储容量远远大于1MB,只有在保护模式下才可以访问扩展存储区。这块区域的管理问题DOS无法解决,它要靠其他的内存管理程序,如可以使用扩展内存管理程序HIMEM.SYS。该程序应该通过CONFIG.SYS中的DEVICE命令说明,并在系统执行CONFIG时被加载到内存,然后由它监控扩展内存的使用情况。2.2.2存储器的组织8086微处理器只能工作在实模式方式下,而80486和Pentium微处理器可在实模式或保护模式两种方式下工作。
1.8086的存储器组织8086有20条地址引线,它的直接寻址能力为220B(即1MB)。所以,在一个8086组成的系统中,可以有多达1MB的存储器。这1MB逻辑上可以组织成一个线性矩阵,地址从00000到FFFFF。给定一个20位的地址,就可以从这1MB中取出所需要的指令或操作数。但是,在8086内部,这20位地址是如何形成的呢?如前所述,8086内部的ALU能进行16位运算,有关地址的寄存器如SP、IP,以及BP、SI、DI等也都是16位的,因而8086对地址的运算也只能是16位。这就是说,对于8086来说,各种寻址方式,寻找操作数的范围最多只能是64KB。所以,整个1MB存储器以64KB为范围分为若干段。在寻址一个具体物理单元时,必须要由一个基地址再加上由SP、IP、BP、SI或DI等可由CPU处理的16位偏移量来形成实际的20位物理地址。这个基地址就是由8086中的段寄存器,即代码段寄存器CS、堆栈段寄存器SS、数据段寄存器DS以及附加段寄存器ES中的一个来形成的。在形成20位物理地址时,段寄存器中的16位数会自动左移4位,然后与16位偏移量相加,如图2-20所示。图2-208086物理地址的形成每次在需要产生一个20位地址的时候,一个段寄存器会自动被选择,且能自动左移4位再与一个16位的地址偏移量相加,以产生所需要的20位物理地址。每当取指令的时候,选择代码段寄存器CS,再加上由IP所决定的16位偏移量,计算得到要取指令的物理地址。每当涉及到一个堆栈操作时,选择堆栈段寄存器SS,再加上由SP所决定的16位偏移量,计算得到堆栈操作所需要的20位物理地址。每当涉及到一个操作数,选择数据段寄存器DS或附加段寄存器ES,再加上16位偏移量,计算得到操作数的20位物理地址。这里,16位偏移量是包含在指令中的直接地址,或者是某一个16位地址寄存器的值,或者是指令中的位移量加上16位地址寄存器中的值等等,这取决于指令的寻址方式。8086系统中,存储器的访问如图2-21所示。在不改变段寄存器值的情况下,寻址的最大范围是64KB,所以,若有一个任务,它的程序长度、堆栈长度以及数据区长度都不超过64KB,则可在程序开始时,分别给DS、SS、ES置值,然后在程序中就可以不再考虑这些段寄存器,程序就可以在各自的区域中正常地进行工作,若某一个任务所需的总的存储器长度(包括程序长度、堆栈长度和数据长度等)不超过64KB,则可在程序开始时使CS、SS、DS相等,程序也能正常工作。图2-218086的存储器结构上述存储器分段方法,对于要求在程序区、堆栈区和数据区之间隔离这种任务时是非常方便的。这种存储器分段方法,对于一个程序中要用的数据区超过64KB,或要求从两个(或多个)不同区域中去存取操作数,也是十分方便的。只要在取操作数以前,用指令给数据段寄存器重新赋值就可以了。这种分段方法也适用于程序的再定位要求。通常情况下,要求同一个程序能在内存的不同区域中运行,而不改变程序本身,这在8086中是可行的。只要程序中的转移指令都使用相对转移指令,而在运行这个程序前设法改变各个段寄存器的值就可以了。如图2-20所示,根据指令,BIU会自动完成所需要的访问存储器的次数。
2.80486的存储器管理1)存储器管理部件存储器管理部件包括分段部件、分页部件和高速缓冲存储器Cache。在80486微处理器中设有6个16位段寄存器,用来实现对主存的分段管理。在实地址方式下,段寄存器用来存放段基址,其内容左移4位与偏移地址相加,产生线性地址。在保护方式下,段寄存器用来存放选择符。分段部件通过段描述符把逻辑地址转换成32位线性地址。为了保证数据安全,分段部件与分页部件结合,为存储器管理提供4级保护。分页部件是分段部件之后的又一级管理部件。如果分页禁止,则线性地址就是物理地址;如果允许分页,则由分页部件再将线性地址转换成物理地址。80486中的分页部件也提供二级分页管理。通过分页管理可寻址80486微处理器的全部4GB地址空间,通过分段分页管理可实现64TB虚拟存储器的映像管理。片内8KB高速缓冲存储器Cache采用4路相连映像方式,用来存储待执行的程序和数据,即作为外部主存的副本。它通过16字节宽的总线与指令预取部件连接,以缩短指令和数据的传送时间。它通过64位数据线与整数部件、浮点运算器和分段部件连接并与外部采用成组传送方式,以提高数据传送的速度。为了保持与主存的一致性,片内Cache采用“写贯穿”方式进行写入操作。2)执行部件执行部件包括指令预取部件、指令译码器、控制和保护部件、整数部件以及浮点运算器。指令预取部件由内部Cache取出指令或数据,送入指令队列排队,等候执行。指令队列有32个字节。只要队列空,指令预取部件就自动由Cache中取指令或数据。如果不能命中,则从主存中取,同时填充Cache存储器。指令译码器由指令队列获取指令代码,并对其译码,然后由微程序控制器ROM中输出微代码序列,控制该指令的执行,同时进行保护检查。整数部件包括算术/逻辑运算部件ALU、桶形移位器和寄存器组。在ALU中设有高速加法器,可实现高速算术/逻辑运算、数据传送等操作。浮点运算器FPU可实现各种浮点数值运算、超越/非超越函数运算等操作。3)存储器管理80486微处理器设有32位地址线(A31~A2和EB3~EB0),外部物理存储器空间为232B=4GB,内部采用分段分页管理,可实现64TB虚拟存储器的映像管理,另外设有8KB片内Cache存储器。在工作方式方面,除具有实地址方式和保护方式之外,另有一种平台管理方式。(1)实地址方式。80486微处理器加电开机或复位时,初始化为实地址方式。在这种方式下,它与8086具有相同的存储器空间和管理方式。最大寻址空间为1MB,物理地址等于段地址左移4位与偏移地址相加所得的值。80486是32位微处理器,但在实地址方式下的默认值为16位,为了能在实地址方式下访问32位寄存器或者寻址32位的存储器单元,编程时须使用指令前缀。(2)分段管理。在分段管理方式中,段寄存器用来存放选择符,且每个段寄存器对应一个隐含不可访问的段描述符寄存器。选择符与描述符表的关系如图2-22所示。图2-22选择符与描述符表在段选择符中,RPL表示特权级别,即0~3级。TI是选择位,当TI=0时,选择全局描述符表;当TI=1时,选择局部描述符表。高13位是描述符表地址,选择8KB描述符表中的某一个描述符。GDTR和LDTR是系统地址寄存器,其中GDTR称为全局描述符表寄存器,用来存放全局描述符表GDT的32位基地址和界限值;LDTR称为局部描述符表寄存器,用来存放局部描述符表LDT的32位基地址和界限值。在80486微处理器中设有多种描述符,其中最常用的一种格式如图2-23所示,可用作应用代码段描述符、数据段描述符或一些系统专用段描述符,其中包括32位段基址、20位段界限值和一些属性标志位,主要作用可概括如下:图2-23段描述符
G:粒位,用来说明段界限值,以字节为单位,还是以页(4KB)为单位。G=0,表示以字节为单位;G=1,表示以页为单位。若G=0,20位段界限值所表示的最大范围为1MB(220B);若G=1,段界限位所表示的最大范围为4GB(220×4KB)。
S:用来表示一个给定段是一个系统段还是应用程序代码段或者数据段。S=0,表示是系统段;S=1,表示是应用程序代码段或者数据段。
D:只能用在程序代码段描述符中,用来表示代码段中缺省说明的操作数的长度和有效地址长度。D=1,表示使用的是32位操作数和32位有效地址;D=0,表示使用的是16位操作数和16位寻址方式。
P:段存在位。若P=0,表示所要使用的段不存在;若P=1,表示所要使用的段存在。当一个段描述符的选择符装入段寄存器时,若段存在位被清0,将产生一个段不存在异常事故。
DPL:特权级标志位,用来定义段的特权级,用以实现段保护。
AVL:系统软件可使用位。
TYPE:类型位,表示描述符的类型,但在不同的描述符中有着不同的含义。对于代码段/数据段来说,其含义如表2-2所示。其中,数据/堆栈段TYPE的低3位表示为E、W、A,代码段TYPE的低3位表示为C、R、A。E表示向下扩展,W表示允许写,A表示存取操作,C表示相容,R表示允许读。对于系统段/门描述符,TYPE的含义如表2-3所示。表2-2代码段/数据段TYPE的定义TYPE(数据/堆栈段)说明TYPE(代码段)说明编号EWA编号EWA0000只读8000只执行1001只读,存取操作9001只执行,存取操作2010读/写A010执行/读3011读/写,存取操作B011执行/读,存取操作4100只读,向下扩展C100只执行,相容5101只读,向下扩展,存取操作D101只执行,相容,存取操作6110读/写,向下扩展E110执行/只读,相容7111读/写,向下扩展,存取操作F111执行/只读,相容,存取操作表2-3系统段/门描述符类型TYPE说明TYPE说明0保留B80486CPU任务状态段忙2局部描述符表C80486CPU调用门8保留D保留980486CPU任务状态段有效E80486CPU中断门A保留F80486CPU自陷门段描述符表是由段描述符构成的一个阵列,可有多种类型,如全局描述符表GDT、局部描述符表LDT、中断描述符表IDT以及任务状态段TSS等,分别由相应的系统地址寄存器指示其起始地址。其中最基本最常用的是全局描述符表GDT和局部描述符表LDT,如图2-22所示,其中第0单元没有使用。分段部件的作用是将逻辑地址转换成线性地址。其过程如图2-24所示。首先根据选择符从相应的段描述符表中取出段描述符,再将段描述符中给出的段基址与逻辑地址中的偏移量相加,即可得到线性地址。如果分页禁止(即不分页),那么线性地址就是所需要的物理地址。如果分页,再由分页部件将线性地址转换成物理地址。图2-24段转换过程(3)分页管理。分页管理中要涉及页表、页目录表和页转换,涉及段页地址转换和转换旁视缓冲存储器TLB。
页表、页目录表及页转换:在80486微处理器中,将4GB物理存储器空间按4KB为一页,分为1048576个页;通过内部寄存器和两级页表进行管理。从0开始,每一组连续相邻的1024个页为一个低级管理单位。每一页有一个起始地址(低12位全为0),1024个地址集中排列存放,构成一个页表,其中每一项称为一个页表项。每个页表项占4个字节,整个页表占4KB空间,由10位地址与之映像。在低级管理单位的上面是高级管理单位,对1024个低级管理单位实施管理。每一个页表有一个起始地址(低12位全为0),1024个地址集中排列存放,构成页目录表,其中每一项称为一个页目录项。每个页目录项占4个字节,整个页目录表占4KB空间,由10位地址与之映像。页目录表中存放的页表项的高20位地址由控制寄存器CR3提供,页表、页目录表及其转换过程如图2-25所示。图2-25页表、页目录表及其转换过程页转换过程中,分段部件给出32位线性地址。其中高10位与CR3中给出的页目录表的20位基地址相加(最低2位为0,共32位),指示某一页目录项。从中取出20位地址作为页表基地址,与线性地址中的中间10位相加(最低2位为0,共32位),指示某一页表中的某一项。这个20位地址再作为页基址(也称为页框地址),与线性地址中的低12位偏移量相加,产生指向某一存储单元的32位物理地址。由于页和页表的起始地址都是从低12位全为0的单元开始的,因此在页表和页目录表中存放高20位有效,低12位可作为状态特征位或保护控制位。其中页表中的页表项格式如图2-26所示。各项含义如下:
P:存在位,表示页或页表是否在物理存储器中。P=1,表示页或页表在物理存储器中,该项地址可用于地址转换;P=0,与之相反。
R/W:读/写位,表示可读或者可写,用于页保护。
U/S:用户/管理员程序位,表示用户或管理员程序可以使用,用于页保护。
PWT:写贯穿位,用于Cache写控制。对于片外二级Cache,PWT置1,选择写贯穿方式;PWT清0,选择写回方式。片内Cache采用写贯穿方式。图2-26页表项格式位0:存在位;位1:读/写位;位2:用户/管理程序位;位3:页透明写;位4:页Cache控制;位5:被访问位;位6:脏位;位7:保留;位8:保留;位9~11:系统设计人员可用位
PCD:页Cache禁止位,用于分页高速缓冲存储控制。若PCD置1,内部Cache禁止。
A:被访问位,表示对该页目录项或页表项涉及到的页面是否正在进行读/写操作。当访问某一页时,该位置1,并保持直到软件清0。
D:脏位,也称为写标志位。当对某一页写入时该位置1,并保持直到软件清0。
AVAIL:系统设计人员可用位。图2-27段页地址转换分段管理可实现由逻辑地址到线性地址的转换,分页管理中能实现由线性地址到物理地址的转换,二者结合起来即可实现由逻辑地址到物理地址的全部转换过程,如图2-27所示。首先根据选择符在段描述符表中取段描述符,将其中的段基址与偏移量相加,求出线性地址。然后将线性地址按二级页表转换,取出页基地址(页框),再与偏移量相加,即可求出物理地址。在80486微处理器的分页部件中,设有一个称为转换旁视缓冲存储器TLB的高速缓冲存储器,用来存放最近经常使用的页表项。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年不同类型桥梁的设计方法
- 2025年高职机械制造(液压传动技术)试题及答案
- 2025年高职建筑设计(建筑创意设计)试题及答案
- 2025年大学二年级(医疗器械与装备工程)装备应用阶段测试题及答案
- 2025年中职烟草栽培与加工(烟草加工工艺)试题及答案
- 2025年大学第二学年(酿酒技术)酿酒工艺模拟测试试题及答案
- 2025年高职第一学年(制冷与空调技术)中央空调安装调试阶段测试试题及答案
- 2025年大学新能源发电工程(光伏运维)试题及答案
- 2025年中职建筑施工技术(混凝土施工)试题及答案
- 2025年大学制浆技术(制浆工艺)试题及答案
- 中国药物性肝损伤诊治指南(2024年版)解读
- 基层党建知识测试题及答案
- DG-TJ08-2021-2025 干混砌筑砂浆抗压强度现场检测技术标准
- 鼻窦炎的护理讲课课件
- 肠系膜脂膜炎CT诊断
- 体外膜肺氧合技术ECMO培训课件
- 老年医院重点专科建设方案
- 银行解封协议书模板
- 超星尔雅学习通《学术规范与学术伦理(华东师范大学)》2025章节测试附答案
- GB 17440-2025粮食加工、储运系统粉尘防爆安全规范
- 《绿色农产品认证》课件
评论
0/150
提交评论