彙編 (七)轉移指令原理

2021-09-25 09:25:19 字數 2248 閱讀 3048

轉移指令

可以修改ip同時修改cs和ip的指令。

概括講,就是可以控制cpu執行記憶體中某處**的指令。

8086cpu轉移行為:

根據轉移指令對ip的修改範圍不同,段內轉移分為:

短轉移,ip修改範圍為-128~127

近轉移,ip修改範圍為-32768~32767

8086cpu轉移指令分為以下幾類:

1.1 操作符 offset

offset功能為取得標號的偏移位址。

assume cs:codesg

codesg segment

start:mov ax,offset start  //相當於 mov  ax,0  (start 表家軍第一條指令位址,偏移為0)

s:mov ax,offset s       //相當於 mov ax,3 (s標記第二條指令位址,第一條指令位址長度為3個位元組)

codesg ends

end start

1.2 jmp指令

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

jmp指令要給出兩種資訊:

1.2.1 依據 位移  進行轉移的jmp指令

jmp short 標號實現段內短轉移

功能: (ip)=(ip)+8位位移

8位位移 = 標號處的位址 - jmp指令後的第乙個位元組的位址;

short 指明此處的位移為8位位移;

8位位移的範圍為-128~127,用補碼表示。

8位位移由編譯程式在編譯是確定。

jmp near ptr 標號 實現段內近轉移,功能為 (ip)=(ip)+16位位移

在jmp short 標號   指令所對應的機器碼中,並不包含轉移的目的位址,而包含的是轉移的位移。

1.2.2 轉移的目的位址在指令中的jmp指令

jmpfarptr 標號

實現段間轉移, 又稱遠轉移。

(cs)=標號所在段的段位址;(ip)=標號所在段中的偏移位址。

1.2.3 轉移位址在暫存器中的jmp指令

轉移格式:jmp 16位reg

功能:(ip)=(16位reg)

1.2.4 轉移位址在記憶體中的jmp指令

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

舉例:

mov ax,0123h

mov ds:[0],ax

jmp word ptr ds:[0]

執行後(ip)=0123h

jmp dword ptr 記憶體單元位址   (段間轉移)(cs)=(記憶體單元位址+2)

(ip)=(記憶體單元位址)

舉例:

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

1.3 jcxz指令

jcxz指令為有條件轉移指令,所有的有條件轉移指令都是 短轉移,對ip的修改範圍為-128~127

指令格式:

jcxz  標號         //如果cx == 0,則轉移到標號處執行;

操作:當(cx)=0時,(ip)=(ip)+8 位位移

1.4 loop指令

loop指令為迴圈指令,所有的迴圈指令為 短轉移,對ip的修改範圍為-128~127

指令格式:

loop 標號       //(cx)=(cx)-1,如果(cx)!=0,轉移到標號處執行。

操作:(cx)=(cx)-1

如果(cx) !=0, (ip)=(ip)+8 位位移

1.5 根據位移進行轉移的意義

jmp short 標號

jmp near ptr 標號

jcxz 標號

loop 標號

上述幾種彙編,他們對ip的修改是根據轉移的目的位址和轉移起始位址 之間的位移來進行的。

在他們的機器碼中不包含轉移的目的位址,而包含轉移的目的位址的偏移。

原因:方便了程式段在記憶體中的  浮動裝配。

彙編09 轉移指令的原理

可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。轉移行為有很多種不同的分類方法 根據只修改ip和同時修改cs和ip,可以分為段內轉移 jmp ax 和段間轉移 jmp 1000 0 根據指令對ip的修改範圍不同,段內轉移又分為短轉移 ip的修改範圍為 128 127 和近轉移 ip的修改範圍...

9 轉移指令的原理

1 可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。概括的講,轉移指令就是可以控制cpu執行記憶體中某處 的指令,8086cpu的轉移行為有兩種 1 只修改ip時,稱為段內轉移,比如 jmp ax 2 同時修改cs和ip時,稱為段間轉移,比如 jmp 1000 0 段內轉移又分為 1 短轉移...

9 轉移指令的原理

1.可以修改ip,或同時修改cs和ip的指令統稱轉移指令。概括地講,轉移指令就是可以控制cpu執行記憶體中某處 的指令。2.8086cpu的轉移行為有以下幾種 1 只修改ip時,稱為段內轉移。例如 jmp ax 2 同時修改cs和ip時,成為 段間轉移。例如 jmp 1000 0 3.由於轉移指令對...