标志寄存器

push,pop指令补充:

push的是立即数:减4

push的是寄存器:减寄存器宽度

(不能push8位寄存器和内存)

pop指令同样不能pop8位容器

pop指令加几取决与后面容器宽度

pushad指令:

把八个通用寄存器存到堆栈

存完后可以随意修改值,使用寄存器(esp.ebp值不要修改)

 popad指令:

在使用完寄存器后恢复寄存器原来的状态,保护现场

 标志寄存器:

标志寄存器_第1张图片

 如何拆?

 显示的c.p.a.z...等是拆好的

如果没拆好看到EFL的202

202对应的二进制形式为001000000010即对应c.p.a.z...标志寄存器_第2张图片

 CF:

标志寄存器_第3张图片

此时al为0xff再加一越位,进位的1到cf中 (不会到ah中)

 PF:

标志寄存器_第4张图片

 例如:

 AF:

标志寄存器_第5张图片

位数一半的位置进位则变1

 即32位时ffffffff

      16位时ffff   

       8位时ff

进位时af会变一

注意:mov指令不影响标志寄存器

ZF:

标志寄存器_第6张图片

 xor指令是做异或运算,会影响标志寄存器的值(mov不会)对寄存器做xor运算是清零运算

SF:

标志寄存器_第7张图片

 最高位是相对于数据宽度而言。例如:al最高位为二进制数第8位,ax最高位为二进制数16位

OF:

溢出时为1不溢出时为0

注意:有符号时考虑OF,看OF变化

无符号位考虑CF,看CF变化标志寄存器_第8张图片

标志寄存器_第9张图片

 ADC指令:

标志寄存器_第10张图片

 例如:

 在12ffc4中加2本来应变为3D,但CF的值为1也参与运算,变为3E.

SBB指令:

标志寄存器_第11张图片

 XCHG指令:标志寄存器_第12张图片

 MOVS指令:

可以两边都是内存

标志寄存器_第13张图片

 

 

 

 

 

你可能感兴趣的:(网络安全)