常用的跳轉(zhuǎn)指令 大集合
2020-07-14 13:42:39
供稿:網(wǎng)友
1、判斷單個標(biāo)志位狀態(tài)
這組指令單獨(dú)判斷5個狀態(tài)標(biāo)志之一,根據(jù)某一個狀態(tài)標(biāo)志是0或1決定是否跳轉(zhuǎn)。
(1)JZ/JE和JNZ/JNE利用零標(biāo)志ZF,判斷結(jié)果是否為零(或相等)
JE指令(相等時轉(zhuǎn)移)
JZ指令(等于0時轉(zhuǎn)移)
這是當(dāng)ZF=1時轉(zhuǎn)移到目標(biāo)地址的條件轉(zhuǎn)移指令的兩種助記符。這條指令既適用于判斷無符號數(shù)的相等,又適用于判斷帶符號數(shù)的相等。
JNE指令(不相等轉(zhuǎn)移)
JNZ指令(不等于0轉(zhuǎn)移)
這是當(dāng)ZF=0時能轉(zhuǎn)移到目標(biāo)地址的條件轉(zhuǎn)移指令的兩種助記符。這條指令也是既適用于判斷無符號數(shù),又適用于判斷帶符號數(shù)。
(2)JS和JNS利用符號標(biāo)志SF,判斷結(jié)果是正是負(fù)。
JS指令(為負(fù)轉(zhuǎn)移)——當(dāng)滿足SF=1時,轉(zhuǎn)移到目標(biāo)地址
JNS指令(為正轉(zhuǎn)移)——滿足SF=0時,轉(zhuǎn)移到目標(biāo)地址
(3)JO和JNO利用溢出標(biāo)志,判斷結(jié)果是否產(chǎn)生溢出
JO指令(溢出轉(zhuǎn)移)——OF=1時,轉(zhuǎn)移到目標(biāo)地址
JNO指令(未溢出轉(zhuǎn)移)——OF=0時,轉(zhuǎn)移到目標(biāo)地址
(4)JP/JPE和JNP/JPO利用奇偶標(biāo)志PF,判斷結(jié)果中“1”的個數(shù)是偶是奇
JP/JPE指令(為偶轉(zhuǎn)移)——滿足PF=1時轉(zhuǎn)移
JNP/JPO指令(為奇轉(zhuǎn)移)——滿足PF=0時轉(zhuǎn)移
數(shù)據(jù)通訊為了可靠常要進(jìn)行校驗。常用的校驗方法是奇偶校驗,即把字符ASCII碼的最高位用作校驗位,是包括校驗位在內(nèi)的字符中為“1”的個數(shù)恒為奇數(shù)(奇校驗),或恒為偶數(shù)(偶校驗)。若采用奇校驗,在字符ASCII中為“1”的個數(shù)已為奇數(shù)時,則令其最高位為“0”;否則令最高位為“1”。
(5)JC/JB/JNAE和JNC/JNB/JAE,利用進(jìn)位標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位,CF標(biāo)志是比較常用的一個標(biāo)志。
JC——滿足CF=1時轉(zhuǎn)移 JNC——滿足CF=0時轉(zhuǎn)移
JB(低于轉(zhuǎn)移) JNB(不低于轉(zhuǎn)移)
JNAE(不高于等于轉(zhuǎn)移) JAE(高于等于轉(zhuǎn)移)
2、用于比較無符號數(shù)高低
為區(qū)別有符號數(shù)的大小,無符號數(shù)的大小用高(Above)、低(Below)表示,它需要利用CF確定高低、利用ZF標(biāo)志確定相等(Equal)。兩數(shù)的高低分成4種關(guān)系:低于(不高于等于)、不低于(高于等于)、低于等于(不高于)、不低于等于(高于);也就分別對應(yīng)4條指令:JB(JNAE)、JNB(JAE)、JBE(JNA)、JNBE(JA)。
JA/JNBE
JA即高于轉(zhuǎn)移,JNBE即不低于且不等于轉(zhuǎn)移,高于則沒有進(jìn)位產(chǎn)生,即CF=0,不等于則ZF=0,所以這兩條指令滿足CF=0且ZF=0時轉(zhuǎn)移
JAE/JNB
高于或等于轉(zhuǎn)移/不低于轉(zhuǎn)移是當(dāng)CF=0(高于就不產(chǎn)生進(jìn)位)或ZF=1(等于)時轉(zhuǎn)移。
JB/JNAE
即低于/不高于且不等于轉(zhuǎn)移,是當(dāng)CF=1(產(chǎn)生借位)且ZF=0(不相等)時轉(zhuǎn)移。
JBE/JNA
即低于或等于/不高于轉(zhuǎn)移,是當(dāng)CF=1(借位產(chǎn)生)或ZF=1(相等)時轉(zhuǎn)移。
3、用于比較有符號數(shù)大小
判斷有符號數(shù)的大(Greater)、小(Less),需要組合OF、SF標(biāo)志、并利用ZF標(biāo)志確定相等與否。兩數(shù)的大小分成4種關(guān)系:小于(不大于等于)、不小于(大于或等于)、小于等于(不大于)、不小于等于(大于);也就分別對應(yīng)4條指令:JL(JNGE)、JNL(JGE)、JLE(JNG)、JNLE(JG)。
由上可見,條件轉(zhuǎn)移指令之前常有CMP、TEST、加減運(yùn)算、邏輯運(yùn)算等影響標(biāo)志的指令,利用這些指令執(zhí)行后的標(biāo)志或其組合狀態(tài)形成條件。
JG/JNLE
大于/不小于且不等于轉(zhuǎn)移,是當(dāng)標(biāo)志SF與OF同號(即<SF異或OF>=0)且ZF=0時轉(zhuǎn)移
JGE/JNL
大于或等于/不小于轉(zhuǎn)移,是當(dāng)標(biāo)志SF與OF同號(即<SF異或OF>=0)或ZF=0時轉(zhuǎn)移
JL/JNGL
小于/不大于也不等于時轉(zhuǎn)移,是當(dāng)標(biāo)志SF與OF異號(即<SF異或OF>=1)且ZF=0時轉(zhuǎn)移
JLE/LNG
小于或等于/不大于轉(zhuǎn)移,是當(dāng)標(biāo)志SF與OF異號(即<SF異或OF>=1)或ZF=1時轉(zhuǎn)移
4、判斷計數(shù)器CX是否為0
JCXZ LABEL ;CX=0,則轉(zhuǎn)移;否則順序執(zhí)行