寄存器表


类型名称二进制码寄存器说明
多功能寄存器 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)寄存器:
EFLAGS 中的 32 位被分成 0-31 个二进制位分别使用;
第 0、2、4、6、7、11 位是状态标志位;
第 10 位是字符串操作控制标志位;
其他标志位一般不用或无权使用
 

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 系列寄存器, 等用到再说吧.
posted @ 2011-11-05 13:50  findumars  Views(789)  Comments(0Edit  收藏  举报