1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【debug】汇编跳转指令: JMP JECXZ JA JB JG JL JE JZ JS JC JO JP 等

【debug】汇编跳转指令: JMP JECXZ JA JB JG JL JE JZ JS JC JO JP 等

时间:2019-12-10 04:43:13

相关推荐

【debug】汇编跳转指令: JMP JECXZ JA JB JG JL JE JZ JS JC JO JP 等

汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

11月12日 15:01:09zmmycsdn阅读数 19334

转自:/del/archive//04/16/1713886.html

/s/1gVTSi

跳转指令分三类:

一、无条件跳转:

JMP ;无条件跳转

二、根据CX、ECX寄存器的值跳转:

JCXZ ;CX 为 0 则跳转JECXZ;ECX 为 0 则跳转

三、根据EFLAGS寄存器的PSW标志位跳转, 这个太多了.

根据标志位跳转的指令:

JE ;等于则跳转 同JZ JNE ;不等于则跳转 同JNZ

JA ;无符号大于则跳转 JNA ;无符号不大于则跳转 JAE ;无符号大于等于则跳转 同JNB JNAE ;无符号不大于等于则跳转 同JB

JB ;无符号小于则跳转JNB ;无符号不小于则跳转JBE ;无符号小于等于则跳转同JNAJNBE ;无符号不小于等于则跳转同JA

JG ;有符号大于则跳转 JNG ;有符号不大于则跳转 JGE ;有符号大于等于则跳转 同JNL JNGE ;有符号不大于等于则跳转 同JL

JL ;有符号小于则跳转JNL ;有符号不小于则跳转JLE ;有符号小于等于则跳转同JNGJNLE ;有符号不小于等于则跳转同JG

JZ ;为零则跳转JNZ ;不为零则跳转JS ;为负则跳转JNS ;不为负则跳转JC ;进位则跳转JNC ;不进位则跳转JO ;溢出则跳转JNO ;不溢出则跳转

JP ;为偶则跳转

JNP ;不为偶则跳转

JPE ;奇偶位置位则跳转同JP

JPO ;奇偶位复位则跳转同JNP

跳转相关的PSW标志位:

影响标志位的汇编指令:

加法指令:ADD、ADC、INC、XADD除了INC不影响CF标志位外,都影响条件标志位。CF、ZF、SF、OFCF最高位是否有进位DF若两个操作数符号相同而结果符号与之相反OF=1,否则OF=0.减法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B前六种除了DEC不影响CF标志外都影响标志位。CMPXHG8B只影响ZF。CF说明无符号数相减的溢出,同时又确实是被减数最高有效位向高位的借位。OF位则说明带符号数的溢出无符号运算时,若减数>被减数,有借位CF=1,否则CF=0.OF若两个数符号相反,而结果的符号与减数相同则OF=1.否则OF=0.乘法指令:MUL、IMULMUL:如果乘积高一半为0,则CF和OF位均为0,否则CF和OF均为1.IMUL:如果高一半是低一半符号的扩展,则CF位和OF位均为0,否则就均为1.除法指令:DIV、IDIV对所有条件位均无定义。逻辑指令:AND、OR、NOT、XOR、TESTNOT不影响标志位,其余4种CF、OF、置0,AF无定义,SF、ZF、PF位看情况而定。定位扫描指令:BSF正向位扫描、BSR反向位扫描影响ZF位。

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 ;测试结果应该是: ;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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。