匯編跳轉(zhuǎn)指令使用總結(jié)
雖然jmp指令提供了控制轉(zhuǎn)移,但是它不允許進(jìn)行任何復(fù)雜的判斷。80x86條件跳轉(zhuǎn)指令提供了這種判斷。條件跳轉(zhuǎn)指令是創(chuàng)建循環(huán)和實現(xiàn)其他條件執(zhí)行語句。條件跳轉(zhuǎn)指令檢查一個或多個標(biāo)志位,判斷它們是否匹配某個特殊條件(就像setcc指令):如果標(biāo)志匹配成功,該指令就將控制轉(zhuǎn)移到目標(biāo)位置;如果匹配失敗,CPU忽略該條件跳轉(zhuǎn)指令而繼續(xù)執(zhí)行下一條指令。條件跳轉(zhuǎn)指令有一個限制:目標(biāo)標(biāo)號的位置必須在跳轉(zhuǎn)指令本身附近32768字節(jié)范圍內(nèi),這通常對應(yīng)著8000~32000條機(jī)器指令。一般情況下不會超過這種限制。
用自己的話總結(jié):條件跳轉(zhuǎn)指令是指jz,jg..等等指令,這些指令跳轉(zhuǎn)方式是根據(jù)標(biāo)志位的狀態(tài)進(jìn)行跳轉(zhuǎn),而設(shè)置這些標(biāo)志的常見指令為cmp和test指令,所以他們經(jīng)常搭配使用(應(yīng)該是必須的)。即跳轉(zhuǎn)指令前一行要嗎有cmp指令要嗎有test指令。
匯編標(biāo)志位:
標(biāo)志名 標(biāo)志 1 標(biāo)志 0
OF (溢出標(biāo)志) OV NV
DF (方向標(biāo)志) UP DN
IF (中斷標(biāo)志) DI EI
SF (符號標(biāo)志位) PL NG
ZF (零標(biāo)志) NZ ZR
AF (輔助進(jìn)位標(biāo)志位) NA AC
PF (奇偶標(biāo)志) PO PE
CF (進(jìn)位標(biāo)志) NC CY
反匯編窗口,對應(yīng)的標(biāo)志位(雙擊后面的數(shù)字可改變其狀態(tài))
Test和cmp指令的區(qū)別
test屬于邏輯運算指令
Test對兩個參數(shù)(目標(biāo),源)執(zhí)行AND邏輯操作,并根據(jù)結(jié)果設(shè)置標(biāo)志寄存器,結(jié)果本身不會保存。
舉例:
Test的一個非常普遍的用法是用來測試一方寄存器是否為空:
test ecx, ecx
jz somewhere
如果ecx為零,設(shè)置ZF零標(biāo)志為1,Jz跳轉(zhuǎn)
--------------------------------------------
CMP屬于算術(shù)運算指令
CMP比較.(兩操作數(shù)作減法,僅修改標(biāo)志位,不回送結(jié)果).
cmp實際上是只設(shè)置標(biāo)志不保存結(jié)構(gòu)的減法,并設(shè)置Z-flag(零標(biāo)志).
舉例:
Cmp eax, 2; 如果eax-2=0即eax=2就設(shè)置零標(biāo)志為1
Jz ****; 如果設(shè)置了零標(biāo)志就跳轉(zhuǎn)
============================================
得出的結(jié)論
test邏輯與運算結(jié)果為零,就把ZF(零標(biāo)志)置1;
cmp 算術(shù)減法運算結(jié)果為零,就把ZF(零標(biāo)志)置1.
指 令 |
描 述 |
條 件 |
別 名 |
相 反 指 令 |
JC |
如果進(jìn)位位被置位則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=1 |
JB,JNAE |
JNC |
JNC |
如果進(jìn)位位沒有置位則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=0 |
JNB,JAE |
JC |
JZ |
如果0標(biāo)志被置位則跳轉(zhuǎn) |
0標(biāo)志=1 |
JE |
JNZ |
JNZ |
如果0標(biāo)志沒有置位則跳轉(zhuǎn) |
0標(biāo)志=0 |
JNE |
JZ |
指 令 |
描 述 |
條 件 |
別 名 |
相反指令 |
JS |
如果符號位被置位則跳轉(zhuǎn) |
符號標(biāo)志=1 |
JNS |
|
JNS |
如果符號位沒有被置位則跳轉(zhuǎn) |
符號標(biāo)志=0 |
JS |
|
JO |
如果溢出標(biāo)志置位則跳轉(zhuǎn) |
溢出標(biāo)志=1 |
JNO |
|
JNO |
如果溢出標(biāo)志沒有置位則跳轉(zhuǎn) |
溢出標(biāo)志=0 |
JO |
|
JP |
如果奇偶校驗位被置位則跳轉(zhuǎn) |
奇偶校驗標(biāo)志=1 |
JPE |
JNP |
JPE |
如果奇偶校驗位為偶校驗則跳轉(zhuǎn) |
奇偶校驗標(biāo)志=1 |
JP |
JPO |
JNP |
如果奇偶校驗位沒有被置位則跳轉(zhuǎn) |
奇偶校驗標(biāo)志=0 |
JPO |
JP |
JPO |
如果奇偶校驗位為奇校驗則跳轉(zhuǎn) |
奇偶校驗標(biāo)志=0 |
JNP |
JPE |
使用無符號數(shù)比較的JCC指令
指 令 |
描 述 |
條 件 |
別 名 |
相反指令 |
JA |
如果超過(>)則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=0,0標(biāo)志=0 |
JNBE |
JNA |
JNBE |
如果不低于或等于(不 <=)則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=0,0標(biāo)志=0 |
JA |
JBE |
JAE |
如果超過或等于(>=)則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=0 |
JNC,JNB |
JNAE |
JNB |
如果不低于則跳轉(zhuǎn)(不 <) |
進(jìn)位標(biāo)志=0 |
JNC,JAE |
JB |
JB |
如果低于(<)則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=1 |
JC,JNAE |
JNB |
JNAE |
如果不超過或等于(不>=)則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=1 |
JC,JB |
JAE |
JBE |
如果低于或等于(<=)則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=1或0標(biāo)志=1 |
JNA |
JNBE |
JNA |
如果不超過(不>)則跳轉(zhuǎn) |
進(jìn)位標(biāo)志=1或0標(biāo)志=1 |
JBE |
JA |
JE |
如果相等(=)則跳轉(zhuǎn) |
0標(biāo)志=1 |
JZ |
JNE |
JNE |
如果不相等(<>)則跳轉(zhuǎn) |
0標(biāo)志=0 |
JNZ |
JE |
使用有符號數(shù)比較的JCC指令
指 令 |
描 述 |
條 件 |
別 名 |
相反指令 |
JG |
如果大于(>)則跳轉(zhuǎn) |
符號標(biāo)志=溢出標(biāo)志或0標(biāo)志=0 |
JNLE |
JNG |
JNLE |
如果小于或等于(<=)則跳轉(zhuǎn) |
符號標(biāo)志=溢出標(biāo)志或0標(biāo)志=0 |
JG |
JLE |
JGE |
如果大于或等于(>=)則跳轉(zhuǎn) |
符號標(biāo)志=溢出標(biāo)志 |
JNL |
JGE |
JNL |
如果不小于(不<)則跳轉(zhuǎn) |
符號標(biāo)志=溢出標(biāo)志 |
JGE |
JL |
JL |
如果小于(<)則跳轉(zhuǎn) |
符號標(biāo)志<>溢出標(biāo)志 |
JNGE |
JNL |
JNGE |
如果大于或等于(>=)跳轉(zhuǎn) |
符號標(biāo)志<>溢出標(biāo)志 |
JL |
JGE |
JLE |
如果小于或等于(<=)跳轉(zhuǎn) |
符號標(biāo)志<>溢出標(biāo)志或0標(biāo)志=1 |
JNG |
JNLE |
JNG |
如果不大于(不>)則跳轉(zhuǎn) |
符號標(biāo)志<>溢出標(biāo)志或0標(biāo)志=1 |
JLE |
JG |
JE |
如果等于(=)則跳轉(zhuǎn) |
0標(biāo)志=1 |
JZ |
JNE |
JNE |
如果不等于(<>)則跳轉(zhuǎn) |
0標(biāo)志=0 |
JNZ |
JE |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
匯編語言有關(guān)在屏幕區(qū)顯示字符的四種方法(推薦)
這篇文章主要介紹了匯編語言有關(guān)在屏幕區(qū)顯示字符的四種方法(推薦),每種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02匯編語言XOR指令:對兩個操作數(shù)進(jìn)行邏輯(按位)異或操作(推薦)
匯編語言(assembly language)是一種用于電子計算機(jī)、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。這篇文章主要介紹了匯編語言XOR指令:對兩個操作數(shù)進(jìn)行邏輯(按位)異或操作,需要的朋友可以參考下2020-01-01UEFI開發(fā)實戰(zhàn)用戶交互界面基礎(chǔ)說明
這篇文章主要為大家介紹了UEFI開發(fā)實戰(zhàn)用戶交互界面的基礎(chǔ)說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06