組合語言 底層開發 9 轉移指令的原理

2021-06-28 00:14:23 字數 1695 閱讀 8588

可以修改ip或者同時修改cs和ip的指令統稱為轉移指令。轉移指令控制cpu執行記憶體中某處的**,其作用相當於c語言中的goto。在c語言中並不鼓勵使用goto語句,但是在組合語言中由於沒有複雜的流程控制運算子,使用轉移指令稱為必然。在8086中,轉移指令可分為以下幾類:(1)無條件轉移指令;(2)條件轉移指令;(3)迴圈指令;(4)過程;(5)中斷。

操作符offset是由編譯器處理的符號,功能是取得標號所在的偏移位址。

jmp指令有四種使用方式:

以下指令:

jmp short mark ;mark是某條指令的標號

該指令實現段內短轉移,ip的變化範圍為-128~127。轉移指令結束後,cs:ip指向mark處所標識的指令位置。

同mov、push等指令不同的是,jmp指令的機器碼中並不包含將要跳轉的目標位址,而前兩者的機器碼都明確包含了將要操作的立即數值。這是因為cpu執行jmp指令時並不需要轉移的目的位址,而採用的是標號所在地的位址同jmp指令的偏移。也就是說,jmp中其實也是包含了目標位址的,只是採用的是以當前位址為基準的相對位址。

與上述指令相似的還有:

jmp near ptr mark
該指令實現是段內近轉移,其轉移的位移為16為,範圍為-32768~32767。near同short的主要區別在於jmp的範圍更大些。

與(1)描述的段內短轉移和近轉移不同,以下指令:

jmp far ptr mark
實現的是段間轉移或遠轉移。這個指令中的far ptr表示將使用mark所在的段位址和偏移位址分別修改cs和ip,處理的場合是當前指令位置同目標指令位置距離較遠,超過短轉移和近轉移,或者二者在不同的段中的情況。

以下指令:

jmp ax
目標的ip位址存放在ax中。功能同近轉移指令類似。

通過記憶體單元獲取轉移位址有字和雙字兩種方式。通過字獲取的格式為:jmp word ptr 記憶體位址;通過雙字獲取的格式為:jmp dword ptr 記憶體位址。前者只改變ip,新的ip值來自於給定的記憶體位址;後者同時改變cs和ip,雙字的高位表示段位址,低位表示偏移位址。

以下指令:

mov ax, 0123h

mov ds, ax

jmp word ptr ds:[0]

其作用為修改ip為0123h。

以下指令:

mov ax, 0123h

mov bx, 0

mov ds:[0], ax

mov word ptr ds:[2], bx

jmp dword ptr ds:[0]

其作用為將cs修改為0,ip修改為0123h。

實現二者的指令分別為jcxz和loop指令,二者都是短轉移指令。

(1)jcxz指令:

該指令的構成為:j(jmp)cx(暫存器cx)z(zero),即當cx中的值為0時跳轉,非零時繼續向下執行;使用格式為:

jcxz mark

(2)loop指令:

使用格式為:

loop mark

每次執行後,cx會自減1,當cx為0時,不進行跳轉,向下執行。該指令的最大作用是實現乙個迴圈的功能,使用cx計算迴圈的次數。

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.由於轉移指令對...

彙編09 轉移指令的原理

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