一、系统寄存器 1。EFLAGS寄存器 存放systemflags和IOPL; 控制任务切换和模式切换,处理终端,指令追踪; 2。控制寄存器(CR0,CR2,CR3,CR4) 控制系统级操作; 支撑操作系统某些特性; 3。GDTRLDTRIDTR 记录了GDTLDTIDT表的线性基址和大小; 4。任务寄存器(taskregister) 当前任务的线性地址; 当前任务TSS的的大小; 5。Modelspecificregisters(MSRs) 主要用于操作系统或程序执行过程; 6。调试寄存器(debugregisters)(DR0DR7):用于设置断点 注:多数系统限制应用程序对系统寄存器的访问(除了EFLAGS);程序运行在特权级0时,可以更新系统寄存器的值; 7。IA32e(64位扩展技术)GDTRLDTRTR被扩充到64EFLAGES扩充为RFLAGS;CROCR4被扩充到64控制IA32emode指令的MSRs (1)IA32KernelGSbase (2)IA32LSTAR (3)IA32SYSCALLFLAGMASK (4)IA32STARCS 需要的小伙伴私信内核领取二、内存管理相关的寄存器(GDTR,LDTR,IDTRTR) 1。GDTR(GlobalDescriptorTableRegister,全局符号表寄存器) (1)基址(保护模式:32位;IA32e模式:64bits)GDT表最大size(16bit),基址是全局符号表GDT的地址; (2)LGDT、SGDT分别load和storeGDTR寄存器; (3)计算机刚启动或者处理器重置之后,基址被设置为0,limit设置为0FFFFH;设置基址的值是保护模式下初始化处理器的一部分; 2。LDTR(LocalDescriptorTableRegister,本地符号表寄存器) (1)段选择器(16bits)基址(保护模式:32IA32e模式:64bits)segmentLimitLDT的属性;基址是LDT表的基础地址,SegmentLimit表明了段字节数目; (2)LLDT和SLDT指令分别load和storeLDTR寄存器;GDT中存在LDT表的段描述符,LLDT指令loadsegmentselector到LDTR时,基址和LDT属性也自动被load到LDTR中; (3)任务切换时,新任务的段选择器、段基址、LDT表属性会自动被加载到LDTR中; (4)计算机上电或者处理器重置时,LDTR中的segmentselector、baseaddress分别被置为0和0FFFFH 3。IDTR(InterruptDescriptorTableRegister,中断符号表寄存器) (1)baseaddress(保护模式:32IA32e模式:64bits)tablelimit(16bit),基址指定了IDT表的地址,tablelimit说明了IDT表的大小; (2)LIDT和SIDT命令分别负责IDTR寄存器的loadstore操作; (3)计算机刚上电或者处理器reset时,基址设置为0,limit设置为0FFFFH;LDTR初始化是处理器初始化的一部分; 4。TR(TaskRegister,任务寄存器) (1)segmentselector(16bit,段选择器)baseaddress(保护模式:32位;IA32e模式:64bits)segmentlimit当前任务TSS段属性描述符;(基址是TSS段基址;segmentlimit限制了TSS大小) (2)GDT表中记录了TSS段描述符; (3)LTR和STR分别负责TR寄存器的load和store操作;计算机上电或者处理器重置时,baseaddress置为0,segmentlimit设置为0FFFFH; (4)发生任务切换时,自动调用LTR,将新任务的段选择器、基址、描述等load到TR寄存器中;三、控制寄存器(CR0CR4,CR8) 1。一般约定 (1)CRO和CR4的3263bit预留,必须全为0;CR0和CR4高32位任意一位非0会触发 (2)CR2的所有64bits均可被软件读写; (3)CR3的40bit51bit预留,必须为0; (4)CR8仅仅在64bit模式下可以使用; 2。控制寄存器CR0:systemcontrolflags,控制操作模式和处理器状态;CR1:预留CR2:pagefault线性地址(导致页错误的线性地址)CR3:页全局目录的地址PCDPWT(控制页表在cache中的缓存),使用物理地址扩展时,CR3寄存器包含页表目录表的指针;IA32e模式下,CR3寄存器记录PML4表的基址;CR4:包括系统扩展相关的通过mov指令读写该寄存器的值;CR8:提供对TaskPriorityRegister(TPR)寄存器的读写访问;64bit模式下才可以使用;指定了操作系统用来控制可中断处理器的外部中断级别; 3。控制寄存器中的标识PG(bit31ofCR0):Paging,置位:启动分页机制;清除:disable分页机制,所有线性地址作为物理地址;当PE没有置位时,PGflag没有效果;PGflag设置,PEflag没有置位时,会导致CD(bit30ofCR0):CacheDisable,当CD和NWflags被清0时,启用cache机制(可以缓存整个内存系统数据);CD标识设置后,缓存满足一下限定表;CDflags置位后,处理器不可访问访问、更新NW(bit29ofCR0):NotWriteThrough,NW和CDflags被清零,启用writeback或者writethrough,AM(bit18ofCR0):AlignmentMask,启用自动对齐校验设置;清零,不支持自动地址对齐校验;置位,自动进行地址对齐校验;WP(bit16ofCR0):writeprotect,置位:禁止处于超级权限的进程向只读pages写入数据;清零:允许超级权限进程向只读pages写入数据;支持LInux系统以copyonwrite的方法创建进程;NE(bit5ofCR0):NumericError,置位:提供报告X87浮点运算单元错误;清零:enablesPCStyleX87FPUNEflag被清零IGNNEinput被断言,X87FPUerrors被忽略;NEflag被清零IGNNE断言错误,unmaskedx87FPUerrors导致处理器assertFERRpin,产生外部中断,立刻终止指令执行;ET(bit4ofCR0):ExtensionType,奔腾4、IntelXeon、P6famil和奔腾处理器中保留该位;该位被硬编码为1;Intel386和Intel486处理器中,flag被置位后表明支持Intel387DX数学协处理器指令集;TS(bit3ofCR0):TaskSwitched,允许X87FPUMMXSSESSE2SSE3SSE4上下文转换推迟到新任务真正需要FPUMMXSSESSE2SSE3SSE4时;EM(bit2ofCR0):EmulationMP(bit1ofCR0):MonitorCoprocessorPE(bit0ofCR0):ProtectionEnablePCD(bit4ofCR3):PagelevelCacheDisable,控制访问页全局目录的方式;disable分页基址或者PAE分页模式下、IA32e模式下,CR4。PCIDE1,该位不被使用;PWT(bit3ofCR3):PageLevelWriteThrough,控制访问页全局目录的方式;VME(bit0ofCR4):Virtual8086ModeExtension,置位后,允许在virtual8086模式下处理中断和异常,由于避免了通过virtual8086monitor处理异常和中断的开销,因而可以提高应用的性能;PVI(bit1ofCR4):ProtectedModeVirtualInterrupts,置位:为Virtualinterruptflag(VIF)提供了硬件支持;清零,不支持VIF;TSD(bit2ofCR4):TimeStampDisable,置位,限制特权级0下使用RDTSC指令;清零后,允许在任何特权级执行RDTSC指令;DE(bit3ofCR4):DebuggingExtension,置位后,使用调试寄存器DR4和DR5会引发undefinedopcode的异常;清零,处理器依靠使用DR4和DR5兼容早期IA32处理器;PSE(bit4ofCR4):PageSizeExtension,置位后,enable4MB清零后,页基本大小4KB;PAE(bit5ofCR4):PhysicalAddressExtension,置位后,允许分页过程中产生大于32bit的地址(页框号);清零后,页号必须不大于32IA32e模式下必须激活PAEMCE(bit6ofCR4):machinecheckenable,置位后,启用机器校验;清零后,PGE(bit7ofCR4):PageGlobalEnable,第六代处理器中引入;置位后,启用清零后,globalpagefeature允许经常使用的pages或者共享pages被标记为上下文任务切换或者写寄存器CR3时,globalpages不从TLB中flush出去;PCE(bit8ofCR4):PerformanceMonitoringCounterEnable,置位,允许在任何保护级别执行RDPMC指令;清零,RDPMC指令仅仅可以在特权级0执行;OSFXSR(bit9ofCR4):OperatingSystemSupportforFXSAVEandFXRSTORinstruction,置位:(1)表明操作系统支持指令FXSAVE和FXRSTOR;(2)FXSAVE和FXSTORE指令分别用来保存和恢复寄存器X87FPU、XMM、MXCSR和MMX的内容;(3)处理器执行SSESSE2SSE3SSSE3SSE4指令时会抛出PAUSE,PREFETCHh,SFENCE,LFENCE,MFENCE,MOVNTI,CLFLUSH,CRC32,POPCNT异常OSXMMEXCPT(bit10ofCR4):OperatingSystemSupportforUnmaskedSIMDFloatingPointException,置位:表明操作系统支持unmaskedSIMD浮点Exception的执行;SIMDfloatingpoint异常仅仅会由SSESSE3SSE2SSE4SIMD浮点指令产生;VMXE(bit13ofCR4):VMXEnabledbit,置位后启用VMX操作;SMXE(bit14ofCR4):SMXEnabledBit,置位后启用SMX操作;FSGSBASE(bit16ofCR4):FSGSBASEEnableBit,置位后启用RDFSBASE,RDGSBASE,WRFSBASE和WRGSBASE指令;PCIDE(bit17ofCR4):PCIDEnableBit,置位后启用processcontextidentifiers(PCIDs);OSXSAVE(bit18ofCR4):XSAVEandProcessorExtendedStatsEnableBit,置位:(1)表明操作系统支持普通软件使用XGETBV,XSAVE和XRSTOR指令;(2)启用XSAVE和XRSTOR指令保存或恢复X87FPU寄存器和SSE寄存器状态以及其他XCR0状态;(3)启用可读写XCR0的XGETBV和XSETBV指令;SMEP(bit20ofCR4):SMEPEnableBit,置位:禁止在监督模式下执行指令;SMAP(bit21ofCR4):SMAPEnableBit,置位:禁止在监督模式下访存PKE(bit22ofCR4):ProtectionKeyEnableBit,IA32e分页基址中,允许为每个线性地址分配一个PKRU寄存器内的值表明用户模式下带有protectionkey的线性地址是否可被读或被写;RDPKRU和WRPKRU指令分别读写寄存器PKRU的值;TPL(bit3:0ofCR8):TaskPriorityLevel,设置中断可以被阻塞的优先级阈值,0表示所有中断均15表示中断特权disabled四、SegmentRegisterCS存放代码段基址;SS寄存器存放堆栈段基址;DSESFSGS寄存器存放数据段基址; 注:codesegment被设置为ReadOnlyS64bit模式下,分段一般是disabled的,处理器将CSDSESSS值设置为0;五、EFLAGS寄存器中系统标志 控制IO,可屏蔽硬件中断、调试、任务切换,支持virtual8086TF(8):Trap,置位,启用单步调试;清除,disable单步调试;IF(9):Interruptenable,控制置位,响应可屏蔽硬件中断;清零,禁止可屏蔽中断;该位不影响不可屏蔽中断(NMI);IOPL(12,13bit):IOprivilegelevelfiled(IO特权级),表明当前正在运行任务的IO特权级,当前运行程序的特权级必须不大于IOPL;当且仅当当前特权级为0时,POPF和IRET指令可以更新该域;NT(14bit):Nestedtask,控制嵌套中断和嵌套任务;RF(16bit):Resume,控制处理器对指令中断的相应;置位,清零,中断条件满足时,产生VM(17bit):置位,启用virtual8086清除,返回到AC(18bit):alignmentcheckoraccesscontrol,置位:AMbit通过CR0置位时,对齐检查和用户模式下数据访问启用,访问非对齐地址时,会产生可用来检查数据是否对齐,VIF(19bit):VirtualInterrupt,当VMEflagorPVIflag在CR4中置位,或者IOPL小于3时,处理器才可以识别VIPVIP(20bit):VirutalInterruptPending,置位,中断正在执行;清零,无中断正在运行;该标志和VIF标识结合使用,处理器读取该标志,但从来不更新该标志;当VMEflagorPVIflag在CR4中置位,或者IOPL小于3时,处理器才可以识别VIPID(21bit):Identification,表明是否支持CPUID指令; 原文作者:cyjhaiou 原文地址:http:t。csdn。cnvMsTI(版权归原文作者所有,侵权联系删除)