彙編學習記錄之十

2021-09-01 22:51:27 字數 2224 閱讀 5633

1.轉移指令的原理

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

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

8086cpu的轉移行為有以下幾類:

(1.1)只修改ip時,稱為段內轉移,比如:jmp ax

(1.2)同時修改cs和ip時,稱為段間轉移,比如: jmp 1000:0

由於轉移指令對ip的修改範圍不同,段內轉移又分為:短轉移和近轉移。

(1.3)短轉移ip的修改範圍為-128~127

(1.4)近轉移ip的修改範圍為-32768~32767

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

(1.5)無條件轉移指令(如: jmp)

(1.6)條件轉移指令(如:jnz)

(1.7)迴圈指令(如:loop)

(1.8)過程

(1.9)中斷

這些轉移指令轉移的前提條件可能不同,但轉移的基本原理是相同的。在這裡主要通過深入學習無條件轉移指令jmp來理解cpu執行轉移指令的基本原理。

2.偽指令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

mov ax, offset start 相當於指令 mov ax, 0,因為start是**段中的標號,它所標記的指令是**段中的第一條指令,偏移位址為0;

mov ax, offset s 相當於指令mov ax, 3,因為s是**段中的標號,它所標記的指令是**段中的第二條指令,第一條指令長度為3位元組,則s的偏移位址為3。

3.jmp指令

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

jmp指令要給出兩種資訊:

3.1 轉移的目的位址

3.2 轉移的距離(段間轉移、段內短轉移、段內近轉移)

不同的給出目的位址的方法,和不同的轉移位置,對應有不同格式的jmp指令。

4.依據位移進行轉移的jmp指令

jmp short 標號**移到標號處執行指令)

這種格式的jmp指令實現的是段內短轉移,它對ip的修改範圍為-128~127,也就是說,它向前轉移時最多可以越過128個位元組,身後轉移時最多可以越過127個位元組。jmp指令中的'short'符號,說明指令進行的是短轉移。jmp指令中的'標號'是**段中的標號,指明了指令要轉移的目的地,轉移指令結束後,cs:ip應該指向標號處的指令。

例如:

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 後,越過了add ax, 1,ip指向了標號s處的inc ax。也就是說,程式只進行了一次ax加1操作。

cpu在執行jmp指令的時候並不需要轉移的目的位址,只需要轉移的位移。

在'jmp short 標號' 指令所對應的機器碼中,並不包含轉移的目的位址,而包含的是轉移的位移。這個位移,是編譯器根據彙編指令中的'標號'計算出來的。

實際上,指令'jmp short 標號'的功能為:(ip)=(ip)+8位位移。

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

(2)short指明此處的位移為8位位移,進行的是段內短轉移;

(3)8位位移的範圍為-128~127,用補碼表示;

(4)8位位移由編譯程式在編譯時計算出來。

還有一種和指令'jmp short 標號'功能相近的指令格式:'jmp near ptr 標號',它實現的是段內近轉移。

指令'jmp near ptr 標號'的功能為:(ip)=(ip)+16位位移。

(1)16位位移='標號'處的位址 - jmp指令後的第乙個位元組的位址;

(2)near ptr指明此處的位移為16位位移,進行的是段內近轉移;

(3)16位位移的範圍為-32768~32767,用補碼表示;

(4)16位位移由編譯程式在編譯時計算出來。

有錯誤請指正,謝謝!

彙編學習記錄之六

1.源程式例子 assume cs codesg codesg segment start mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21h codesg ends end start在組合語言源程式中,包含兩種指令...

彙編學習記錄之八

1.機器指令處理的資料所在位置 絕大部分機器指令都是進行資料處理的指令,處理大致可以分為三類 讀取 寫入 運算。在機器指令這一層來講,並不關心資料的值是多少,而關心指令執行前一刻,它將要處理的資料的所在位置。指令執行前,所要處理的資料可以在三個地方 cpu內部 記憶體 埠。2.組合語言中資料位置的表...

彙編學習記錄

加粗樣式今天看到了驅動開發教程裡的中斷這一章了,結果課本直接先來一段組合語言,然而我早已把彙編忘得一乾二淨了,無奈只能重新再學一下了 cpsr是記錄當前的工作模式的狀態暫存器,在超級使用者模式下,可以用如下指令改變當前使用者模式 mov r3 0xd3 不能直接用立即數直接對cpsr暫存器賦值,必須...