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的值。直接轉移是指轉移的目標位址直接出現在指令中,在程式執行前就已經確定 間接轉移是指轉移的...