x86的寄存器
包括:
- 32位的通用寄存器:
- EAX
- EBX
- ECX
- EDX
- EBP
- ESP
- ESI
- EDI
- 16位段寄存器:
- CS
- DS
- SS
- ES
- FS
- GS
- 32位标志寄存器 EFLAGS
- 32位指令指针寄存器:EIP
- 32位控制寄存器:
- CR0
- CR1
- CR2
- CR3
- 48位全局描述符表寄存器:
- GTDR
- IDTR
- 16位局部描述符表寄存器:LDTR
- 任务状态描述符寄存器:TR
- 32位调试寄存器:DR0~DR7
CR0寄存器
结构:
位置 | 名称 | 功能 |
---|---|---|
0 | PE | Protection Enable,为1,进入保护模式;为0,进入实模式 |
1 | MP | Monitor Coprocessor,为1,表示有协处理器;为0,表示没有协处理器 |
2 | EM | Emulate Coprocessor,没有协处理器,遇到浮点指令,产生协处理器无效中断,使用软件方法模拟协处理器 |
3 | TS | Task Switched,任务转换完成后置1 |
4 | ET | Processor Extension Type,为1表示协处理器是32位的80387,为1表示是16位的80287 |
31 | PG | Paging Enable,1表示开启分页,为0表示关闭分页 |
CR1保留未使用
CR2是页异常线性地址寄存器。发生缺页异常的时候,将内存地址放入该寄存器。
调试寄存器DR0~DR3:内存断点寄存器
DR4~DR5:保留
DR6:断点状态寄存器
DR7:断点控制标志寄存器
CPU执行内存相关指令时,检查DR7的标志,将相关指令的地址和DR0~DR3进行比较,若相等,则触发调试异常
EFLAGS
大部分标志位和16位的8086一样。第12、13位IOPL时特权许可位
执行IO指令时,CPU比较CS中的特权位和IOPL,只有指令够高才能执行
0~17:
CF,0,PF,0,AF,0,ZF,SF,TF,IF,DF,OF,IOPL,NT,0,RF,VM