8个32位的常规目的寄存器
地址
|
名称
|
描述
|
EAX*
|
累加器
|
计算操作数和存放结果数据
|
EBX
|
基础寄存器
|
指向DS数据段的数据指针
|
ECX*
|
计数寄存器
|
字符串和循环操作的计数器
|
EDX*
|
数据寄存器
|
输入/输出指针
|
ESI
|
源索引
|
字符串操作的源地址指针
|
EDI
|
目的索引
|
字符串操作的目的地址指针
|
ESP
|
栈指针
|
栈指针,不能直接使用
|
EBP
|
基址指针
|
栈的数据指针
|
注意:尽管它们被称为通用寄存器,但只有标了‘*’号的寄存器能在Windows编程中通用。
6个16位的段寄存器,定义内存中的段
地址
|
名称
|
描述
|
CS
|
代码段
|
存储指令和执行的地方
|
DS, ES, FS, GS
|
数据段
|
数据段
|
SS
|
堆栈段
|
当前程序存储堆栈的地方
|
2个32位的不属于任何种类的寄存器
地址
|
名称
|
描述
|
EFLAGS
|
代码段
|
状态、控制和系统标志
|
EIP
|
指令指针
|
下一条将要执行指令的地址
|
基本指令集
X86指令非常多,但我们通常都无需全部用到。下面的一些简单指令是你一开始就要掌握的:
指令
|
描述
|
ADD* reg/memory, reg/memory/constant
|
将两个操作数作加法运算,并将结果存入到第一个操作数,如果有进位则会设置CF标志。
|
SUB* reg/memory, reg/memory/constant
|
从第一个操作数中减去第二个操作数,并将结果存入到第一个操作数中
|
AND* reg/memory, reg/memory/constant
|
在操作数之间执行逻辑位与运算,并将结果存入到第一个操作数中
|
OR* reg/memory, reg/memory/constant
|
在操作数之间执行逻辑位或运算,并将结果存入到第一个操作数中
|
XOR* reg/memory, reg/memory/constant
|
在操作数之间执行逻辑位异或运算,并将结果存入到第一个操作数中。注意不能XOR两个内存操作数。
|
MUL reg/memory
|
将操作数与累加器(eax)相乘,并将结果存入累加器
|
DIV reg/memory
|
从累加器中除以操作数,并将结果存入累加器
|
INC reg/memory
|
将操作数的值增1,并将结果存回到操作数中
|
DEC reg/memory
|