Site hosted by Angelfire.com: Build your free website today!
 
 


80386 CPU寄存器

  高位31      16 15      0 低位
    ┌───────┬───┬───┐
  EAX│       │AH  AX  AL│  ─┐
    ├───────┼───┼───┤   │
  EBX│       │BH  BX  BL│   │
    ├───────┼───┼───┤   │通用数据寄存器
  ECX│       │CH  CX  CL│   │
    ├───────┼───┼───┤   │
  EDX│       │DH  DX  DL│  ─┘
    ├───────┼───┴───┤
  ESI│       │   SI   │
    ├───────┼───────┤
  EDI│       │   DI   │
    ├───────┼───────┤
  EBP│       │   BP   │
    ├───────┼───────┤
  ESP│       │   SP   │
    └───────┴───────┘
    ┌───────┬───────┐
  EIP│       │   IP   │指令指针寄存器
    └───────┴───────┘
    ┌───────┬───────┐
EFLAGS │       │  FLAGS   │标志寄存器
    └───────┴───────┘
            ┌───────┐
      ┌  代码段│   CS   │ ─┐
      描     ├───────┤  │
      │  堆栈段│   SS   │  │
      述     ├───────┤  │
 段 描述 │   ┌ │   DS   │  │段选择寄存器
 基←符寄←┤  数 │ ├───────┤  │
 址 存器 │   │ │   ES   │  │
      符  据 │ ├───────┤  │
      │   │ │   FS   │  │
      表  段 │ ├───────┤  │
      └   └ │   GS   │ ─┘
            └───────┘
   47         16 15    0
   ┌──────────┬─────┐
┌─ │ 线性基地址(32位)│ 段界限 │GDTR ┐
│  ├──────────┼─────┤   │系统地址寄存器
│┌ │          │     │IDTR ┘
││ └──────────┴─────┘
│└→中断描述符表IDT(Interrupt Descriptor Table)
└─→全局描述符表GDT(Global Descriptor Table)
              15     0
           任务 ┌─────┐
      描述  ┌ 状态段│  TR  │任务状态段寄存器 ┐系统段
基址等 ← 符寄 ←┤    ├─────┤         │选择
      存器  └ 局部描│  LDTR  │局部描述符表寄存器┘寄存器
           述符表└─────┘


  EFLAGS(标志寄存器):
  ①IOPL(第12、13位)是 I/O特权标志,用于指定 I/O操作处于0-3 特权层中的哪一层。
  ②NT(位14)是嵌套标志,若NT=1,表示当前执行的任务嵌套于另一任务中,执行完该任务后,要返回到原来的任务中去。
  ③VM(位17)是虚拟8086方式。当80386 处于保护方式时,如果使VM置位,80386将 转为虚拟8086方式。VM位只能在保护方式下由IPET指令(若当前的特权级=0) 或在任何特权级下由任务切换设置。VM位不受POPF指令的影响,PUSHF 指令总是使该位清零。在中断处理过程中被压入或在任务切换期间被保存的EFLAGS的映象中的VM位将包含一个1, 条件是被中断的码正作为虚拟的8086任务而被执行。
  ④RF(位16)是恢复标志。……
  80386 的每一个段选择寄存器(CS、SS、DS、ES、FS、GS,程序员可见)都有一个与之相连系的段描述符寄存器(程序员不可见)。每个段描述符寄存器都保存着一个32位的段基地址,一个32位的段界限(大小)和其他一些必要的属性。当一个段选择寄存器中的值确定以后,80386 中的硬件会自动根据段选择寄存器中的值即索引,从相应的表中取出一个 8字节描述符,装入相应的段描述符寄存器中。每当出现存储器访问时,就可由所用的段选择寄存器,直接用相应的段描述符寄存器中的段基地址。
  由相关的描述符组成各个表:GDT(全局描述符表)、IDT(中断描述符表)、LDT(局部描述符表Local Descriptor Table)、TSS(任务状态段 Task State Segment)。 以上各表的基址和它们的界限由相应的寄存器(系统地址寄存器GDTR和LDTR、系统段选择寄存器LDTR和TR)保存。
  控制寄存器用于保存全局性(不是特定的个别任务)的机器状态。
  ①机器控制寄存器CR0(低16位作为机器状态字MSW 与80286兼容)
 31                   4  3  2  1  0
┌─┬─────── ─────────┬─┬─┬─┬─┬─┐
│PG│  保留        保留   │ET│TS│EM│MP│PE│
└─┴─────── ─────────┴─┴─┴─┴─┴─┘
  其中PG是分页允许。ET是处理器扩展类型(80287或80387),如果ET置位,则适用与80387 兼容的32位规程;若ET复位,则采用与80287 兼容的16位规程。TS是任务切换,不论什么时候完成任务切换,TS位都自动置位。EM是模拟协处理器,EM置位,将使所有的协处理器操作码都产生协处理器无效陷阱(异常7);EM复位,将允许协处理器操作码在实际的80287或80387(默认)上执行。MP是监控协处理器,与TS一起使用来确定WAIT操作码是否产生协处理器无效陷阱(异常7) ,即当MP=1且TS=1时,WAIT产生陷阱;否则不产生陷阱。PE是保护允许,PE置位,CPU 进入保护方式;PE复位,CPU 处于实模式。PE可以由加载MSW 或加载CR0 指令置位,为了与80286 兼容,PE位不能由LMSW指令复位。
  ②页故障线性地址寄存器CR2
  ③页目录基址寄存器CR3
  其中低12位保留
  排错寄存器DR0-DR3 可指定4 个线性断点地址,DR6用于设置断点,DR7用于显示断点的当前状态。
  测试寄存器TR6、TR7……

 
 
学习笔记