IA-32平台下的主要寄存器有一下几类:
- 通用寄存器
- 段寄存器
- 指令寄存器
- 通用寄存器是8个32为寄存器,用于存储正在处理的数据
-
EAX用于操作数和结果的累加器 -
EBX指向数据内存段中的数据的指针 -
ECX字符串和循环操作的计数器 -
EDXIO指针 -
EDI用于字符串操作的目标数据指针 -
ESI用于字符串操作的源数据指针 -
ESP堆栈指针 -
EBP堆栈数据指针
前4个通用寄存器可也可以通过16位或者8位名称引用,以表示寄存器的老版本。例如:EAX的低 16 位成为AX,AX的高 8 位称为AH,低 8 位称为AL。
- 段寄存器, 6个16位寄存器,用于处理内存访问。
-
CS代码段(code segment) -
DS数据段(data segment) -
SS堆栈段(stack segment) -
ES附加段指针(extra segment) -
FS附加段指针 -
GS附加段指针
每个段寄存器都是16位的,包含指向内存特定段的起始位置的指针。CS 包含指向内存代码段中的指针。代码段是内存中存储指令码的位置。处理器按照 CS 寄存器的值和 EIP 指令指针寄存器中包含的偏移值从内存获得指令码。程序不能显式地加载或者改变 CS 寄存器。当程序被分配一个内存空间时,处理器将为 CS 寄存器赋值。
指令指针寄存器,EIP 有时也被称为程序计数器,它指向要执行的下一条指令。
标志寄存器,一个16位的标志寄存器,通常称为程序状态字(Program Status Word,PSW)PSW。
-
CF:进位标志,最高位产生了进位或借位,CF=1,否则CF=0 -
ZF:零标志,预算结果为0,ZF=1,否则 ZF=0 -
SF:符号标志,运算结果为负,SF=1,否则 SF=0 -
OF:溢出标志,有符号数的运算如果发生了溢出,OF=1,否则 OF=0