組合語言之轉移指令

2021-08-20 12:58:37 字數 1769 閱讀 2875

轉移指令:可以修改ip或同時修改cs和ip的指令統稱為轉移指令。

短轉移ip的修改範圍:-128——127

近轉移ip的修改範圍:-32768——32767

1.操作符offset

例:assume cs:codesg

codesg segment

start: mov ax,offset start  //相當於 mov ax,0

s:   mov ax,offset s       //相當於 mov ax,3

codesg ends

end start

2.jmp指令

jmp為無條件轉移指令,可以只修改ip,也可以同時修改cs和ip

jmp指令要給出兩種資訊:

(1)轉移的目的位址

(2)轉移的距離(段間轉移,段內短轉移,段內近轉移)

1)jmp short 標號**移到標號位置執行指令)

例:assume cs:codesg

codesg segment

start : mov ax,0

jmp short,s

add ax,1

s:  inc ax

codesg ends

end start

上面的程式執行完,ax=1,因為執行了jmp short,s,直接跳到inc ax,不會執行add ax,1

2)轉移的目的位址在指令中的jmp指令

「jmp far ptr 標號」實現的是段間轉移,又稱為遠轉移。far ptr指明了用標號的段位址和偏移位址修改cs和ip

例子:assume cs:codesg

codesg segment

start:mov ax,0

mov bx,0

jmp far ptr s

db 256 dup (0)

s: add ax,1

inc ax

codesg ends

end start

3)jmp word ptr 記憶體單元位址(段內轉移)

從記憶體單元位址處開始存放乙個字,是轉移的目的偏移位址

例:mov ax,0123h

mov ds:[0],ax

jmp word ptr ds:[0]

執行後,(ip)=0123h

4)jmp dword ptr 記憶體單元位址(段間位址)

從記憶體單元位址處開始存放兩個字,高位址的字是轉移的目的段位址,低位址處是轉移的目的偏移位址。

mov ax,0123h

mov ds:[0],ax

mov word ptr ds:[2],0

jmp dword ptr ds:[0]

執行後,(cs)=0,(ip)=0123h

3.jcxz指令

jcxz 標號

相當於 if ((cx)==0) jmp short 標號;

例(本例項利用jcxz實現在記憶體2000h段中查詢第乙個值為0的位元組,找到後把它的偏移位址儲存在dx中。

asuume cs:code

code segment

start: mov ax,2000h

mov ds,ax

mov bx,0

s:  mov cl,[bx]

mov ch,0

jcxz ok

inc bx

jmp short s

ok : mov dx,bx

mov ax,4c00h

int 21h

code ends

end start

組合語言轉移指令規則彙總

摘要 雖然jmp指令提供了控制轉移,但是它不允許進行任何複雜的判斷。80x86條件跳轉指令提供了這種判斷。條件跳轉指令是建立迴圈和實現其他條件執行語句,如if endif的基本要素。條件跳轉指令檢查乙個或多個標誌位,判斷它們是否匹配某個特殊條件 就像setcc指令 如果標誌匹配成功,該指令就將控制轉...

組合語言 控制轉移類指令

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

組合語言 轉移指令的原理

可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。轉移指令就是可以控制cpu執行記憶體中某處 的指令。8086cpu的轉移行為有以下幾類 由於轉移指令對ip的修改範圍不同,段內轉移又分為 短轉移和近轉移 8086cpu的轉移指令分為下面幾類 這些轉移指令轉移的前提條件可能不同,但是原理是相同的...