第012課 彙編-af,zf,sf,of及標誌位操作指令
阿新 • • 發佈:2018-11-26
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