組合語言學習筆記 九

2021-04-20 08:09:18 字數 2209 閱讀 7998

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

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

①只修改ip時,稱為段內轉移,比如:jmp ax。段內轉移又分為:短轉移和近轉移

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

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

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

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

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

② 條件轉移指令

③ 迴圈指令(如:loop)

④ 過程

⑤ 中斷

4.操作符offset

操作符offset在組合語言中是由編譯器處理的符號,它的功能是取得標號的偏移位址。

assume cs:codesg

codeseg segment

start:mov ax,offset start ; 相當於 mov ax,0

s:mov ax,offset s      ; 相當於mov ax,3

codesg ends

end start

5.jmp指令

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

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

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

這種格式的 jmp 指令實現的是段內短轉移,它對ip的修改範圍為 -128~127,也就是說,它向前轉移時可以最多越過128個位元組,向後轉移可以最多越過127個位元組。

②jmp near ptr 標號 它實現的時段內近轉移

③jmp far ptr 標號 實現的是段間轉移,又稱為遠轉移。

7.指令「jmp short 標號」的功能為(ip)=(ip)+8位位移。

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

(2)short指明此處的位移為8位位移;

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

(如果你對補碼還不了解,請閱讀附註2)

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

8.指令「jmp near ptr 標號」的說明:

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

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

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

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

9.指令 「jmp far ptr 標號」 功能如下:

(cs)=標號所在段的段位址;

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

far ptr指明了指令用標號的段位址和偏移位址修改cs和ip。

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

功能:從記憶體單元位址處開始存放著兩個字,高位址處的字是轉移的目的段位址,低位址處是轉移的目的偏移位址。

(cs)=(記憶體單元位址+2)

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

記憶體單元位址可用定址方式的任一格式給出。

11.jcxz指令

jcxz指令為有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址。對ip的修改範圍都為-128~127。

指令格式:jcxz 標號 

(如果(cx)=0,則轉移到標號處執行。)

jcxz 標號 指令操作:

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

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

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

8位位移由編譯程式在編譯時算出。

當(cx)=0時,什麼也不做(程式向下執行)。

12.loop指令

loop指令為迴圈指令,所有的迴圈指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址。對ip的修改範圍都為-128~127。

指令格式:loop 標號

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

loop 標號 指令操作:

(1)(cx)=(cx)-1;

(2)如果(cx)≠0,(ip)=(ip)+8位位移。

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

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

8位位移由編譯程式在編譯時算出。

當(cx)=0,什麼也不做(程式向下執行)。

組合語言學習筆記

學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...

組合語言學習筆記

cs ip是指向程式執行的位置 code segment ds 儲存記憶體中取資料的位址,data segment ss sp是指向堆疊的位置 stack segment cx 裡儲存的是loop執行的標誌 loop執行時,cx cx 1,若此時cx裡值為0,則跳出loop,否則繼續loop 初始 ...

組合語言學習筆記

編譯下面的程式,生成列表檔案,觀察標號在機器碼中變成了什麼?小組中的同學都說一說,說出你看到了什麼,說出你的疑問,讓小夥伴們一起解決。下面是程式 這個程式的功能沒有意義,只用於觀察程式中的標號 assume cs codesg,ds datasg datasg segment a db 1,2,3,...