1. 程式人生 > 其它 >x86彙編 轉移跳轉指令

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,點選前往下載。安裝的時候把例子也裝上,裡面有很多有趣的例子!