匯編語言4,5章學(xué)習(xí)筆記-創(chuàng)新互聯(lián)

4.1一個源程序從寫出到執(zhí)行的過程

成都創(chuàng)新互聯(lián)科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供服務(wù)器托管,高防主機,成都IDC機房托管,成都主機托管等互聯(lián)網(wǎng)服務(wù)。

一個匯編語言程序從寫出到最終執(zhí)行的簡要過程:

編寫~編譯連接~執(zhí)行

1、編寫:使用文本編輯器(如記事本、nodepad++、UltraEdit等),用匯編語言編寫匯編源程序。

2、對源程序編譯連接:使用匯編語言編譯程序(MASM.EXE)對源程序文件中的源程序進(jìn)行編譯,? 產(chǎn)生目標(biāo)文件;再用連接程序(LINK.EXE)對目標(biāo)文件進(jìn)行連接,生成可在操作系統(tǒng)中直接運行的可執(zhí)行文件。

?可執(zhí)行文件包含兩部分內(nèi)容:

?程序(從源程序中的匯編指令翻譯過來的機器碼)和數(shù)據(jù)(源程序中定義的數(shù)據(jù))

?相關(guān)的描述信息(比如:程序有多大、要占多少內(nèi)存空間等)

3、執(zhí)行可執(zhí)行文件中的程序:操作系統(tǒng)依照可執(zhí)行文件中的描述信息,將可執(zhí)行文件中的機器碼和數(shù)據(jù)加載入內(nèi)存,并進(jìn)行相關(guān)的初始化(比如:設(shè)置CS:IP指向第一條要執(zhí)行的指令),然后由cpu執(zhí)行程序。

4.2源程序

匯編指令? 有對應(yīng)的機器碼的指令,可以被編譯成機器指令,最終為cpu所執(zhí)行。

偽指令? 沒有對應(yīng)的機器碼的指令,最終不被cpu所執(zhí)行。是由編譯器來執(zhí)行的指令,編譯器根據(jù)? ? ? ? ? ? ? ? ?偽指令來進(jìn)行相關(guān)的編譯工作。

定義一個段? ? ?segment和ends是成對使用的偽指令,在寫被編譯器編譯的匯編程序時,必須要用? ? ? ? ? ? ? ? ? ? ? ? ?到的一對偽指令,其功能是定義一個段,segment說明一個段開始,ends說明一個? ? ? ? ? ? ? ? ? ? ? ? ?段結(jié)束。

?(一個段必須有一個名稱來標(biāo)識,使用格式為:段名 segment? ? 段名 ends)

一個匯編程序由多個段組成,這些段被用來存放代碼,數(shù)據(jù),或當(dāng)作棧空間來使用。

end是一個匯編程序的結(jié)束標(biāo)記

assume含義為假設(shè) 其假設(shè)某一段寄存器和程序中的某一個用segment...?ends定義的段相關(guān)聯(lián)。?

源程序中的“程序”

匯編源程序:

偽指令(編譯器處理)

匯編指令(編譯為機器碼)

程序:源程序中最終由計算機執(zhí)行、處理的指令或數(shù)據(jù)。

標(biāo)號

一個標(biāo)號指代了一個地址

codesg:放在segment的前面,作為一個段的名稱,這個段的名稱最終將被編譯、連接程序處理為一個段的段地址。

一個程序結(jié)束后,將cpu的控制權(quán)交還給使它得以運行的程序,我們稱這個過程為:程序返回

應(yīng)該在程序末尾添加返回的程序段。

? mov ax,4c00H

? int 21H

? 這兩條指令所實現(xiàn)的功能就是程序返回

段結(jié)束 程序結(jié)束 程序返回

編譯和連接

連接的作用:

?當(dāng)源程序很大時,可以將它分為多個源程序文件夾來編譯,每個源程序編譯成為目標(biāo)文件后,再? ? ?用連接程序?qū)⑺麄冞B接到一起,生成一個可執(zhí)行文件;

?程序中調(diào)用了某個庫文件中的子程序,需要將這個庫文件和該程序生成的目標(biāo)文件連接到一起,? ? ?生成一個可執(zhí)行文件。

?一個源程序編譯后,得到了存有機器碼的目標(biāo)文件,目標(biāo)文件中有些內(nèi)容不能直接用來生成執(zhí)行? ? ?文件,連接程序?qū)⑦@些內(nèi)容處理為最終的可執(zhí)行文件。

4.8可執(zhí)行文件中的程序裝入內(nèi)存并運行的原理?

1.exe的執(zhí)行過程:

??(1)我們在提示符”G:\TRY“后面輸入可執(zhí)行文件的名字”1“,按enter鍵。

??(2)1.exe中的程序運行;

? (3)運行結(jié)束,返回,再次顯示提示符”G:\TRY"。

操作系統(tǒng)的外殼shell

匯編程序從寫出到執(zhí)行的過程:

4.9程序執(zhí)行過程的跟蹤

debug可以將程序加載入內(nèi)存,設(shè)置CS:IP指向程序的入口,但debug并不放棄對cpu的控制,這樣,我們就可以使用debug的相關(guān)命令來單步執(zhí)行程序,查看每條指令的執(zhí)行結(jié)果。

程序加載后,ds中存放著程序所在內(nèi)存區(qū)的段地址,這個內(nèi)存區(qū)的偏移地址為0,則程序所在的內(nèi)存區(qū)的地址為:ds:0;

這個內(nèi)存區(qū)的前256個字節(jié)中存放的是PSP,dos用來和程序進(jìn)行通信。

從256字節(jié)處向后的空間存放的是程序。

所以 PSP的段地址SA,偏移地址為0,物理地址為SA*16+0.。

要使用P命令執(zhí)行int21。

5.1[bx]

[bx]和[0]有些類似,[0]表示內(nèi)存單元,它的偏移地址是0.

(1)內(nèi)存單元的地址:

(2)內(nèi)存單元的長度。

我們用[0]表示一個內(nèi)存單元時,0 表示單元的 偏移地址,段地址默認(rèn)在ds中,單元的長度 (類型)可以由具體指令中的其他操作對象 (比如說寄存器)指出如前邊的AX.AL。

[bx]同樣也表示一個內(nèi)存單元,它的偏移地址在bx中,比如下面的指令:

mov ax,[bx]

mov al, [bx]

loop循環(huán)

描述性符號()

pop ax?

(ax)=((ss)*16+(sp))

(sp)=(sp)+2

idata表示常量

mov ax,[bx] 功能:bx中存放的數(shù)據(jù)作為一個偏移地址 EA ,段地址SA 默認(rèn)在ds中,將SA:EA處 的教據(jù)送入ax中 即(ax)=(ds*16+(bx))

5.2loop

指令的格式是:loop標(biāo)號,CPU 執(zhí)行l(wèi)oop指令的時候,要進(jìn)行兩步操作:

1、(cx)?=(cx)-1

2、?判斷cx中的值,不為零則轉(zhuǎn)至標(biāo)號處執(zhí)行程序,如果為零則向下執(zhí)行。

通常用loop實現(xiàn)循環(huán)功能,cx中存放循環(huán)次數(shù)

mov cx,循環(huán)次數(shù)

s:

? 循環(huán)執(zhí)行的程序段

? loops

利用加法計算123*236

assume cs:code
code segment
  mov ax,0
  mov cx,236
s:add ax,123
 loop s

mov ax,4c00h
int 21h
code ends
end

5.3在debug中跟蹤用loop指令實現(xiàn)的循環(huán)程序

苜先,將其編輯為源程序文件,文件名 定為 p3.asm:對其進(jìn)行編譯連接后生成 p3.exe:然后西用Debug對p3.exe中的程序進(jìn)行跟蹤。

5.5loop和[bx]的聯(lián)合應(yīng)用

計算ffff:0~ffff:b單元中的數(shù)據(jù)的和,結(jié)果存儲在dx中。

(1)運算后的結(jié)果是否會超出dx 所能存儲的范圍?

ffff0~ffffb內(nèi)存單元中的數(shù)據(jù)是字節(jié)型數(shù)據(jù),范圍在0~255之間,12個這樣的數(shù)據(jù)相加,結(jié)果不會大于 65535,可以在dx中存放下。

(2)是否能將量0~ffffb中的數(shù)據(jù)直接累加到dx?

不行,因為量:0~ffffb中的數(shù)據(jù)是8位 的,不能直接加到16位寄存器dx中

5.7一段安全的空間

在8086模 式中,隨意向一 段內(nèi)存空間寫入內(nèi)容是很危險的,因為這段空間中可能存放著重要的系統(tǒng)數(shù)據(jù)或代碼。

比如下面的指令:

mov ax.1000h

mov ds.ax

mov al.0

mov ds:[0],al??

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前名稱:匯編語言4,5章學(xué)習(xí)筆記-創(chuàng)新互聯(lián)
URL分享:http://muchs.cn/article18/dpgddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、Google網(wǎng)站內(nèi)鏈、網(wǎng)站制作、域名注冊、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化