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