AF,ZF,SF,OF
标志传送指令
内容纲要
1.AF,ZF,OF
2.LAHF,SAHF
3.PUSHF,POPF
详细内容
1.AF
AF(Auxiliary_Flag):辅助进位标志位。运算过程中看最后四位,不论长度为多少。最后四位向前有进位或者借位,AF=1,否则AF=0;
2.ZF
ZF(Zero_FLag):零标志位。运算结果为零则ZF=1,否则ZF=0;
3.SF
SF(Sign_Flag):符号标志位。根据具体的长度,指令执行之后将该长度的最高位的值赋给SF
4.OF
OF(overflow):溢出标志位。
mov ds:[0x0012ff40],0x33
add ds:[0x0012ff40],0x4f //of = 1,sf = 1,af = 1,pf=1,cf = 0
两个操作数做运算,只要结果在-128~127中,of = 0,否则of=1(一个字节),长度改变,范围也随之发生改变.
5.LAHF,SAHF
LAHF(Load Flag to AH):将EFL寄存器的最后一个字节放到AH寄存器中
SAHF(Store AH into Flags):将AH的内容放入EFL的最后一个字节,其中需要注意的是第二位默认为1,第4、6位为0.
6.PUSHF,POPF
7.PUSHFD,POPFD
32位,PUSHFD是将寄存器的值写入内存,而POPFD是将内存中的32位数值写入EFL,具体是哪一内存单元值由ESP决定。
32位: EAX ECX EDX EBX ESP EBP ESI EDI
16位:AX CX DX BX SP BP SI DI
8位: AL CL DL BL AH CH DH BH
课堂练习:
1.练习各标志位的值的改变
mov DWORD PTR ds:[0x0012ff40],0x3333
sub DWORD PTR ds:[0x0012ff40],0x3f //af=1
mov DWORD PTR ds:[0x0012ff40],0x3333
add DWORD PTR ds:[0x0012ff40],0x3f //af=1
mov WORD ptr ds:[0x0012ff40],0x3333
sub WORD ptr ds:[0x0012ff40],0x3f //af=1
mov ds:[0x0012ff40],0x33
sub ds:[0x0012ff40],0xf3 //af=0
2.LAHF,SAHF,PUSHF,POPF,PUSHFD,POPFD,STD,CLD,STC,CLC,CMC
标志传送指令
内容纲要
1.AF,ZF,OF
2.LAHF,SAHF
3.PUSHF,POPF
4.PUSHFD,POPFD
5.STC,CLC,STD,CLD,CMC
6.32位,16位和8位寄存器详细内容
1.AF
AF(Auxiliary_Flag):辅助进位标志位。运算过程中看最后四位,不论长度为多少。最后四位向前有进位或者借位,AF=1,否则AF=0;
2.ZF
ZF(Zero_FLag):零标志位。运算结果为零则ZF=1,否则ZF=0;
3.SF
SF(Sign_Flag):符号标志位。根据具体的长度,指令执行之后将该长度的最高位的值赋给SF
4.OF
OF(overflow):溢出标志位。
mov ds:[0x0012ff40],0x33
add ds:[0x0012ff40],0x4f //of = 1,sf = 1,af = 1,pf=1,cf = 0
两个操作数做运算,只要结果在-128~127中,of = 0,否则of=1(一个字节),长度改变,范围也随之发生改变.
5.LAHF,SAHF
LAHF(Load Flag to AH):将EFL寄存器的最后一个字节放到AH寄存器中
SAHF(Store AH into Flags):将AH的内容放入EFL的最后一个字节,其中需要注意的是第二位默认为1,第4、6位为0.
6.PUSHF,POPF
16位,PUSHF是将寄存器中的值(后16位写入内存),
POPF是将内存中16位数值写入EFL的后两个字节,还是要注意标志位默认值的问题
7.PUSHFD,POPFD
32位,PUSHFD是将寄存器的值写入内存,而POPFD是将内存中的32位数值写入EFL,具体是哪一内存单元值由ESP决定。
8.STD,CLD,STC,CLC,CMC
STD(SeT Direction flag):格式如下:
STD
该条指令使方向标志DF为1.
CLD(Clear Direction flag)格式如下:
CLD
该条指令使方向标志DF为0.
STC,CLC同上。
CMC(CoMplement Carry flag)格式如下:
CMC
该条指令使进位标志取反。
32位: EAX ECX EDX EBX ESP EBP ESI EDI
16位:AX CX DX BX SP BP SI DI
8位: AL CL DL BL AH CH DH BH
课堂练习:
1.练习各标志位的值的改变
mov DWORD PTR ds:[0x0012ff40],0x3333
sub DWORD PTR ds:[0x0012ff40],0x3f //af=1
mov DWORD PTR ds:[0x0012ff40],0x3333
add DWORD PTR ds:[0x0012ff40],0x3f //af=1
mov WORD ptr ds:[0x0012ff40],0x3333
sub WORD ptr ds:[0x0012ff40],0x3f //af=1
mov ds:[0x0012ff40],0x33
sub ds:[0x0012ff40],0xf3 //af=0
2.LAHF,SAHF,PUSHF,POPF,PUSHFD,POPFD,STD,CLD,STC,CLC,CMC