精华内容
下载资源
问答
  • 寄存器的组成

    2012-02-29 20:38:44
    1.ARM处理器有37个寄存器。    通用寄存器:31个 :R0~R15 R13_svc, R14_svc , R13_abt,R14_abt,R13_irq,R14_irq,R13_und,R14_und,R13_fiq,R14_fiq,R8_fiq,R9_fiq,R10_fiq,R11_fiq,R12_fiq。...

    1.ARM处理器有37个寄存器。

     

      通用寄存器:31个  :R0~R15   R13_svc,  R14_svc R13_abt,R14_abtR13_irq,R14_irqR13_und,R14_undR13_fiq,R14_fiqR8_fiq,R9_fiq,R10_fiq,R11_fiq,R12_fiq     

     

      状态寄存器:6个 :cpsr,spsr_svc,spsr_abt,spsr_und,spsr_irq,spsr_fiq.

     

     

    2.ARM 状态下的通用寄存器

     通用寄存器(R0~R15)可分为3类:

     **不分组寄存器:R0~R7;

     **分组寄存器    :R8 ~ R14

     ** 程序计数器  : pc

     

    应用:

       不分组寄存器:在所有处理器模式下,他们访问的都是同一个物理寄存器。所以必须注意对同一个寄存器在不同模式下使用时的数据保护。

       分组寄存器    :

             R8 ~ R12:     FIQ模式分组寄存器     R8 ~ R12   ,FIQ处理程序可不必保存和恢复中断现场,从而使FIQ中断的处理模式过程更加迅速

                                        非FIQ模式分组寄存器 R8 ~ R12,在FIQ以外的4个异常模式使用 R8~ R12和各自的R13,R14,来简单的处理中断。在FIQ模式以外的中断处理中,

                                        如果要使用R8 ~ R12,则必须考虑保护。

     

           R13 ~ R14:     寄存器R13和R14各有六个分组的物理寄存器,1个用于用户模式,其他的5个用于异常模式。

                                        名字命名规则如下:R13_<mode>              R14_<mode>

     

                       R13:    通常用作堆栈指针SP,在ARM中这是一种习惯的用法,也可当做普通的寄存器来使用。但是在Thumb中必须当做Sp堆栈指针来使用。

                                       每一种异常模式都有自己的R13寄存器。当推出异常处理程序时,将保存在R13所指的堆栈中的寄存器值弹出,这样就使异常处理程序不会破坏被其中断的

                                       程序的运行现场。

                       R14:    用作子程序链接寄存器(link register),也称为LR。每一种异常模式都有自己的物理R14,用来存放当前子程序的返回地址。即当前的pc值保存在R14寄

                                      存器中。当执行完中断处理程序,只要把R14的值复制到pc中,中断程序立即返回。

                                      MOV PC,LR

                                      BX  LR

     

                                     在子程序入口使用下面的指令将pc 保存到栈中:STMFD  SP!,{<register>,LR}

                                     下面的指令可实现子程序的返回: LDMFD  SP! {<register>,pc}

     

        程序计数器pc: 当向R15写入一个地址时程序就会跳转到该地址去执行,所以使用该寄存器一定要谨慎。由于ARM状态下指令总是字对齐的所以R15的低两位为0。

                                     [31 - 2]保存地址。

     

    3.ARM程序壮态寄存器

    CPSR:当前程序壮态寄存器

    SPSR:程序壮态保存寄存器      用于保存CPSR的壮态,以便从异常返回后恢复异常发生前的工作状态。

     

    CPSR和SPSR的格式:

     

                     

     

    条件码标志:

        N:在结果是有符号的二进制补码情况下,如果结果为负数,则 N= 1,否则 N = 0;

        Z:如果结果是为0,则 Z = 1,否则 Z = 0。

        C:对于加法来说,如果产生进位则 C = 1,否则 C = 0;

              对于减法来说,如果有借位 则C = 0,否则 C = 1;

              对于移位操作 C 为移位操作中最后移出位的值;

       V:对于加法来说,操作数和结果都是有符号数时,如果发生溢出,则 V = 1,否则 V= 0;

     

    控制位:

       最低8位为控制位。当异常发生时,改变控制位。

       I:中断禁止位;若 I = 1,则禁止IRQ中断;

      F:快速中断禁止位;若 F = 1,则禁止FIQ中断;

      T:状态位; T = 0  ARM壮态  ,T = 1  Thumb壮态

      M:模式位;这些位决定处理器的工作模式。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • mips32位32个寄存器组成的寄存器

    热门讨论 2011-03-28 18:08:38
    寄存器组设计实验】 mips32位字长32个寄存器组成的寄存器组 用verilog HDL语言描述
  • 80386的寄存器组成

    2016-08-31 19:40:28
    完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要时候来查这篇文章就可以了,完全没有必要抵抗着困意非要把这篇文章认真看完,记住里面每一个寄存器里每一位定义,但是...
    写这篇文章,完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要的时候来查这篇文章就可以了,完全没有必要抵抗着困意非要把这篇文章认真看完,记住里面每一个寄存器里每一位的定义,但是以后的文章如果需要,一定要记得回来查查相关的内容。
    


        80386共提供7种类型的32位寄存器,如下:

    1. 通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)
    2. 段寄存器(CS、SS、DS、ES、FS、GS)
    3. 指令指针寄存器和标志寄存器(EIP、EFLAGS)
    4. 系统表寄存器(GDTR、IDTR、LDTR、TR)
    5. 控制寄存器(CR0、CR1、CR2、CR3、CR4)
    6. 调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)
    7. 测试寄存器(TR6、TR7)

        其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。

        下图是前四类寄存器的大致示意图:

    80386的寄存器组成 - whowin - DOS编程技术

        本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。

    一、通用寄存器

        一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位操作,进行32位操作是,寄存器名称前面冠以“E”。

        这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。

    二、段寄存器

        80386比8086/80286增加了两个段寄存器FS、GS。

        除CS支持代码段,SS支持堆栈段外,程序员可以利用其它的所有段寄存器支持数据段。

        每个段寄存器对应这一个64位高速缓存器(有些资料中说有96位,但值使用其中的64位),这在8086中是没有的(在80286中为48位),它的具体作用将另文介绍。

    三、指令指针寄存器和标志寄存器

        指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。

        标志寄存器也是对8086/80286标志寄存器的32位扩展,其定义如下(这张图截自Intel关于IA32架构的最新文档):

    80386的寄存器组成 - whowin - DOS编程技术

        其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已经存在,请参考相关资料。

        IOPL(I/O Privilege Level)是从80286开始出现的,占2个bit表示I/O特权级,如果当前特权级小于或等于IOPL,则可以执行I/O操作,否则将出现一个保护性异常。IOPL只能由特权级为0的程序或任务来修改。

        NT(Nested Task)也是从80286开始出现的,表示嵌套任务,用于控制中断返回指令IRET,当NT=0时,用堆栈中保存的值恢复EFLAGS、CS和EIP,从而实现返回;若NT=1,则通过任务切换实现中断返回。

        下面的标志位是80386以后的CPU才有的标志。

        VM(Virtual-8086 mode)表示虚拟8086模式,如果VM被置位且80386已出于保护模式下,则CPU切换到虚拟8086模式,此时,对段的任何操作又回到了实模式,如同在8086下运行一样。

        RF(Resume flag)表示恢复标志(也叫重启标志),与调试寄存器一起用于断点和单步操作,当RF=1 时,下一条指令的任何调试故障将被忽略,不产生异常中断。当RF=0时,调试故障被接受,并产生异常中断。用于调试失败后,强迫程序恢复执行,在成功执行每条指令后,RF自动复位。

        AC(Alignment check)表示对齐检查。这个标志是80486以后的CPU才有的。当AC=1且CR0中的AM=1时,允许存储器进行地址对齐检查,若发现地址未对齐,将产生异常中断。所谓地址对齐,是指当访问一个字(2字节长)时,其地址必须是偶数(2的倍数),当访问双字(4字节长)时,其地址必须是4的倍数。

        但是只有运行在特权级3的程序才执行地址对齐检查,特权级0、1、2忽略该标志。

        VIF(Virtual interrupt flag)表示虚拟中断标志。以下的三个标志是Pentium以后的CPU才有的。当VIF=1时,可以使用虚拟中断,当VIF=0时不能使用虚拟中断。该标志要和下面的VIP和CR4中的VME配合使用。

        VIP(Virtual interrupt pending flag)表示虚拟中断挂起标志。当VIP=1时,VIF有效,VIP=0时VIF无效。

        ID(Identification flag)表示鉴别标志。该标志用来只是Pentium CPU是否支持CPUID的指令。

        实际上,如果不编写操作系统,大部分标志可能很难得用到一次,有个印象就好了,用到了再去查不迟。

    四、系统表寄存器

        80386 中有4个系统表寄存器,分别是全局描述符表寄存器(GDTR)、中断描述符表寄存器(IDTR)、局部描述符表寄存器(LDTR)、任务状态寄存器(TR)。系统表寄存器用于在保护方式下,管理4 个系统表,由于只能在保护方式下使用,因此又称为保护方式寄存器。有关描述附表的问题,另文介绍。

    五、控制寄存器

        80386的控制寄存器有4个,其中CR1保留以后使用,从Pentium开始,又增加了一个CR4,CR0的低16位包含了与80286的MSW一致的位定义,保持了和80286的兼容,同时也兼容了从80286开始的两条指令LMSW/SMSW,其基本定义如下:

    80386的寄存器组成 - whowin - DOS编程技术

        CR0中各位含义如下

    • PE(Protection Enable)保护模式允许,PE=0表示CPU工作在实模式,PE=1表示CPU工作在保护模式
    • MP(Monitor Coprocessor)监控协处理器,MP=1表示协处理器在工作,MP=0表示协处理器未工作。
    • EM(Emulation)协处理器仿真,当MP=0,EM=1时,表示正在使用软件仿真协处理器工作。
    • TS(Task Switched)任务转换,每当进行任务转换时,TS=1,任务转换完毕,TS=0。TS=1时不允许协处理器工作。
        以上4个定义从80286开始,下面的2个定义从80386开始存在
    • ET(Extension Type)处理器扩展类型,反映了所扩展的协处理器的类型,ET=0为80287,ET=1为80387。
    • PG(Paging)页式管理机制使能,PG=1时页式管理机制工作,否则不工作。

        从80486开始又增加了如下位定义。

    • NE(Numeric Error)数值异常中断控制,NE=1时,如果运行协处理器指令发生故障,则用异常中断处理,NE=0时,则用外部中断处理。
    • WP(Write Protect)写保护,当WP=1时,对只读页面进行写操作会产生页故障。
    • AM(Alignment Mask)对齐标志,AM=1时,允许对齐检查,AM=0时不允许,关于对齐,在EFLAGS的AC标志时介绍过,在80486以后的CPU中,CPU进行对齐检查需要满足三个条件,AC=1、AM=1并且当前特权级为3。
    • NW(Not Write-through)和CD(Cache Disable),这两个标志都是用来控制CPU内部的CACHE的,当NW=0且CD=0时,CACHE使能,其它的组合说起来比较复杂,如果有读者真的想搞清楚的话,可以参阅《Intel? 64 and IA-32 Architectures》中的“Software Developer’s Manual Volume 3A”这一册,在第10章对这两个标志的各种组合有比较详细的说明。
        CR1保留未用;CR2存放引起页故障的线性地址,只有在PG=1时,CR2才有效,当页故障处理程序被激活时,压入页故障处理程序堆栈中的错误码提供页故障的状态信息。
        CR3的bit12--bit31存放页目录的基地址,因为也目录总是页对齐的(一页为4K),所以页目录基地址从bit12开始就可以了。只有当CR0中的PG=1时,CR3的页目录基地址才有效。
        从80486开始,在CR3的低12位定义了两个控制位,如下
    • PCD(Page-level Cache Disable)页CACHE禁止,当PCD=0时,页目录表进行高速缓存,PCD=1时,不进行高速缓存;该位控制PCD引脚控制外部CACHE工作还是不工作。
    • PWT(Page-level Writes Transparent),CACHE的写入分为透写(Write-Through)和回写(Write-Back),80486以上的CPU内部的CACHE都是透写的,但对外部CACHE而言,允许某些页是回写的,而另一些页是透写的,当PWT=1时,外部CACHE对页目录进行透写,否则进行回写;此位驱动PWT引脚以控制外部CACHE是透写还是回写。
        CR4是从Pentium CPU开始出现的
    • VME(Virtual-8086 Mode Extensions)虚拟8086方式扩展,VME=1允许使用虚拟8086扩展模式,否则只能使用80386/80486的虚拟8086模式。
    • PVI(Protected-Mode Virtual Interrupts)保护模式虚拟中断,PVI=1时,在保护模式下支持虚拟中断标志VIF(EFLAGS中),PVI=0则不支持虚拟中断标志。
    • TSD(Time Stamp Disable)时间戳禁止,TSD=1时,允许在特权级为0的程序中执行RDTSC指令(读时间戳计数指令),TSD=0时,允许任何特权级执行RDTSC指令。
    • DE(Debugging Extensions)调试扩展,
    • PSE(Page Size Extensions)页大小扩展,PSE=1时,页大小可以扩展到2M或4M,PSE=0时,页大小只能是4K.
    • PAE(Physical Address Extension)物理地址扩展,PAE=1时,页物理地址可以扩展到36bits以上,PAE=0时只能用32bits的物理地址。
    • MCE(Machine-Check Enable)硬件检查使能,Pentium以后的CPU有一种硬件检测功能,MCE=1时允许使用该功能。
    • PGE(Page Global Enable)全局页使能,PGE=1时,允许使用全局页,PGE=0时禁止使用全局页。
    • PCE(Performance-Monitoring Counter Enable)性能监视计数器使能,当PCE=1时,允许在任何保护级下执行RDPMC指令,PCE=0时,只有特权级0的程序可以执行RDPMC指令。
    • OSFXSR(Operating System Support for FXSAVE and FXRSTOR instructions)
    • OSXMMEXCPT(Operating System Support for Unmasked SIMD Floating-Point Exceptions)
    • VMXE(VMX-Enable Bit)VMX使能位,VMXE=1时,允许VMX操作。
    • SMXE(SMX-Enable Bit)SMX使能位,SMXE=1时,允许SMX操作。
    • OSXSAVE(XSAVE and Processor Extended States-Enable Bit)  

    六、调试寄存器

        一共有8个调试寄存器DR0--DR7,DR0-DR3可以分别设置4个断点的线性地址,DR4-DR5保留未用,DR6是断点状态寄存器,DR7是断点控制寄存器(包括断点类型、断点长度,断点开放/禁止)

    七、测试寄存器

        一共有8个测试寄存器TR0--TR7,TR0-TR2保留,TR3-TR5用作CACHE测试,TR6为命令测试寄存器,TR7为测试数据寄存器。

    展开全文
  • ARM 寄存器组成

    2014-03-12 19:12:00
    ARM寄存器组成 ...分组寄存器的概念下文可见) ARM状态时寄存器被设为包含16个直接可以访问的寄存器:R0到R15。除了R15,其他全部寄存器都为通用寄存器,如可能用于保存数据或地址值。除此之外,还有第17个寄...

    ARM 寄存器组成

    在 ARM 状态,16 个通用寄存器(R0-R15)和一个状态寄存器在任意时刻都可见。在特权(非用户)模式下,将切换到指定模式的分组(banked )寄存器。(PS.分组寄存器的概念下文可见)

    ARM 状态时寄存器被设为包含 16 个直接可以访问的寄存器:R0 到 R15除了 R15 ,其他全部寄存器都为通用寄存器,如可能用于保存数据或地址值。除此之外,还有第 17 个寄存器用于存储状态信息。 

    R8R14SPSR寄存器则被切换到各个模式下的私有寄存器组上,不同的模式下可以访问相应的私有寄存器。表1显示了在每种模式下,哪些寄存器是有效的(阴影部分的寄存器都是私有寄存器)。

     

     

    1  ARM状态下的寄存器组织结构

     

    从表1中我们可以看出:

    ☆ R0R7R15CPSR寄存器组在任何模式下都是共用的,可访问的;

    ☆ R8R12寄存器组在快中断模式下(fiq)对应一套私有寄存器组R8_fiqR12_fiq,在其他模式下共用另一套寄存器组;

    ☆ R13R14寄存器在用户(user)和系统(sys)模式下共用一套;其他模式(管理(svc)、中止(abt)、未定义(und)、中断(irq)、快中断(fiq)模式)下都具有两个私有寄存器R13R14。这就使得这些模式中的每一种模式都具有各自的堆栈寄存器指针R13和链接寄存器R14,分别用于堆栈处理和异常退出;

    ☆ SPSR寄存器可用于保存CPSR的值,在用户和系统模式下不能访问,在其他模式下都有私有的SPSR寄存器。

    1中第二列列举了寄存器在汇编语言中的名称,其中括号中的内容是别称。下面我们对这些寄存器的功能进行介绍。

     

    1、一般通用寄存器 R0R12

    寄存器R0R12为保存数据或地址值的一般通用寄存器。其中寄存器R0R7为未分组的寄存器,R8R12为分组寄存器。

    未分组的寄存器意味着对于任何处理器模式,他们中的每一个都对应于相同的32位物理寄存器。他们是完全通用的寄存器,

    分组寄存器意味着同一个寄存器名对应多个物理寄存器,具体所对应的物理寄存器取决于当前的处理器模式。参照表1,寄存器R8R12有两个分组物理寄存器。一组用于除FIQ模式之外的所有寄存器模式(R8R12),另一组用于FIQ模式(R8_fiqR12_fiq)。、

    寄存器R8R12ARM体系结构中没有特定的用途。不过对于那些只使用R8R14来说就足够处理的简单的中断,FIQ所单独使用的这些寄存器可实现快速的中断处理。

     

    2、堆栈指针 R13

    寄存器R13(也称为堆栈指针或SP)有6个分组的物理寄存器,见表2-1。一个用于用户和系统模式,其余5个分别用于5种异常模式。

    寄存器R13通常作为堆栈指针SP。在ARM指令集中,R13大都用在对各个模式下的堆栈操作。每个异常模式都具备私有的R13寄存器,它通常指向由异常模式所专用的堆栈。在入口处,通常将寄存器值保存到这个堆栈。在模式转换前将当前寄存器的值保存到堆栈中,然后从将要切换的模式堆栈中将这些值从堆栈重装到已切换的模式寄存器中,这种处理方法可确保异常发生时的程序状态不会被破坏。


    3、链接寄存器 R14

    寄存器R14(也称为链接寄存器或LR)有6个分组的物理寄存器,见表2-1。一个用于用户和系统模式,其余5个分别用于5种异常模式,对应的私有寄存器有R14_svcR14_irqR14_fiqR14_abtR14_und。寄存器R14有三种用途:

    ☆ 当发生异常时,它被设置为该异常返回地址;

    ☆ 在执行分支和链接(BL)指令时,它用于保存子程序的返回地址;

    ☆ 而在其他时候,可以作为一个通用寄存器来对待。

     

    4、程序计数器 R15

    寄存器R15(也称为程序计数器或PC)总是用于特殊用途,它总是指向下一条要读取指令的地址。你可以把R15当作通用寄存器使用,但使用时还有与指令有关的限制或特殊情况。如果R15使用的方式超过了这些限制,那么指令将是不可预测的。

    由于ARM7采用3级流水线结构,在ARM状态下,读取R15的值是当前执行指令地址 + 8ARM指令以字为单位,读取R15结果的bit[1:0]总是为0b00

    R15进行写时,如果这条写指令没有超过对R15使用的限制,那么写入R15的正常结果值被当成一个指令地址,程序会从这个地址处继续执行(相当于执行无条件跳转指令)。因为ARM指令以字为边界,所以写入R15值的bit[1:0]通常为0b00

     

    5CPSRSPSR

    所有模式共享一个程序状态寄存器CPSR。在异常模式中,程序状态保存寄存器SPSR可以被访问,每种异常具有自己私有的SPSR。在进入异常时,它保存CPSR的当前值;在异常退出时,可通过它(SPSR)恢复CPSR

     

    (转载并修改自http://hi.baidu.com/0x9000/item/ef85ddb468a388951946978e)

    转载于:https://www.cnblogs.com/Yandy-Dang/p/3597020.html

    展开全文
  • 80386的寄存器组成 保护模式 2009-01-31 10:04:33 阅读864 评论1 字号:大中小  写这篇文章,完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要时候来查这篇文章...

    80386的寄存器组成

    保护模式 2009-01-31 10:04:33 阅读864 评论1 字号:

        写这篇文章,完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要的时候来查这篇文章就可以了,完全没有必要抵抗着困意非要把这篇文章认真看完,记住里面每一个寄存器里每一位的定义,但是以后的文章如果需要,一定要记得回来查查相关的内容。


        80386共提供7种类型的32位寄存器,如下:

    1. 通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)
    2. 段寄存器(CS、SS、DS、ES、FS、GS)
    3. 指令指针寄存器和标志寄
    4. 存器(EIP、EFLAGS)
    5. 系统表寄存器(GDTR、IDTR、LDTR、TR)
    6. 控制寄存器(CR0、CR1、CR2、CR3、CR4)
    7. 调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)
    8. 测试寄存器(TR6、TR7)

        其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。

        下图是前四类寄存器的大致示意图:

    80386的寄存器组成 - whowin - DOS编程技术

        本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。

    一、通用寄存器

        一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位操作,进行32位操作是,寄存器名称前面冠以“E”。

        这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。

    二、段寄存器

        80386比8086/80286增加了两个段寄存器FS、GS。

        除CS支持代码段,SS支持堆栈段外,程序员可以利用其它的所有段寄存器支持数据段。

        每个段寄存器对应这一个64位高速缓存器(有些资料中说有96位,但值使用其中的64位),这在8086中是没有的(在80286中为48位),它的具体作用将另文介绍。

    三、指令指针寄存器和标志寄存器

        指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。

        标志寄存器也是对8086/80286标志寄存器的32位扩展,其定义如下(这张图截自Intel关于IA32架构的最新文档):

    80386的寄存器组成 - whowin - DOS编程技术

        其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已经存在,请参考相关资料。

        IOPL(I/O Privilege Level)是从80286开始出现的,占2个bit表示I/O特权级,如果当前特权级小于或等于IOPL,则可以执行I/O操作,否则将出现一个保护性异常。IOPL只能由特权级为0的程序或任务来修改。

        NT(Nested Task)也是从80286开始出现的,表示嵌套任务,用于控制中断返回指令IRET,当NT=0时,用堆栈中保存的值恢复EFLAGS、CS和EIP,从而实现返回;若NT=1,则通过任务切换实现中断返回。

        下面的标志位是80386以后的CPU才有的标志。

        VM(Virtual-8086 mode)表示虚拟8086模式,如果VM被置位且80386已出于保护模式下,则CPU切换到虚拟8086模式,此时,对段的任何操作又回到了实模式,如同在8086下运行一样。

        RF(Resume flag)表示恢复标志(也叫重启标志),与调试寄存器一起用于断点和单步操作,当RF=1 时,下一条指令的任何调试故障将被忽略,不产生异常中断。当RF=0时,调试故障被接受,并产生异常中断。用于调试失败后,强迫程序恢复执行,在成功执行每条指令后,RF自动复位。

        AC(Alignment check)表示对齐检查。这个标志是80486以后的CPU才有的。当AC=1且CR0中的AM=1时,允许存储器进行地址对齐检查,若发现地址未对齐,将产生异常中断。所谓地址对齐,是指当访问一个字(2字节长)时,其地址必须是偶数(2的倍数),当访问双字(4字节长)时,其地址必须是4的倍数。

        但是只有运行在特权级3的程序才执行地址对齐检查,特权级0、1、2忽略该标志。

        VIF(Virtual interrupt flag)表示虚拟中断标志。以下的三个标志是Pentium以后的CPU才有的。当VIF=1时,可以使用虚拟中断,当VIF=0时不能使用虚拟中断。该标志要和下面的VIP和CR4中的VME配合使用。

        VIP(Virtual interrupt pending flag)表示虚拟中断挂起标志。当VIP=1时,VIF有效,VIP=0时VIF无效。

        ID(Identification flag)表示鉴别标志。该标志用来只是Pentium CPU是否支持CPUID的指令。

        实际上,如果不编写操作系统,大部分标志可能很难得用到一次,有个印象就好了,用到了再去查不迟。

    四、系统表寄存器

        80386 中有4个系统表寄存器,分别是全局描述符表寄存器(GDTR)、中断描述符表寄存器(IDTR)、局部描述符表寄存器(LDTR)、任务状态寄存器(TR)。系统表寄存器用于在保护方式下,管理4 个系统表,由于只能在保护方式下使用,因此又称为保护方式寄存器。有关描述附表的问题,另文介绍。

    五、控制寄存器

        80386的控制寄存器有4个,其中CR1保留以后使用,从Pentium开始,又增加了一个CR4,CR0的低16位包含了与80286的MSW一致的位定义,保持了和80286的兼容,同时也兼容了从80286开始的两条指令LMSW/SMSW,其基本定义如下:

    80386的寄存器组成 - whowin - DOS编程技术

        CR0中各位含义如下

    • PE(Protection Enable)保护模式允许,PE=0表示CPU工作在实模式,PE=1表示CPU工作在保护模式
    • MP(Monitor Coprocessor)监控协处理器,MP=1表示协处理器在工作,MP=0表示协处理器未工作。
    • EM(Emulation)协处理器仿真,当MP=0,EM=1时,表示正在使用软件仿真协处理器工作。
    • TS(Task Switched)任务转换,每当进行任务转换时,TS=1,任务转换完毕,TS=0。TS=1时不允许协处理器工作。
        以上4个定义从80286开始,下面的2个定义从80386开始存在
    • ET(Extension Type)处理器扩展类型,反映了所扩展的协处理器的类型,ET=0为80287,ET=1为80387。
    • PG(Paging)页式管理机制使能,PG=1时页式管理机制工作,否则不工作。

        从80486开始又增加了如下位定义。

    • NE(Numeric Error)数值异常中断控制,NE=1时,如果运行协处理器指令发生故障,则用异常中断处理,NE=0时,则用外部中断处理。
    • WP(Write Protect)写保护,当WP=1时,对只读页面进行写操作会产生页故障。
    • AM(Alignment Mask)对齐标志,AM=1时,允许对齐检查,AM=0时不允许,关于对齐,在EFLAGS的AC标志时介绍过,在80486以后的CPU中,CPU进行对齐检查需要满足三个条件,AC=1、AM=1并且当前特权级为3。
    • NW(Not Write-through)和CD(Cache Disable),这两个标志都是用来控制CPU内部的CACHE的,当NW=0且CD=0时,CACHE使能,其它的组合说起来比较复杂,如果有读者真的想搞清楚的话,可以参阅《Intel? 64 and IA-32 Architectures》中的“Software Developer’s Manual Volume 3A”这一册,在第10章对这两个标志的各种组合有比较详细的说明。
        CR1保留未用;CR2存放引起页故障的线性地址,只有在PG=1时,CR2才有效,当页故障处理程序被激活时,压入页故障处理程序堆栈中的错误码提供页故障的状态信息。
        CR3的bit12--bit31存放页目录的基地址,因为也目录总是页对齐的(一页为4K),所以页目录基地址从bit12开始就可以了。只有当CR0中的PG=1时,CR3的页目录基地址才有效。
        从80486开始,在CR3的低12位定义了两个控制位,如下
    • PCD(Page-level Cache Disable)页CACHE禁止,当PCD=0时,页目录表进行高速缓存,PCD=1时,不进行高速缓存;该位控制PCD引脚控制外部CACHE工作还是不工作。
    • PWT(Page-level Writes Transparent),CACHE的写入分为透写(Write-Through)和回写(Write-Back),80486以上的CPU内部的CACHE都是透写的,但对外部CACHE而言,允许某些页是回写的,而另一些页是透写的,当PWT=1时,外部CACHE对页目录进行透写,否则进行回写;此位驱动PWT引脚以控制外部CACHE是透写还是回写。
        CR4是从Pentium CPU开始出现的
    • VME(Virtual-8086 Mode Extensions)虚拟8086方式扩展,VME=1允许使用虚拟8086扩展模式,否则只能使用80386/80486的虚拟8086模式。
    • PVI(Protected-Mode Virtual Interrupts)保护模式虚拟中断,PVI=1时,在保护模式下支持虚拟中断标志VIF(EFLAGS中),PVI=0则不支持虚拟中断标志。
    • TSD(Time Stamp Disable)时间戳禁止,TSD=1时,允许在特权级为0的程序中执行RDTSC指令(读时间戳计数指令),TSD=0时,允许任何特权级执行RDTSC指令。
    • DE(Debugging Extensions)调试扩展,
    • PSE(Page Size Extensions)页大小扩展,PSE=1时,页大小可以扩展到2M或4M,PSE=0时,页大小只能是4K.
    • PAE(Physical Address Extension)物理地址扩展,PAE=1时,页物理地址可以扩展到36bits以上,PAE=0时只能用32bits的物理地址。
    • MCE(Machine-Check Enable)硬件检查使能,Pentium以后的CPU有一种硬件检测功能,MCE=1时允许使用该功能。
    • PGE(Page Global Enable)全局页使能,PGE=1时,允许使用全局页,PGE=0时禁止使用全局页。
    • PCE(Performance-Monitoring Counter Enable)性能监视计数器使能,当PCE=1时,允许在任何保护级下执行RDPMC指令,PCE=0时,只有特权级0的程序可以执行RDPMC指令。
    • OSFXSR(Operating System Support for FXSAVE and FXRSTOR instructions)
    • OSXMMEXCPT(Operating System Support for Unmasked SIMD Floating-Point Exceptions)
    • VMXE(VMX-Enable Bit)VMX使能位,VMXE=1时,允许VMX操作。
    • SMXE(SMX-Enable Bit)SMX使能位,SMXE=1时,允许SMX操作。
    • OSXSAVE(XSAVE and Processor Extended States-Enable Bit)  

    六、调试寄存器

        一共有8个调试寄存器DR0--DR7,DR0-DR3可以分别设置4个断点的线性地址,DR4-DR5保留未用,DR6是断点状态寄存器,DR7是断点控制寄存器(包括断点类型、断点长度,断点开放/禁止)

    七、测试寄存器

        一共有8个测试寄存器TR0--TR7,TR0-TR2保留,TR3-TR5用作CACHE测试,TR6为命令测试寄存器,TR7为测试数据寄存器。

     

    转自:http://hengch.blog.163.com/blog/static/107800672009029104144323/

    展开全文
  • 本文主要讲了寄存器是什么重要组成部分,下面一起来学习一下
  • 80386的寄存器组成(转)

    千次阅读 2015-08-16 21:51:52
    80386共提供7种类型32位寄存器,如下: 通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)段寄存器(CS、SS、DS、ES、FS、GS)指令指针寄存器和标志寄存器(EIP、EFLAGS)系统表寄存器(GDTR、IDTR、LDTR、TR)...
  • 从结构DPTR是一个16位特殊功能寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立8位寄存器来使用。主要功能是存放16位地址,作为片外...
  • 80386寄存器

    2011-11-22 21:27:56
    主要介绍了80386寄存器的组成.NULLNULL
  • STM32寄存器的简介、地址查找,与直接操作寄存器

    万次阅读 多人点赞 2019-01-11 11:15:15
    根据百度百科介绍,寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。  简单来说,寄存器就是存放东西的东西。从名字来看,跟火车站寄存行李的地方好像是有...
  • 计算机组成原理实验运算器原理DSN 也就是在Proteus仿真软件上进行实验做出来电路图
  • 寄存器学习笔记

    2021-03-11 20:23:19
    寄存器学习笔记寄存器的组成边沿D触发器RS触发器 如有错误,欢迎指正 寄存器的组成 基本寄存器是由 D触发器组成,在 CP 脉冲作用下,每个 D触发器能够寄存一位二进制码。在 D=0 时,寄存器储存为 0,在 D=1 时,...
  • 基于emu8086微机模拟器16位寄存器构成32位大数乘法器实验
  • 寄存器

    2019-11-22 10:12:57
    通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与。 专用指令执行、数据运算、变量处理、参数传递 1.2 外设寄存器 外设寄存器(SFR): SFR(special function register,...
  • 程序计数器PC的位数 ...指令寄存器的位数 由指令长度决定,而指令又有半字长、单子长、双字长、多字长的长度类型,所以长度不确定。(这里的字长是机器字长)。 通用寄存器的位数 取决于机器字长的位数。 ...
  • 寄存器的认识

    2019-07-23 08:53:55
    寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。 对于8086的系统: 1.寄存器按照功能的不同可分为通用寄存器(ax,bx,cx,dx,sp,bp,si,di。其中的前...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,503
精华内容 2,601
关键字:

寄存器的组成