《學習筆記》王爽組合語言 轉移指令原理

2021-05-28 08:13:55 字數 1882 閱讀 7607

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

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

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

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

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

* 短轉移ip的修改範圍為:-128~127

* 近轉移ip的修改範圍為:-32768~32767

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

* 無條件轉移

* 條件轉移

* 迴圈指令

* 過程

* 中斷

1.操作符:offset

assume cs:codesg

codesg segment

start: mov ax,offset start

s: mov ax,offset s

codesg ends

end start

2.jmp指令

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

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

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

這種格式的jmp指令實現的是段內短轉移,他對ip的修改範圍為:-128~127。

比如以下程式:

assume cs:codesg

codesg segment

start: mov ax , 0

jmp short s

add ax , 1

codesg ends

end start

上面程式執行後,ax中的值為1,跳過了add ax , 1這條指令。

4.轉移目的的位址在指令中的jmp指令

jmp far ptr 實現的是段間的轉移,又稱為遠轉移,例如程式:

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

這段**中的 jmp far ptr s 被debug翻譯成 :jmp 0bbd:0000

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

指令格式:jmp 16位reg

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

有兩種格式:

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

比如如下指令:

mov ax , 0123h

mov ds:[0] , ax

jmp word ptr ds:[0]

執行後:(ip)=0123h

(2)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

7.jcxz指令

jcxz指令為條件轉移指令,所有的條件轉移指令都是短轉移。

指令格式:jcxz標號(如果(cx) = 0,轉移到標號處執行)

8.loop指令

loop指令為迴圈指令,所有的迴圈指令都是短轉移。

指令格式:loop 標號((cx) = (cx) - 1,如果(cx) != 0 , 轉移到標號處執行)

組合語言 王爽 學習筆記

1 mov a,b a b不能同時為一記憶體位址!2 bx bp si di 在 中,這4個暫存器可以單個出現,或只能以4種組合出現 bx和si bx和di bp和si bp和di。如組合 bx si idata 就是合法的。另外,順便說明一點,si di不能分成兩個8位暫存器使用。3 div指令 ...

組合語言 王爽 筆記

關於pop的知識 1.出棧後,ss sp指向新的棧頂,pop操作前的棧頂元素中的資料仍然存在,但是,它已不再棧中 2.ss和sp只記錄了棧頂的位址,依靠ss和sp可以保證在入棧和出棧時找到棧頂 3.當棧滿的時候再次使用push指令入棧,棧空的時候再次使用pop指令出棧,都將發生棧頂越界問題,它是非常...

組合語言 王爽 筆記

1.乙個組合語言程式從寫出到最終執行的簡要過程 編寫,編譯連線,執行 2.可執行檔案中包含兩部分內容 一是程式 從源程式中的彙編指令翻譯過來的機器碼 和資料 源程式中定義的資料 二是相關的描述資訊 eg 程式的大小,要佔的記憶體空間等 3.彙編指令是指有對應的機器碼的指令,可以被編譯為機器指令,最終...