IA-32 寄存器类型
Basic program execution registers
x87 FPU registers
MMX registers
XMM registers
Control registers
Memory management registers
Debug registers
Memory management registers
Debug registers
Memory type range registers
Machine specific registers
Machine check register
…
基本程序运行寄存器(Basic program execution registers)
基本程序运行寄存器由4类寄存器组成。
- 通用寄存器(General Purpose Registers,32位,8个)
- 段寄存器(Segment Registers,16位,6个)
- 程序状态与控制寄存器(Program Status and Control Register,32位,1个)
- 指令指针寄存器(Instruction Pointer,32位,1个)
通用寄存器
通用寄存器是一种通用型的寄存器,用于传送和暂存数据,也可参与算数逻辑运算,并保存计算结果。
寄存器 | 名称 | 32位 | 16位 | 高8位 | 低8位 | 主要用途 |
---|---|---|---|---|---|---|
EAX | 累加器 | EAX | AX | AH | AL | 针对操作数和结果数据 |
EBX | 基址寄存器 | EBX | BX | BH | BL | DS段中的数据指针 |
ECX | 计数器 | ECX | CX | CH | CL | 字符串和循环操作 |
EDX | 数据寄存器 | EDX | DX | DH | DL | I/O指针 |
EBP | 扩展基址指针寄存器 | EBP | BP | - | - | SS段中栈内数据指针 |
ESI | 源变址寄存器 | ESI | SI | - | - | 字符串操作源指针 |
EDI | 字符串操作目标指针 | EDI | DI | - | - | 字符串操作目标寄存器 |
ESP | 栈指针寄存器 | ESP | SP | - | - | 栈指针寄存器 |
段寄存器
IA-32 的保护模式中,段是一种内存保护技术,它把内存划分为多个区段,并为每个区段赋予起始地址、范围、访问权限等,以保护内存。此外同分页技术一起用于将虚拟内存变更为实际物理内存。段内存记录在 SDT(Segment Descriptor Table,段描述符表)中,而段寄存器就持有这些 SDT 的索引。
段寄存器共6个,每个寄存器大小为16位。每个段寄存器指向的描述符与虚拟内存结合,形成一个线性地址。
寄存器 | 名称 | 用途 |
---|---|---|
CS | Code Segment | 代码段寄存器 |
SS | Stack Segment | 栈段寄存器 |
DS | Data Segment | 数据段寄存器 |
ES | Extra ( Data ) Segment | 附加(数据)段寄存器 |
FS | Data Segment | 数据段寄存器 |
GS | Data Segment | 数据段寄存器 |
程序状态与控制寄存器(EFLAGS)
IA-32 中标志寄存器的名称为 EFLAGS,其大小为 4 个字节(32位),由原来的 16 位 FLAGS 寄存器扩展而来。EFLAGS 寄存器的每位都有其意义。
位数 | Status | 名称 | 全名 | 含义 |
---|---|---|---|---|
0 | S | CF | Carry Flag | 无符号整数溢出时为1,否则为0 |
2 | S | PF | Parity Flag | |
4 | S | AF | Auxiliary Carry Flag | |
6 | S | ZF | Zero Flag | 若运算结果为 0,则其值为1,否则为0 |
7 | S | SF | Sign Flag | |
8 | X | TF | Trap Flag | |
9 | X | IF | Interrupt Enable Flag | |
10 | C | DF | Direction Flag | |
11 | S | OF | Overflow Flag | 有符号整数溢出时被设置为1.此外,MSB(Most Significant Bit,最高有效位)也被设置为1 |
12-13 | X | IOPL | I/O Privilege Level | |
14 | X | NT | Nested Task | |
16 | X | RF | Resume Flag | |
17 | X | VM | Virtual-8086 Mode | |
18 | X | AC | Alignment Check | |
19 | X | VIF | Virtual Interrupt Flag | |
20 | X | VIP | Virtual Interupt Pending | |
21 | X | ID | ID Flag |
Status Describe:
S: Indicates a Status Flag
C: Indicates a Control Flag
X: Indicates a System Flag
注: 没有写出的为保留位,没有使用
指令指针寄存器(EIP)
指令指针寄存器 EIP(Instruction Pointer),用于指向下一条要执行的指令。