寄存器
1.通用寄存器
定义
通用寄存器也叫做多功能寄存器,可分为通用数据寄存器,指针寄存器和变址寄存器
说明
1.通用数据寄存器可以作为32位(EAX,EBX,ECX,EDX),16位(AX,BX,CX,DX),8位(AH AL,BH BL,CH,CL,DH DL)
如果作为8位或者16位时,只改变32位寄存器的一部分,不会对其他部分进行修改
2.变址寄存器可作为32位(ESP,EBP,ESI,ESD),也可作为16位(SP,BP,SI,SD)
ESP和EBP用于堆栈操作,ESI,EDI用于串操作
变址寄存器也可作为数据寄存器使用
通用数据寄存器
1 EAX(Accumulate,累加器)
2 EBX(Base,基址) EBX主要用于存放存储单元的偏移地址
3 ECX(Count,计数) ECX可以多种指令的计数值
用于计数的指令有:重复的串操作指令,移位指令,循环移位指令,LOOP/LOOPD指令
移位和循环移位指令用CL计数
串指令操作用CX计数
LOOP/LOOPD指令用CX或者ECX计数
4 EDX(Data,数据),用于保存乘法运算产生的部分积,或者除法运算中的部分被除数
指针寄存器和变址寄存器
1 ESP(Stack Pointer,堆栈指针) ESP寻址一个叫做堆栈的存储区,通过这个指针存取堆栈存储器的数据
2 EBP(Base Pointer,基址指针) EBP用来存放访问堆栈段的一个数据区的基地址
3 ESI(Source Index,源变址) ESI用于寻找串操作指令的源字符串
4 EDI(Destination Index,目的变址) EDI用于串操作指令的目的字符串
2.指令指针寄存器EIP
定义
EIP是一个专用寄存器,用于寻址当前需要取出的指令字节,当CPU从内存中取出一个指令字节后,EIP的值自动加1,指向下一个指令字节。
注意
程序员不可对EIP/IP的值进行存取操作,程序中的转移指令,返回指令,中断处理指令可对EIP/IP进行操作
3.标志寄存器EFLAGS
定义
EFLAGS用于指示微处理器的状态并控制他的操作
分类
状态标志:
1.进位标志CF(Carry Flag)
运算过程中最高位有借位或者进位时,CF为1,否则为0
2.奇偶标志PF(Parity Flag)
该标志位反映了运算结果中低8位中1的个数,若为偶数则为,否则为0
3.辅助进位标志 AF(Auxiliary Flag)
若运算中低4位中的最高位有进位或者借位,AF为1,否则为0
AF一般用于BCD运算时是否要进行十进制调位的依据
4.零标志ZF(Zero Flag)
反映运算结果是否为0,若结果为0,则ZF为1,否则为0
5.符号标志位SF(Sign Flag)
用来记录运算结果的符号,若结果为负,则SF为1,否则为0
6.溢出标志OF(Overflow Flag)
反映有符号数运算结果是否发生溢出,若发生溢出,则OF为1,否则为0
OF=最高位进位^次高位进位
控制标志
1.方向标志DF(Direction Flag)
用来控制串指令操作的执行,若DF=1,则串指令的传送方向是从低地址到高地址的方向进行,若DF=0,则串指令的传送方向是从高地址到低地址
2.中断标志IF(Interrupt Flag)
可屏蔽中断标志,若IF=1,CPU响应外部可屏蔽中断,若IF=1,CPU不响应外部可屏蔽中断
3.陷阱标志TF(Trap Flag)
当TF=1,CPU处于单步方式,当TF=0,CPU处于连续方式
单步方式常用于程序的调试
4.段寄存器
代码段寄存器CS(Code Segment)
代码段是一个存储区域,用来保存微处理器使用的程序代码,代码段寄存器CS定义代码段的起始地址
数据段寄存器DS(Data Segment)
数据段包含了程序使用的大部分数据的存取区,数据段寄存器DS定义数据段的起始地址
附加段寄存器EX(Extra Segment)
附加段是为某些串操作指令存放目的操作数而附加的一个数据段,附加段寄存器EX定义附加段的起始地址
堆栈段寄存器SS(Stack Segment)
堆栈用来暂时存放程序运行中的一些数据和地址信息,堆栈寄存器SS定义堆栈段的首地址
通过堆栈段寄存器SS和堆栈指针寄存器ESP/SP可以访问堆栈栈顶的数据
通过堆栈段寄存器SS和基址指针寄存器EBP/BP可以寻址堆栈栈顶下方的数据