控制轉移指令

2021-04-09 10:07:11 字數 2666 閱讀 9378

jmp

j**jcxz

loop

call

retjmp ( jump ) 無條件轉移指令名稱

格式

執行操作

段內直接短跳轉

jmp    short opr

ip=ip+8位偏移量

段內直接近轉移

jmp    near ptr opr

ip=ip+16位偏移量

段內間接轉移

jmp    word ptr opr

ip=(ea)

段間直接轉移

jmp    far ptr opr

ip=opr偏移位址,cs=opr段位址

段間間接轉移

jmp    dword ptr opr

ip=(ea),cs=(ea+2)

1.無條件轉移到指定的位址去執行從該位址開始的指令.

2.段內轉移是指在同一**段的範圍內進行轉移,只需改變ip暫存器內容.

3.段間轉移則要轉移到另乙個**段執行程式,此時要改變ip暫存器和cs段暫存器的內容.

條件轉移指令

根據五個標誌位:zf、sf、of、pf、cf的兩種狀態(0 false

或1 true

)產生10種測試條件.

name

flag

flag == true [1]

flag ==false [ 0]

zero falg

zfjz    opr 

//結果為零

轉移jnz    opr 

//結果不為零

轉移sign falg

sfjs    opr 

//結果為負轉移

jns    opr 

//結果為正轉移

overflow flag

ofjo   opr 

//溢位轉移

jno   opr 

//不溢位轉移

parity flag

pfjp    opr 

//結果為偶轉移

jnp    opr 

//結果為奇轉移

carry flag

cfjc    opr 

//有進製轉移

jnc    opr 

//無進製轉移

兩個數比較:

情況無符號數

有符號數

指令滿足條件

指令滿足條件

a < b

jccf==1

jlsf^of==1 && zf==0

a ≥ b

jnccf==0

jnlsf^of==0  ||  zf==1

a ≤ b

jnacf==1 || zf==1

jlgsf^of==1  ||  zf==1

a > b

jacf==0 && zf==0

jgsf^of==0 && zf==0

測試cx轉移指令

jcxz    opr

//cx==0

時轉移loop(loop)迴圈指令

loop           opr

測試條件:

cx ≠

0              

//opr

在程式中實際是個標號

loopz        opr

測試條件:

zf == 1 && cx

≠ 0loopnz     opr

測試條件:

zf == 0 && cx

≠ 0執行操作: 先執行cx=cx-1,再檢測上面的測試條件,如滿足則ip=ip+符號擴充套件的d8,不滿足則退出迴圈.

過程呼叫及返回指令

call (call) 過程呼叫指令

call    dst

//dst

在程式中實際是子程式標號

執行操作:先將過程的返回位址(即call的下一條指令的首位址)存入堆疊,然後轉移到過程入口位址執行子程式.

呼叫方式

格式斷點保護入棧情況

過程入口位址

段內直接

call  near  ptr  pr1

(sp-1)(sp-2)

←ip , cs

不進棧cs值保持不變,ip←dst

段內間接

call  word ptr  (ea)

(sp-1)(sp-2)

←ip , cs

不進棧cs值保持不變,ip←(ea)

段間直接

call  far  ptr  pr1

(sp-1)(sp-2)

←cs , (sp-3)(sp-4)←ip

ip←dst偏移位址,cs←dst段位址

段間間接

call  dword ptr  (ea)

(sp-1)(sp-2)

←cs , (sp-3)(sp-4)←ip

ip←(ea),cs←(ea+2)

注:為了表明是段內呼叫,可使用near ptr屬性操作符作說明.

ret(return)子程式返回指令

retret    exp

//帶立即數返回

子程式返回指令ret放在子程式末尾,它使子程式在執行完全部任務後返回主程式繼續執行被打斷後的程式.返回位址在子程式呼叫時入棧儲存的斷點位址-ip或ip和cs.

控制轉移指令

組合語言 1.jmp 段內轉移 short 8bit 128 127 near 16bit 2 15 2 15 1 段間轉移 遠轉移 32bit 定址方式 段內相對定址 jmp label 修改ip 段內間接定址 jmp r16 m16 更換ip 段間直接定址 jmp far ptr label 段...

微機控制轉移類指令

1.無條件跳轉指令 指令格式 jmp 目標位址 注意點 1 指令目標位址若在jmp指令所在的 段內,屬段內跳轉,指令只修改ip內容。指令目標位址若在jmp指令所在的 段外,屬段間跳轉,cs及ip均要修改。2 無條件跳轉指令的執行結果不影響標誌位。條件跳轉指令,條件跳轉指令可分為三類 簡單條件跳轉指令...

組合語言 控制轉移類指令

1 無條件轉移指令 根據轉移的距離,jmp指令可分為兩類 段內轉移和段間轉移 段內轉移是在同一 段內進行,又稱近轉移,只要修改ip的值即可實現 段間轉移可以在不同 之間進行,又稱遠轉移,需要同時修改cs和ip的值。直接轉移是指轉移的目標位址直接出現在指令中,在程式執行前就已經確定 間接轉移是指轉移的...