轉移指令:可以修改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的轉移指令分為下面幾類 這些轉移指令轉移的前提條件可能不同,但是原理是相同的...