組合語言 控制轉移類指令

2021-09-25 06:12:27 字數 2327 閱讀 6402

1、無條件轉移指令

根據轉移的距離,jmp指令可分為兩類:段內轉移和段間轉移

段內轉移是在同一**段內進行,又稱近轉移,只要修改ip的值即可實現;段間轉移可以在不同**之間進行,又稱遠轉移,需要同時修改cs和ip的值。

直接轉移是指轉移的目標位址直接出現在指令中,在程式執行前就已經確定;間接轉移是指轉移的目標位址是暫存器或記憶體運算元的值,只有執行到該條指令時才能確定

jmp 2ae3:

3,執行後:cs=

2ae3h,ip=

0003h,cpu將從2ae33h處讀取指令

jmp 3

:0b16,執行後:cs=

0003h,ip=

0b16h,cpu將從00b46h處讀取指令

cpu讀取指令位址計算方法=csx16+ip

jmp 某一合法暫存器 指令的功能為:用暫存器中的值修改ip

jmp ax,指令執行前:ax=

1000h,cs=

2000h,ip=

0003h

指令執行後:ax=

1000h,cs=

2000h,ip=

1000h

jmp bx,指令執行前:ax=

0b16h,cs=

2000h,ip=

0003h

指令執行後:ax=

0b16h,cs=

2000h,ip=

0b16h

jmp ax,含義上好似:mov ip,ax

!!!注意:如果jmp記憶體運算元是字型別,則masm自動產生段內間接轉移;若記憶體運算元是雙字型別,則masm自動產生段間間接轉移。當不能確定型別時,masm將報錯。

jmp  [bx]

; 錯誤,[bx]型別不確定

jmp word ptr [bx]

; 段內間接轉移

jmp dowrd ptr [bx]

; 段間間接轉移

2、條件轉移指令

jcc label  ;  若條件成立,則ip=label的偏移位址。其中,label是標號。
對標誌位的影響:無

jcc指令的分類:

(1)測試單個標誌位的jcc指令

jcc指令

描述轉移條件

jc,jb,jane

有進製時轉移

cf=1

jnc,jnb,jae

無進製時轉移

cf=0

jz,je

為零(相等)時轉移

zf=1

jnz,jne

非零(不等)時轉移

zf=0

js為負時轉移

sf=1

jns為正時轉移

sf=0

jo溢位時轉移

of=1

jno不溢位時轉移

of=0

jp,jpe

1的個數為偶數時轉移

pf=1

jnp,jpo

1的個數為奇數時轉移

pf=0

(2)用於帶符號數比較的jcc指令。常用在cmp指令之後,以判斷帶符號數的大小。

jcc指令

描述轉移條件

jg,jnel

大於(不小於等於)時轉移

sf=of且zf=0

jge,jnl

大於等於(不小於)時轉移

sf=of

jl,jnge

小於(不大於等於)時轉移

sf<>of

jle,jng

小於等於(不大於)時轉移

sf<>of或zf=1

(3)用於無符號數比較的jcc指令。常用在cmp指令之後,以判斷無符號數的大小。

jcc指令

描述轉移條件

ja,jnbe

高於(不低於等於)時轉移

cf=0且zf=0

jae,jne

高於等於(不低於)時轉移

cf=0

jb,jnae

低於(不高於等於)時轉移

cf=1

jbe,jna

低於等於(不高於)時轉移

cf=1且zf=1

3、loop指令

指令格式:loop label (cx=cx-1,如果cx不等於0,轉移到標號處)

loop標號的功能相當於

(cx)--;if(

(cx)!=0

) jmp short label;

組合語言之轉移指令

轉移指令 可以修改ip或同時修改cs和ip的指令統稱為轉移指令。短轉移ip的修改範圍 128 127 近轉移ip的修改範圍 32768 32767 1.操作符offset 例 assume cs codesg codesg segment start mov ax,offset start 相當於 ...

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

摘要 雖然jmp指令提供了控制轉移,但是它不允許進行任何複雜的判斷。80x86條件跳轉指令提供了這種判斷。條件跳轉指令是建立迴圈和實現其他條件執行語句,如if endif的基本要素。條件跳轉指令檢查乙個或多個標誌位,判斷它們是否匹配某個特殊條件 就像setcc指令 如果標誌匹配成功,該指令就將控制轉...

組合語言 轉移指令的原理

可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。轉移指令就是可以控制cpu執行記憶體中某處 的指令。8086cpu的轉移行為有以下幾類 由於轉移指令對ip的修改範圍不同,段內轉移又分為 短轉移和近轉移 8086cpu的轉移指令分為下面幾類 這些轉移指令轉移的前提條件可能不同,但是原理是相同的...