x86匯編 轉移跳轉指令


包含:jmp、call、ret、retf、loop、jcxz
 
 以下為正文內容:

兩種轉移方式:
1、段內轉移(只修改IP)
  • 短轉移:IP的修改范圍為「-128~127」,即8位位移。
  • 近轉移:IP的修改范圍為「-32768~32767」,即16位位移。
 2、段間轉移(修改CS和IP)
 
jmp:無條件跳轉指令
 
1、jmp short 標號
段內段轉移。即(IP)=(IP)+8位位移。「注:(IP)表示IP寄存器中的值,下同」
 
2、jmp near 標號
段內近轉移。(IP)=(IP)+16位位移。
 
3、jmp far ptr 標號
段間轉移(遠轉移)。(CS)=標號的段地址,(IP)=標號的偏移地址。
 
4、jmp 16位的寄存器
(IP)=(16位的寄存器)
 
5、jmp word ptr 內存地址
(IP)=(內存單元),即用指定的內存單元中的值來填充IP。
 
6、jmp dword ptr 內存地址
(CS)=(內存地址+2),(IP)=(內存地址)。即用從指定的內存單元開始第2個字填充CS,用第1個字填充IP。
 

 
call指令
 
call指令用於將當前的IP壓棧或將CS、IP同時壓棧后進行程序的跳轉。
 
1、call 標號
將IP壓棧后跳轉。
 
2、call far ptr 標號
將CS和IP壓棧后跳轉。

 

 3、call 16位寄存器

將IP壓棧后跳轉。 

 

 4、call word ptr 內存地址

 

 


  ret/ref指令
 
  ret
 
 
retf
 

 可通過call與ret、retf搭配使用,實現父、子函數的跳轉。


 
loop指令
當cx寄存器的值不為0時,循環執行標號內指定的指令。
 
指令格式:
 
用偽代碼來描述:
 

 jcxz指令

  Jump while CX is Zero(我猜的)
 
當cx寄存器的值為0時,跳轉到標號處執行指令。
 
指令格式:
jcxz 標號

  

用偽代碼來描述:

 

 


The end
 

 

 以上內容整理自:王爽《匯編語言 第二版》p177-p198

PS1:《匯編語言 第二版》PDF下載: 點擊前往某度雲,提取碼:04e0
PS2:安利一個寫x86匯編的IDE:emu8086, 點擊前往下載。 安裝的時候把例子也裝上,里面有很多有趣的例子!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM