摘要:雖然jmp指令提供了控制轉移,但是它不允許進行任何複雜的判斷。80x86條件跳轉指令提供了這種判斷。條件跳轉指令是建立迴圈和實現其他條件執行語句,如if…endif的基本要素。
條件跳轉指令檢查乙個或多個標誌位,判斷它們是否匹配某個特殊條件(就像setcc指令):如果標誌匹配成功,該指令就將控制轉移到目標位置;如果匹配失敗,cpu忽略該條件跳轉指令而繼續執行下一條指令。一些條件跳轉指令只是簡單測試符號位(sign)、進製位(carry)、溢位位(overflow)、零標誌(zero)位的設定。例如,在執行一條sh1指令後,您需要測試進製標誌,來判斷sh1是否從運算元的高位址位移出一位。類似地,也可以在一條test指令後測試零標誌位,來判斷指定的位是否為1。大多數情況,在cmp指令之後執行條件跳轉指令。cmp指令設定標誌位,以便判斷小於、大於、等於等情況。
測試標誌位的jcc指令
指 令
描 述
條 件
別 名
相 反 指 令 jc
如果進製位被置位則跳轉
進製標誌=1
jb,jnae
jncjnc
如果進製位沒有置位則跳轉
進製標誌=0
jnb,jae jc
jz如果0標誌被置位則跳轉
0標誌=1 je
jnzjnz
如果0標誌沒有置位則跳轉
0標誌=0
jne jz
(續表)
指 令描 述
條 件別 名
相反指令 js
如果符號位被置位則跳轉
符號標誌=1
jnsjns
如果符號位沒有被置位則跳轉
符號標誌=0 js
jo如果溢位標誌置位則跳轉
溢位標誌=1
jnojno
如果溢位標誌沒有置位則跳轉
溢位標誌=0 jo
jp如果奇偶校驗位被置位則跳轉
奇偶校驗標誌=1
jpejnp
jpe如果奇偶校驗位為偶校驗則跳轉
奇偶校驗標誌=1 jp
jpojnp
如果奇偶校驗位沒有被置位則跳轉
奇偶校驗標誌=0
jpo jp
jpo如果奇偶校驗位為奇校驗則跳轉
奇偶校驗標誌=0
jnpjpe
使用無符號數比較的jcc指令
指 令
描 述
條 件
別 名
相反指令 ja
如果超過(>)則跳轉
進製標誌=0,0標誌=0
jnbe
jnajnbe
如果不低於或等於(不 <=)則跳轉
進製標誌=0,0標誌=0 ja
jbejae
如果超過或等於(>=)則跳轉
進製標誌=0
jnc,jnb
jnae
jnb如果不低於則跳轉(不 <)
進製標誌=0
jnc,jae jb
jb如果低於(<)則跳轉
進製標誌=1
jc,jnae
jnbjnae
如果不超過或等於(不》=)則跳轉
進製標誌=1
jc,jb
jaejbe
如果低於或等於(<=)則跳轉
進製標誌=1或0標誌=1
jnajnbe
jna如果不超過(不》)則跳轉
進製標誌=1或0標誌=1
jbe ja
je如果相等(=)則跳轉
0標誌=1 jz
jnejne
如果不相等(<>)則跳轉
0標誌=0
jnz je
使用有符號數比較的jcc指令
指 令
描 述
條 件
別 名
相反指令 jg
如果大於(>)則跳轉
符號標誌=溢位標誌或0標誌=0
jnle
jngjnle
如果小於或等於(<=)則跳轉
符號標誌=溢位標誌或0標誌=0 jg
jlejge
如果大於或等於(>=)則跳轉
符號標誌=溢位標誌
jnljge
jnl如果不小於(不<)則跳轉
符號標誌=溢位標誌
jge jl
jl如果小於(<)則跳轉
符號標誌<>溢位標誌
jnge
jnljnge
如果大於或等於(>=)跳轉
符號標誌<>溢位標誌 jl
jgejle
如果小於或等於(<=)跳轉
符號標誌<>溢位標誌或0標誌=1
jngjnle
jng如果不大於(不》)則跳轉
符號標誌<>溢位標誌或0標誌=1
jle jg
je如果等於(=)則跳轉
0標誌=1 jz
jnejne
如果不等於(<>)則跳轉
0標誌=0
jnz je
loop跳轉指令:
注意這下面三行**:
mov cx,3
next: movsb
loop next
其中,loop的跳轉機制:通過對cx進行自動遞減來實現跳轉
組合語言之轉移指令
轉移指令 可以修改ip或同時修改cs和ip的指令統稱為轉移指令。短轉移ip的修改範圍 128 127 近轉移ip的修改範圍 32768 32767 1.操作符offset 例 assume cs codesg codesg segment start mov ax,offset start 相當於 ...
組合語言 控制轉移類指令
1 無條件轉移指令 根據轉移的距離,jmp指令可分為兩類 段內轉移和段間轉移 段內轉移是在同一 段內進行,又稱近轉移,只要修改ip的值即可實現 段間轉移可以在不同 之間進行,又稱遠轉移,需要同時修改cs和ip的值。直接轉移是指轉移的目標位址直接出現在指令中,在程式執行前就已經確定 間接轉移是指轉移的...
組合語言 轉移指令的原理
可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。轉移指令就是可以控制cpu執行記憶體中某處 的指令。8086cpu的轉移行為有以下幾類 由於轉移指令對ip的修改範圍不同,段內轉移又分為 短轉移和近轉移 8086cpu的轉移指令分為下面幾類 這些轉移指令轉移的前提條件可能不同,但是原理是相同的...