寄存器
寄存器用途和英文全称
32位
寄存器类别和用途
基本程序执行寄存器(basic program execution registers)。8 个通用寄存器,6 个段寄存器,一个处理器状态标志寄存器(EFLAGS),和一 个指令指针寄存器(EIP)。
EAX、AX、AH和AL
一些寄存器的组成部分可以处理 8 位的值。例如,AX 寄存器的高 8 位被称为 AH,而低 8 位被称为 AL。同样的重叠关系也存在于 EAX、EBX、ECX 和 EDX 寄存器中:
32 位 | 16 位 | 8 位(高) | 8 位(低) |
---|---|---|---|
EAX | AX | AH | AL |
EBX | BX | BH | BL |
ECX | CX | CH | CL |
EDX | DX | DH | DL |
其他通用寄存器只能用 32 位或 16 位名称来访问,如下表所示:
32 位 | 16 位 | 32 位 | 16 位 |
---|---|---|---|
ESI | SI | EBP | BP |
EDI | DI | ESP | SP |
通用寄存器有特殊用法:
- 乘除加减指令默认使用EAX。它常常被称为扩展累加器(extended accumulator)寄存器。
- CPU 默认使用 ECX 为循环计数器
- ESI 和 EDI 用于高速存储器传输指令,有时也被称为扩展源变址(extended source index)寄存器和扩展目的变址(extended destination index)寄存器。
- 高级语言通过 EBP 来引用堆栈中的函数参数和局部变量。除了高级编程,它不用于一般算术运算和数据传输。它常常被称为扩展帧指针(extended frame pointer)寄存器。
- ebp指向栈底,esp指向栈顶
- edx保存整数除法后的余数
指令指针
指令指针(EIP)寄存器中包含下一条将要执行指令的地址,指向下一个执行的指令 Extend Instruction(向导) Pointer。某些机器指令能控制 EIP,使得程序分支转向到一个新位置。call和ret会改变其值。
状态标志位
状态标志位反映了 CPU 执行的算术和逻辑操作的结果。其中包括:溢出位、符号位、零标志位、辅助进位标志位、奇偶校验位和进位标志位。下述说明中,标志位的缩写紧跟在标志位名称之后:
- 进位标志位(CF),与目标位置相比,无符号算术运算结果太大时,设置该标志位。
- 溢出标志位(OF),与目标位置相比,有符号算术运算结果太大或太小时,设置该标志位。
- 符号标志位(SF),算术或逻辑操作产生负结果时,设置该标志位。
- 零标志位(ZF),算术或逻辑操作产生的结果为零时,设置该标志位。
- 辅助进位标志位(AC),算术操作在 8 位操作数中产生了位 3 向位 4 的进位时,设置该标志位。
- 奇偶校验标志位(PF),结果的最低有效字节包含偶数个 1 时,设置该标志位,否则,清除该标志位。一般情况下,如果数据有可能被修改或损坏时,该标志位用于进行 错误检测。
通用寄存器:
英文 | 功能 | 寄存器 | 编号(二进制) | 编号(十进制) | 字母 | 全称 | 功能 | ||
---|---|---|---|---|---|---|---|---|---|
32位 | 16位 | 8位 | D | double | 双 | ||||
accumulator | 累加 | EAX | AX | AL | 000 | 0 | L | low | 低位 |
count | 计数 | ECX | CX | CL | 001 | 1 | H | high | 高位 |
data | 数据 | EDX | DX | DL | 010 | 2 | E | extend | 扩展 |
base | 基址 | EBX | BX | BL | 011 | 3 | R | register | 寄存器 |
Stack Pointer | 堆栈指针 | ESP | SP | AH | 100 | 4 | I | immediate | 立即数 |
Base Pointer | 基址指针 | EBP | BP | CH | 101 | 5 | M | memory | 内存 |
Source Index | 源变址 | ESI | SI | DH | 110 | 6 | B | byte | 字节 |
Destination Index | 目的变址 | EDI | DI | BH | 111 | 7 | W | word | 字 |
标志寄存器(FLAG/16位):
英文 | 功能 | 全称 | 标志形式 |
---|---|---|---|
OF | 溢出标志 | overflow flag | 状态标志 |
SF | 符号标志 | sign flag | 状态标志 |
ZF | 零标志 | zero flag | 状态标志 |
CF | 进位标志 | carry flag | 状态标志 |
AF | 辅助进位标志 | auxiliary carry flag | 状态标志 |
PF | 奇偶标志 | parity flag | 状态标志 |
DF | 方向标志 | direction flag | 控制标志 |
IF | 中断标志 | interrupt flag | 控制标志 |
TF | 陷进标志 | trap flag | 控制标志 |
段寄存器(16位):
英文 | 含义 | 全称 | 功能 |
---|---|---|---|
CS | 代码段 | Code Segment | 指明代码段的起始地址 |
DS | 数据段 | Data Segment | 指明数据段的起始地址 |
SS | 堆栈段 | Stack Segment | 指明堆栈段的起始地址 |
ES | 附加段 | Extra Segment | 指明附加段的起始地址 |
指令指针寄存器(32位)EIP:Extend Instruction Pointer