javascript
【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
匯編跳轉(zhuǎn)指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
2017年11月12日 15:01:09?zmmycsdn?閱讀數(shù) 19334
轉(zhuǎn)自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html
http://pan.baidu.com/s/1gVTSi
跳轉(zhuǎn)指令分三類:
一、無條件跳轉(zhuǎn):
JMP ;無條件跳轉(zhuǎn)
二、根據(jù)CX、ECX寄存器的值跳轉(zhuǎn):
三、根據(jù)EFLAGS寄存器的PSW標(biāo)志位跳轉(zhuǎn), 這個(gè)太多了.
根據(jù)標(biāo)志位跳轉(zhuǎn)的指令:
?
? JE ;等于則跳轉(zhuǎn) 同JZ JNE ;不等于則跳轉(zhuǎn) 同JNZ JA ;無符號大于則跳轉(zhuǎn) JNA ;無符號不大于則跳轉(zhuǎn) JAE ;無符號大于等于則跳轉(zhuǎn) 同JNB JNAE ;無符號不大于等于則跳轉(zhuǎn) 同JB
?
JB ;無符號小于則跳轉(zhuǎn) JNB ;無符號不小于則跳轉(zhuǎn) JBE ;無符號小于等于則跳轉(zhuǎn) 同JNA JNBE ;無符號不小于等于則跳轉(zhuǎn) 同JA ? JG ;有符號大于則跳轉(zhuǎn) JNG ;有符號不大于則跳轉(zhuǎn) JGE ;有符號大于等于則跳轉(zhuǎn) 同JNL JNGE ;有符號不大于等于則跳轉(zhuǎn) 同JL ? JL ;有符號小于則跳轉(zhuǎn) JNL ;有符號不小于則跳轉(zhuǎn) JLE ;有符號小于等于則跳轉(zhuǎn) 同JNG JNLE ;有符號不小于等于則跳轉(zhuǎn) 同JG?
JZ ;為零則跳轉(zhuǎn) JNZ ;不為零則跳轉(zhuǎn)JS ;為負(fù)則跳轉(zhuǎn) JNS ;不為負(fù)則跳轉(zhuǎn)JC ;進(jìn)位則跳轉(zhuǎn) JNC ;不進(jìn)位則跳轉(zhuǎn)JO ;溢出則跳轉(zhuǎn) JNO ;不溢出則跳轉(zhuǎn) ?JP ;為偶則跳轉(zhuǎn)
? JNP ;不為偶則跳轉(zhuǎn) JPE ;奇偶位置位則跳轉(zhuǎn) 同JP JPO ;奇偶位復(fù)位則跳轉(zhuǎn) 同JNP?
跳轉(zhuǎn)相關(guān)的PSW標(biāo)志位:
| 溢 出 | 方 向 | 中 斷 | 陷 阱 | 符 號 | 零 | 未 用 | 輔 助 | 未 用 | 奇 偶 | 未 用 | 進(jìn) 位 |
影響標(biāo)志位的匯編指令:
?
加法指令:ADD、ADC、INC、XADD除了INC不影響CF標(biāo)志位外,都影響條件標(biāo)志位。CF、ZF、SF、OFCF最高位是否有進(jìn)位DF若兩個(gè)操作數(shù)符號相同而結(jié)果符號與之相反OF=1,否則OF=0.減法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B前六種除了DEC不影響CF標(biāo)志外都影響標(biāo)志位。CMPXHG8B只影響ZF。CF說明無符號數(shù)相減的溢出,同時(shí)又確實(shí)是被減數(shù)最高有效位向高位的借位。OF位則說明帶符號數(shù)的溢出無符號運(yùn)算時(shí),若減數(shù)>被減數(shù),有借位CF=1,否則CF=0.OF若兩個(gè)數(shù)符號相反,而結(jié)果的符號與減數(shù)相同則OF=1.否則OF=0.乘法指令:MUL、IMULMUL:如果乘積高一半為0,則CF和OF位均為0,否則CF和OF均為1.IMUL:如果高一半是低一半符號的擴(kuò)展,則CF位和OF位均為0,否則就均為1.除法指令:DIV、IDIV對所有條件位均無定義。邏輯指令:AND、OR、NOT、XOR、TESTNOT不影響標(biāo)志位,其余4種CF、OF、置0,AF無定義,SF、ZF、PF位看情況而定。定位掃描指令:BSF正向位掃描、BSR反向位掃描影響ZF位。?
| 指令類型 | 助記符 | 對標(biāo)志寄存器的影響 | 備注 | ||||||||||
| ZF | CF | PF | SF | OF | AF | DF | IF | TF | ? | ||||
| ? ? ? ? 數(shù)據(jù)傳送類 | 通用 | MOV | ? ? ? ? ? 不影響標(biāo)志位 | ? | |||||||||
| 交換 | XCHG | ? | |||||||||||
| 堆棧操作 | PUSH | ? | |||||||||||
| POP | ? | ||||||||||||
| ? 地址傳送 | LEA | ? | |||||||||||
| LDS | ? | ||||||||||||
| LES | ? | ||||||||||||
| ? 累加器專用 | IN | ? | |||||||||||
| OUT | ? | ||||||||||||
| XALT | ? | ||||||||||||
| ? 標(biāo)志寄存器 | LAHF | ? | |||||||||||
| SAHF | 標(biāo)志寄存器低八位的內(nèi)容由AH的值決定 | CF,AF,ZF,SF,PF的值會被影響 | |||||||||||
| PUSHF | 不影響標(biāo)志位 | ? | |||||||||||
| POPF | 標(biāo)志寄存器的內(nèi)容由裝入的具體值決定 | 可能影響所有標(biāo)志位 | |||||||||||
| ? ? ? ? ? ? ? 算術(shù)運(yùn)算類 | ? ? 加法 | ADD | √ | √ | √ | √ | √ | √ | ? | ? | ? | ? | |
| ADC | √ | √ | √ | √ | √ | √ | ? | ? | ? | ? | |||
| INC | √ | ? | √ | √ | √ | √ | ? | ? | ? | INC指令不影響CF | |||
| AAA | ? | √ | ? | ? | ? | √ | ? | ? | ? | ?表示不確定或者未定義 | |||
| DAA | √ | √ | √ | √ | ? | √ | ? | ? | ? | ? | |||
| ? ? 減法 | SUB | √ | √ | √ | √ | √ | √ | ? | ? | ? | ? | ||
| SBB | √ | √ | √ | √ | √ | √ | ? | ? | ? | ? | |||
| DEC | √ | ? | √ | √ | √ | √ | ? | ? | ? | DEC指令不影響CF | |||
| AAS | ? | √ | ? | ? | ? | √ | ? | ? | ? | ? | |||
| DAS | √ | √ | √ | √ | ? | √ | ? | ? | ? | DAA指令不影響OF | |||
| ? 乘法 | MUL | ? | √ | ? | ? | √ | ? | ? | ? | ? | ? | ||
| IMUL | ? | √ | ? | ? | √ | ? | ? | ? | ? | ? | |||
| AAM | √ | ? | √ | √ | ? | ? | ? | ? | ? | ? | |||
| ? 除法 | DIV | ? | ? | ? | ? | ? | ? | ? | √ | √ | 此指令可能會產(chǎn)生中斷,故影響IF,TF | ||
| IDIV | ? | ? | ? | ? | ? | ? | ? | √ | √ | 同上 | |||
| AAD | √ | ? | √ | √ | ? | ? | ? | ? | ? | ? | |||
| 符號位擴(kuò)展 | CBW | 不影響標(biāo)志位 | ? | ||||||||||
| CWD | 不影響標(biāo)志位 | ? | |||||||||||
| 比較 | CMP | 由計(jì)算結(jié)果確定標(biāo)志位的值 | 不會影響到DF,IF,TF | ||||||||||
| ? ? 邏輯運(yùn)算類 | ? ? 單 操 作 數(shù) | 求反 | NOT | 不影響標(biāo)志位 | ? | ||||||||
| ? 移位 | SAL | √ | √ | √ | √ | 見 備 注 | ? | ? | ? | ? | ? OF標(biāo)志位只在移位次數(shù)是1時(shí)有效 AF未定義 | ||
| SHL | √ | √ | √ | √ | ? | ? | ? | ? | |||||
| SAR | √ | √ | √ | √ | ? | ? | ? | ? | |||||
| SHR | √ | √ | √ | √ | ? | ? | ? | ? | |||||
| ? 循環(huán) 移位 | ROL | ? | √ | ? | ? | √ | ? | ? | ? | ? | ? 循環(huán)移位指令影響OF和CF AF未定義 | ||
| ROR | ? | √ | ? | ? | √ | ? | ? | ? | ? | ||||
| RCL | ? | √ | ? | ? | √ | ? | ? | ? | ? | ||||
| RCR | ? | √ | ? | ? | √ | ? | ? | ? | ? | ||||
| ? | 雙 操 作 數(shù) | 與 | AND | √ | 置0 | √ | √ | 置0 | ? | ? | ? | ? | ? |
| 或 | OR | √ | 置0 | √ | √ | 置0 | ? | ? | ? | ? | ? | ||
| 異或 | XOR | √ | 置0 | √ | √ | 置0 | ? | ? | ? | ? | ? | ||
| 檢測 | TSET | √ | 置0 | √ | √ | 置0 | ? | ? | ? | ? | ? | ||
| 字符串操作 | 傳送 | MOVS | 不影響標(biāo)志位 | ? | |||||||||
| 比較 | CMPS | 由計(jì)算結(jié)果確定標(biāo)志位的值 | 不會影響DF,IF,TF | ||||||||||
| 搜索 | SCAS | 由計(jì)算結(jié)果確定標(biāo)志位的值 | 不會影響DF,IF,TF | ||||||||||
| 裝入 | LODS | 不影響標(biāo)志位 | ? | ||||||||||
| 填充 | STOS | 不影響標(biāo)志位 | ? | ||||||||||
| 前綴 | REP | 不影響標(biāo)志位 | ? | ||||||||||
| ? ? ? ? ? ? ? ? 程序控制類 | 無條件轉(zhuǎn)移 | JMP | ? ? ? ? ? 不影響標(biāo)志位 | ? | |||||||||
| ? ? ? 條 件 轉(zhuǎn) 移 | ? 單個(gè) 標(biāo)志 位 | JS/JNS | SF=1/0,則轉(zhuǎn)移到目的地址 | ||||||||||
| JZ/ JNZ | ZF=1/0,則轉(zhuǎn)移到目的地址 | ||||||||||||
| JP/JNP | PF=1/0,則轉(zhuǎn)移到目的地址 | ||||||||||||
| JB/JNB | CF=1/0,則轉(zhuǎn)移到目的地址 | ||||||||||||
| JO/JNO | OF=1/0,則轉(zhuǎn)移到目的地址 | ||||||||||||
| 若干 標(biāo)志 位的 邏輯 組合 | JA | 兩個(gè)無符號數(shù)比較,A>B | |||||||||||
| JBE | 兩個(gè)無符號數(shù)比較,A <=B | ||||||||||||
| JG | 兩個(gè)帶符號數(shù)比較,A>B | ||||||||||||
| JGE | 兩個(gè)帶符號數(shù)比較,A>=B | ||||||||||||
| JL | 兩個(gè)帶符號數(shù)比較,A<B | ||||||||||||
| JLE | 兩個(gè)帶符號數(shù)比較,A <=B | ||||||||||||
| ? ? 循環(huán)控制 | LOOP | ? ? 不影響標(biāo)志位 | ? | ||||||||||
| LOOPE | ? | ||||||||||||
| LOOPNE | ? | ||||||||||||
| JCXZ | ? | ||||||||||||
| JECXZ | ? | ||||||||||||
| ? 中斷控制 | INT | 不影響標(biāo)志位 | ? | ||||||||||
| INTO | ? | ||||||||||||
| IRET | 影響所有標(biāo)志位 | 標(biāo)志位到恢復(fù)中斷以前的狀態(tài) | |||||||||||
| ? ? ? CPU控制指令 | ? ? ? 標(biāo)志位操作 | CLC | ? | √ | ? | ? | ? | ? | ? | ? | ? | 此指令置CF=0 | |
| CMC | ? | √ | ? | ? | ? | ? | ? | ? | ? | 此指令CF取反 | |||
| STC | ? | √ | ? | ? | ? | ? | ? | ? | ? | 此指令置CF=1 | |||
| CLD | ? | ? | ? | ? | ? | ? | √ | ? | ? | 此指令置DF=0 | |||
| STD | ? | ? | ? | ? | ? | ? | √ | ? | ? | 此指令置DF=1 | |||
| CLI | ? | ? | ? | ? | ? | ? | ? | √ | ? | 此指令置IF=0 | |||
| STI | ? | ? | ? | ? | ? | ? | ? | √ | ? | 此指令置IF=1 | |||
| 空操作 | NOP | ? ? 不影響標(biāo)志位 | ? | ||||||||||
| 暫停 | HLT | ? | |||||||||||
| 等待 | WAIT | ? | |||||||||||
| 交權(quán) | ESC | ? | |||||||||||
| 總線鎖定前綴 | LOCK | ? | |||||||||||
?
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é)果應(yīng)該是: ;1 ;4 ;以下都應(yīng)該是這樣.
?
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
總結(jié)
以上是生活随笔為你收集整理的【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网路视屏学习资源共享
- 下一篇: 学 Win32 汇编[28] - 跳转指