資源描述:
《匯編源程序與上機(jī)過程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、實(shí)驗(yàn)二第一個(gè)匯編語言源程序補(bǔ)充材料匯編語言源程序用匯編語言編寫的程序稱為匯編源程序。匯編語言源程序比機(jī)器語言程序容易理解和掌握,也容易調(diào)試和維護(hù)。但是,計(jì)算機(jī)能讀懂的只有機(jī)器指令,必須使用編譯器將匯編語言源程序翻譯成機(jī)器語言程序才可以由計(jì)算機(jī)執(zhí)行。這個(gè)翻譯的過程稱為“匯編”,目前,常用的匯編程序(編譯器)有:MASM、TASM和DEBUG等。本教材采用的是MASM5.0宏匯編。用匯編語言編寫程序的工作過程MASM5.0我們用匯編語言編程,要用到:編輯器(Edit)、編譯器(masm)、連接器(lin
2、k)、調(diào)試工具(debug)等所有工具,而這些工具都是在操作系統(tǒng)之上運(yùn)行的程序,所以我們的學(xué)習(xí)過程必須在操作系統(tǒng)的環(huán)境中進(jìn)行。1、編輯源程序打開記事本或進(jìn)入DOS方式,運(yùn)行Edit,在其中編輯程序,保存文件(*.asm)。如下圖所示:2、編譯進(jìn)入DOS方式,進(jìn)入C:masm目錄,運(yùn)行masm.exe。在輸入源程序文件名的時(shí)候一定要指明它所在的路徑。如果文件就在當(dāng)前路徑下,只輸入文件名就可以。然后一路回車,產(chǎn)生的目標(biāo)文件名(.obj)默認(rèn)與源文件名一致.編譯結(jié)束,編譯器輸出的最后兩行告訴我們這個(gè)源程
3、序有沒有警告錯(cuò)誤和必須要改正的致命錯(cuò)誤。以簡化的方式進(jìn)行編譯編譯:3、連接在對(duì)源程序(*.asm)進(jìn)行編譯得到目標(biāo)文件(*.obj)后,我們需要對(duì)目標(biāo)文件進(jìn)行連接,從而得到可執(zhí)行文件(*.exe)。連接程序默認(rèn)要輸出的可執(zhí)行文件名為1.EXE,所以不必再另行指定文件名。我們直接按Enter鍵。以簡化的方式進(jìn)行連接連接:連接的作用有以下幾個(gè):當(dāng)源程序很大時(shí),可以將它分為多個(gè)源程序文件來編譯,每個(gè)源程序編譯成為目標(biāo)文件后,再用連接程序?qū)⑺鼈冞B接到一起,生成一個(gè)可執(zhí)行文件;程序中調(diào)用了某個(gè)庫文件中的子程序
4、,需要將這個(gè)庫文件和該程序生成的目標(biāo)文件連接到一起,生成一個(gè)可執(zhí)行文件;一個(gè)源程序編譯后,得到了存有機(jī)器碼的目標(biāo)文件,目標(biāo)文件中的有些內(nèi)容還不能直接用來生成可執(zhí)行文件,連接程序?qū)⑦@些內(nèi)容處理為最終的可執(zhí)行信息。所以,在只有一個(gè)源程序文件,而又不需要調(diào)用某個(gè)庫中的子程序的情況下,也必須用連接程序?qū)δ繕?biāo)文件進(jìn)行處理,生成可執(zhí)行文件。4、執(zhí)行現(xiàn)在,終于將我們的第一個(gè)匯編程序加工成了一個(gè)可在操作系統(tǒng)下執(zhí)行的程序文件。1.exe的執(zhí)行情況:程序到底運(yùn)行沒有?程序當(dāng)然運(yùn)行了,只是從屏幕上不可能看到任何運(yùn)行結(jié)果。
5、我們的程序沒有像顯示器輸出任何信息。程序只是做了一些將數(shù)據(jù)送入寄存器和加法的操作,而這些事情,我們不可能從顯示屏上看出來。程序執(zhí)行完成后返回,屏幕上再次出現(xiàn)操作系統(tǒng)的提示符。5、使用DEBUG調(diào)試和運(yùn)行可執(zhí)行文件在初次使用DEBUG時(shí),可參照下列步驟進(jìn)行:1、調(diào)用DEBUG,裝入用戶程序2、U命令反匯編程序,記錄代碼段與數(shù)據(jù)段首地址3、R觀察寄存器初始狀態(tài)4、以單步工作方式T開始運(yùn)行程序5、D觀察用戶程序數(shù)據(jù)段初始內(nèi)容6、繼續(xù)以單步工作方式運(yùn)行程序7.G連續(xù)工作方式運(yùn)行程序8.E或A修改程序和數(shù)據(jù)9
6、.運(yùn)用斷點(diǎn)調(diào)試程序G6、源程序匯編指令:有對(duì)應(yīng)的機(jī)器碼,可被機(jī)器執(zhí)行的指令。偽指令:沒有對(duì)應(yīng)機(jī)器碼,有編譯器執(zhí)行的指令。XXXsegmentXXXendsendassume定義一個(gè)段segment和ends是一對(duì)成對(duì)使用的偽指令,這是在寫可被編譯器編譯的匯編程序時(shí),必須要用到的一對(duì)偽指令。功能:定義一個(gè)段,segment說明一個(gè)段開始,ends說明一個(gè)段結(jié)束。一個(gè)段必須有一個(gè)名稱來標(biāo)識(shí),使用格式為:段名segment段名ends一個(gè)匯編程序是由多個(gè)段組成的,這些段被用來存放代碼、數(shù)據(jù)或當(dāng)作??臻g來使
7、用。一個(gè)有意義的匯編程序中至少要有一個(gè)段,這個(gè)段用來存放代碼。(匯編語言源程序至少要有一個(gè)代碼段)程序結(jié)束標(biāo)記End是一個(gè)匯編程序的結(jié)束標(biāo)記,編譯器在編譯匯編程序的過程中,如果碰到了偽指令end,就結(jié)束對(duì)源程序的編譯。如果程序?qū)懲炅?,要在結(jié)尾處加上偽指令end。否則,編譯器在編譯程序時(shí),無法知道程序在何處結(jié)束。注意:不要搞混了end和ends。通知編譯器程序結(jié)束通知編譯器一個(gè)段結(jié)束寄存器與段的關(guān)聯(lián)假設(shè)assume:含義為“假設(shè)”。它假設(shè)某一段寄存器和程序中的某一個(gè)用segment…ends定義的段相
8、關(guān)聯(lián)。通過assume說明這種關(guān)聯(lián),在需要的情況下,編譯程序可以將段寄存器和某一個(gè)具體的段相聯(lián)系。格式段寄存器:段名標(biāo)號(hào)一個(gè)標(biāo)號(hào)指代了一個(gè)地址。codesg:放在segment的前面,作為一個(gè)段的名稱,這個(gè)段的名稱最終將被編譯、連接程序處理為一個(gè)段的段地址。start:放在程序的開始,是程序的入口,編譯時(shí)被處理為該條指令的偏移地址。程序返回這兩條指令所實(shí)現(xiàn)的功能是程序返回。我們知道,一個(gè)程序結(jié)束后,將CPU的控制權(quán)交還給使它得以運(yùn)行的程序,我們稱這個(gè)過程為:程序返回。