組合語言轉移指令規則彙總

2021-06-20 12:45:53 字數 2683 閱讀 6324

摘要:雖然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的轉移指令分為下面幾類 這些轉移指令轉移的前提條件可能不同,但是原理是相同的...