跳轉(zhuǎn)指令分三類: 一、無條件跳轉(zhuǎn): JMP; 二、根據(jù) CX、ECX 寄存器的值跳轉(zhuǎn): JCXZ(CX 為 0 則跳轉(zhuǎn))、JECXZ(ECX 為 0 則跳轉(zhuǎn)); 三、根據(jù) EFLAGS 寄存器的標志位跳轉(zhuǎn), 這個太多了. 根據(jù)標志位跳轉(zhuǎn)的指令: JE ;等于則跳轉(zhuǎn) JNE ;不等于則跳轉(zhuǎn) JZ ;為 0 則跳轉(zhuǎn) JNZ ;不為 0 則跳轉(zhuǎn) JS ;為負則跳轉(zhuǎn) JNS ;不為負則跳轉(zhuǎn) JC ;進位則跳轉(zhuǎn) JNC ;不進位則跳轉(zhuǎn) JO ;溢出則跳轉(zhuǎn) JNO ;不溢出則跳轉(zhuǎn) JA ;無符號大于則跳轉(zhuǎn) JNA ;無符號不大于則跳轉(zhuǎn) JAE ;無符號大于等于則跳轉(zhuǎn) JNAE ;無符號不大于等于則跳轉(zhuǎn) JG ;有符號大于則跳轉(zhuǎn) JNG ;有符號不大于則跳轉(zhuǎn) JGE ;有符號大于等于則跳轉(zhuǎn) JNGE ;有符號不大于等于則跳轉(zhuǎn) JB ;無符號小于則跳轉(zhuǎn) JNB ;無符號不小于則跳轉(zhuǎn) JBE ;無符號小于等于則跳轉(zhuǎn) JNBE ;無符號不小于等于則跳轉(zhuǎn) JL ;有符號小于則跳轉(zhuǎn) JNL ;有符號不小于則跳轉(zhuǎn) JLE ;有符號小于等于則跳轉(zhuǎn) JNLE ;有符號不小于等于則跳轉(zhuǎn) JP ;奇偶位置位則跳轉(zhuǎn) JNP ;奇偶位清除則跳轉(zhuǎn) JPE ;奇偶位相等則跳轉(zhuǎn) JPO ;奇偶位不等則跳轉(zhuǎn) 跳轉(zhuǎn)相關(guān)的標志位:
JMP 測試 ; Test28_1.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' jmp @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main ;測試結(jié)果應該是: ;1 ;4 ;以下都應該是這樣. JE 測試 ; Test28_2.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov eax, 123 cmp eax, 123 je @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JZ 測試 ; Test28_3.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' xor eax, eax jz @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JS 測試 ; Test28_4.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' xor eax, eax dec eax js @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JC 測試 ; Test28_5.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov al, 0FFh add al, 1 jc @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JO 測試 ; Test28_6.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov al, -128 sub al, 1 jo @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JA 測試 ; Test28_7.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov eax, 22 cmp eax, 11 ja @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JG 測試 ; Test28_8.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov eax, 1 cmp eax, -1 jg @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JP 測試 ; Test28_9.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov al, 00001110b inc al jp @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main JECXZ 測試 ; Test28_10.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' xor ecx, ecx jecxz @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main |
|
來自: herowuking > 《Cracker》