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