IA-32平台下的主要寄存器有一下几类:
- 通用寄存器
- 段寄存器
- 指令寄存器
- 通用寄存器是8个32为寄存器,用于存储正在处理的数据
-
EAX
用于操作数和结果的累加器 -
EBX
指向数据内存段中的数据的指针 -
ECX
字符串和循环操作的计数器 -
EDX
IO指针 -
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
网友评论