寄存器表
类型 | 名称 | 二进制码 | 寄存器说明 |
---|---|---|---|
多功能寄存器 | AL | 0 | 累加寄存器低八位 |
AH | 100 | 累加寄存器低八位 | |
AX | 0 | 16 位累加寄存器 | |
EAX | 0 | 32 位累加寄存器 | |
BL | 11 | 基址寄存器低八位 | |
BH | 111 | 基址寄存器低八位 | |
BX | 11 | 16 位基址寄存器 | |
EBX | 11 | 32 位基址寄存器 | |
CL | 1 | 计数寄存器低八位 | |
CH | 101 | 计数寄存器低八位 | |
CX | 1 | 16 位计数寄存器 | |
ECX | 1 | 32 位计数寄存器 | |
DL | 10 | 数据寄存器低八位 | |
DH | 110 | 数据寄存器低八位 | |
DX | 10 | 16 位数据寄存器 | |
EDX | 10 | 32 位数据寄存器 | |
指针寄存器 | SP | 100 | 16 位堆栈指针寄存器 |
ESP | 100 | 32 位堆栈指针寄存器 | |
BP | 101 | 16位基址指针寄存器 | |
EBP | 101 | 32 位基址指针寄存器 | |
变址寄存器 | DI | 111 | 16 位目标变址寄存器 |
EDI | 111 | 32位目标变址寄存器 | |
SI | 110 | 16 位源变址寄存器 | |
ESI | 110 | 32位源变址寄存器 | |
专用寄存器 | IP | * | 16 位指令指针寄存器 |
EIP | * | 32 位指令指针寄存器 | |
FLAGS | * | 16 位标志寄存器 | |
EFLAGS | * | 32位标志寄存器 | |
段寄存器 | CS | 1 | 代码段寄存器 |
DS | 11 | 数据段寄存器 | |
ES | 0 | 附加段寄存器 | |
SS | 10 | 堆栈段寄存器 | |
FS | 100 | 标志段寄存器 | |
GS | 101 | 全局段寄存器 | |
控制寄存器 | CR0 | 0 | 控制寄存器零 |
CR1* | 1 | 控制寄存器一 | |
CR2 | 10 | 控制寄存器二 | |
CR3 | 11 | 控制寄存器三 | |
CR4 | 100 | 控制寄存器四 | |
CR5* | 101 | 控制寄存器五 | |
CR6* | 110 | 控制寄存器六 | |
CR7* | 111 | 控制寄存器七 | |
调试寄存器 | DR0 | 0 | 调试寄存器零 |
DR1 | 1 | 调试寄存器一 | |
DR2 | 10 | 调试寄存器二 | |
DR3 | 11 | 调试寄存器三 | |
DR4* | 100 | 调试寄存器四 | |
DR5* | 101 | 调试寄存器五 | |
DR6 | 110 | 调试寄存器六 | |
DR7 | 111 | 调试寄存器七 | |
任务寄存器 | TR0 | 0 | 任务寄存器零 |
TR1 | 1 | 任务寄存器一 | |
TR2 | 10 | 任务寄存器二 | |
TR3 | 11 | 任务寄存器三 | |
TR4 | 100 | 任务寄存器四 | |
TR5 | 101 | 任务寄存器五 | |
TR6 | 110 | 任务寄存器六 | |
TR7 | 111 | 任务寄存器七 | |
浮点寄存器 | ST0 | 0 | 浮点寄存器零 |
ST1 | 1 | 浮点寄存器一 | |
ST2 | 10 | 浮点寄存器二 | |
ST3 | 11 | 浮点寄存器三 | |
ST4 | 100 | 浮点寄存器四 | |
ST5 | 101 | 浮点寄存器五 | |
ST6 | 110 | 浮点寄存器六 | |
ST7 | 111 | 浮点寄存器七 | |
多媒体寄存器 | MM0 | 0 | 媒体寄存器零 |
MM1 | 1 | 媒体寄存器一 | |
MM2 | 10 | 媒体寄存器二 | |
MM3 | 11 | 媒体寄存器三 | |
MM4 | 100 | 媒体寄存器四 | |
MM5 | 101 | 媒体寄存器五 | |
MM6 | 110 | 媒体寄存器六 | |
MM7 | 111 | 媒体寄存器七 | |
单指令流、多数据流寄存器 | XMM0 | 0 | 单指令流、多数据流寄存器零 |
XMM1 | 1 | 单指令流、多数据流寄存器一 | |
XMM2 | 10 | 单指令流、多数据流寄存器二 | |
XMM3 | 11 | 单指令流、多数据流寄存器三 | |
XMM4 | 100 | 单指令流、多数据流寄存器四 | |
XMM5 | 101 | 单指令流、多数据流寄存器五 | |
XMM6 | 110 | 单指令流、多数据流寄存器六 | |
XMM7 | 111 | 单指令流、多数据流寄存器七 | |
注: 英文名称有星号"*"的表示作为保留域, 实际并没有使用, 二进制码有星号"*"表示无需二进制数表示 |
根据 www.olanguage.org 的资料整理.
EBP基址指针寄存器,存放堆栈基址,由于ESP指针是会随时发生改变的,所以,出于程序分析上的考虑,使用EBP寄存器来对堆栈进行访问,但对于编译器来说,EBP担任了对堆栈基址访问的大任,所以,每个函数在开始时都要保存原来的EBP,设置自己的堆栈地址(mov ebp,esp),在函数结束返回时恢复原来的EBP,使上级函数可以正常使用EBP。
通用寄存器:8个,包括数据寄存器、地址指针寄存器、变址寄存器。
数据寄存器4个:AX BX CX DX,它们又可作为8个8位的寄存器使用,即AH BH CH DH AL BL CL DL
AX称为累加器,I/O指令均使用该寄存器,访问外部硬件和接口。
BX称为基址寄存器,在访问内存时用于存放基地址。
地址指针寄存器2个:SP BP
SP称为堆栈指针寄存器,BP称为基址指针寄存器,在作数组和字符串运算时,用于存放内存的偏移地址。
变址寄存器2个:SI DI
SI称为源变址寄存器,DI称为目的变址寄存器,用于数据块操作的内存寻址。
还是找本汇编书慢慢的看
汇编要是入门了,很有意思
通用寄存器 | |||||
---|---|---|---|---|---|
EAX | 累加(Accumulator)寄存器 | AX(AH、AL) | 常用于乘、除法和函数返回值 | ||
EBX | 基址(Base)寄存器 | BX(BH、BL) | 常做内存数据的指针, 或者说常以它为基址来访问内存. | ||
ECX | 计数器(Counter)寄存器 | CX(CH、CL) | 常做字符串和循环操作中的计数器 | ||
EDX | 数据(Data)寄存器 | DX(DH、DL) | 常用于乘、除法和 I/O 指针 | ||
ESI | 来源索引(Source Index)寄存器 | SI | 常做内存数据指针和源字符串指针 | ||
EDI | 目的索引(Destination Index)寄存器 | DI | 常做内存数据指针和目的字符串指针 | ||
ESP | 堆栈指针(Stack Point)寄存器 | SP | 只做堆栈的栈顶指针; 不能用于算术运算与数据传送 | ||
EBP | 基址指针(Base Point)寄存器 | BP | 只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送 | ||
指令指针寄存器 | |||||
EIP | 指令指针(Instruction Pointer)寄存器 | 总是指向下一条指令的地址; 所有已执行的指令都被它指向过. | |||
标志寄存器 | |||||
EFLAGS |
标志(Flag)寄存器: |
0 | CF | 进位(Carry)标志 | 目标无法容纳无符号算术运算的结果, 需要进位或借位时被设置; 可用 STC 指令设置, CLC 指令取消. |
1 | |||||
2 | PF | 奇偶(Parity)标志 | 低 8 位中有偶数个 1 时被设置 | ||
3 | |||||
4 | AF | 辅助(Auxiliary)标志 | 使用 BCD 码运算导致 3 位到 4 位产生进位时被设置 | ||
5 | |||||
6 | ZF | 零(Zero)标志 | 运算结果为 0 时被设置 | ||
7 | SF | 符号(Sign)标志 | 运算结果为负数时被设置 | ||
8 | |||||
9 | |||||
10 | DF | 方向(Direction)标志 | 字符串操作是从高位到低位时被设置; 可用 STD 指令设置, CLD 指令取消. | ||
11 | OF | 溢出(Overflow)标志 | 因有符号运算的结果太宽而导致数据丢失时被设置 | ||
... | |||||
31 | |||||
... |
其中的 EAX、ECX、EDX 三个寄存器相对自由些, 所以练习时用它们较多.
没理会段寄存器: CS、DS、SS、ES、FS、GS, 是因在 Win32 保护模式下编程它们不再重要了.
还有 FPU、MMX 系列寄存器, 等用到再说吧.