黃強(qiáng)-匯編-第十章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)課件_第1頁(yè)
黃強(qiáng)-匯編-第十章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)課件_第2頁(yè)
黃強(qiáng)-匯編-第十章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)課件_第3頁(yè)
黃強(qiáng)-匯編-第十章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)課件_第4頁(yè)
黃強(qiáng)-匯編-第十章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)課件_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

10.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述10.2匯編程序10.3連接程序10.4調(diào)試工具第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述第10章匯編語(yǔ)言程序110.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述10.1.1上機(jī)環(huán)境為了對(duì)包括Pentium指令在內(nèi)的匯編語(yǔ)言的源程序文件進(jìn)行匯編,應(yīng)有一臺(tái)Pentium以上的計(jì)算機(jī)。操作系統(tǒng)使用DOS5.0以上版本或在Windows操作系統(tǒng)命令提示符下進(jìn)行。編輯程序可用EDIT等。MASM5.0以上宏匯編系統(tǒng),包括:

(1)MASM:匯編程序 (2)LINK:連接程序 (3)CREF:索引程序 (4)LIB:庫(kù)管理程序用DEBUG調(diào)試程序時(shí),假定后面的內(nèi)容假定在C盤上建立了MASM子目錄,且上述程序都在該目錄中或建立了相應(yīng)路徑。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述10.1.1上機(jī)環(huán)210.1.2匯編語(yǔ)言源程序上機(jī)操作步驟

從編寫好的匯編語(yǔ)言源程序到計(jì)算機(jī)可以運(yùn)行這個(gè)程序,中間要經(jīng)歷一些步驟??梢詺w納如下:

1.編輯源文件

根據(jù)給定的任務(wù)編寫程序。一般在編輯過(guò)程中總會(huì)有錯(cuò)誤產(chǎn)生,因此還要進(jìn)行人工檢查、重新編輯修改,直到所編輯的源程序認(rèn)為無(wú)誤為止。最后將它以一個(gè)源程序文件(.ASM文件)存盤。

2.匯編源程序文件

由編輯程序所建立的.ASM文件只是一個(gè)文本文件,計(jì)算機(jī)無(wú)法直接運(yùn)行該文件。需要經(jīng)過(guò)匯編程序的匯編,使其轉(zhuǎn)換為目標(biāo)代碼文件。它是通過(guò)調(diào)用宏匯編MASM程序完成這一匯編操作的。匯編程序還將對(duì)源程序進(jìn)行語(yǔ)法檢查,如發(fā)現(xiàn)有錯(cuò),將給出錯(cuò)誤原因。程序設(shè)計(jì)者可根據(jù)它分析和修改源程序,并再經(jīng)過(guò)匯編,直到無(wú)誤為止,此時(shí)得到的是一個(gè)目標(biāo)文件(.OBJ)。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.1.2匯編語(yǔ)言源程序上機(jī)操作步驟

從編寫好的33.目標(biāo)文件

目標(biāo)文件為浮動(dòng)的相對(duì)地址,是不可以直接執(zhí)行的。必須經(jīng)過(guò)連接,把有關(guān)模塊連接在一起構(gòu)成統(tǒng)一的編址,從而為運(yùn)行提供條件。在運(yùn)行時(shí),裝填到內(nèi)存中的具體位置由段地址來(lái)確定。連接過(guò)程是由LINK連接程序?qū)崿F(xiàn)的。此時(shí)得到的是一個(gè)可執(zhí)行文件(.EXE文件)。

4.運(yùn)行可執(zhí)行文件

得到該可執(zhí)行文件后,就可以直接調(diào)用運(yùn)行該可執(zhí)行文件。如果程序設(shè)計(jì)正確,則可獲得正確的運(yùn)行結(jié)果。但對(duì)于一個(gè)較大的程序,往往會(huì)有很多設(shè)計(jì)上的邏輯錯(cuò)誤,不可能一次就得到正確的結(jié)果。返回本章首頁(yè)第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)3.目標(biāo)文件

目標(biāo)文件為浮動(dòng)的相對(duì)地址,是不410.2.1匯編程序的類別

經(jīng)過(guò)編輯程序所建立的匯編語(yǔ)言源程序,是不能直接在計(jì)算機(jī)上運(yùn)行的,必須經(jīng)過(guò)匯編、連接后才能運(yùn)行。目前使用的匯編程序中,主要有Microsoft公司的宏匯編MASM5.0和MASM6.11及Borland公司的TruboAssember5.0等版本,它們的基本功能是相似的,但高版本功能更強(qiáng)一些。另外,MASM6.11系統(tǒng)所提供的編程集成環(huán)境PWB將源程序的編輯、匯編、連接和運(yùn)行集成在一起,也是一種不錯(cuò)的選擇。MASM5.0支持80386以下CPU的指令集,以下以MASM5.0為例介紹匯編程序。10.2匯編程序第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.2.1匯編程序的類別

經(jīng)過(guò)編輯程序所建立的匯編510.2.2匯編過(guò)程

宏匯編程序是二次掃描的匯編程序,它兩次從頭到尾逐行掃描源程序完成匯編過(guò)程。第一次掃描用來(lái)定義源程序每個(gè)行的相對(duì)位置。匯編程序中有一個(gè)軟件計(jì)數(shù)器,稱為定位計(jì)數(shù)器或地址計(jì)數(shù)器LC(LocationCounter)。當(dāng)每個(gè)段開(kāi)始時(shí),LC復(fù)位(LC=0)。匯編程序在逐行掃描中,LC按每行指令的字節(jié)數(shù)進(jìn)行計(jì)數(shù)。讀入一個(gè)源程序行后,先查看其是否為偽指令,若為偽指令則LC不計(jì)數(shù),否則將指令長(zhǎng)度(指令字節(jié)數(shù))送L。再檢查此行語(yǔ)句是否有標(biāo)號(hào),若有則把標(biāo)號(hào)寫到一個(gè)符號(hào)表中,并且把現(xiàn)行LC(即為上一條指令的計(jì)數(shù)結(jié)果)賦給標(biāo)號(hào)且填入符號(hào)表中,然后將LC+L→LC,形成下一條指令的地址,即這條指令在段中的相對(duì)位置,稱為段內(nèi)偏移量。若語(yǔ)句沒(méi)有標(biāo)號(hào)則直接將LC十L→LC及其后的操作,其它行按同樣的方法處理,直至掃描到END指令時(shí)結(jié)束第一次掃描,這樣通過(guò)第一次掃描可將源程序中的標(biāo)號(hào)、變量的偏移量等填進(jìn)符號(hào)表中,從而構(gòu)成并得到了各條指令的相對(duì)地址和一張符號(hào)表。在第一次掃描時(shí)還計(jì)算出了源程序機(jī)器碼的總長(zhǎng)度,并可檢查出一些語(yǔ)法錯(cuò)誤,但不產(chǎn)生機(jī)器碼。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.2.2匯編過(guò)程

宏匯編程序是二次掃描的匯編程6匯編程序的第二次掃描是把匯編指令翻譯成機(jī)器碼,它根據(jù)匯編程序中的指令代碼表找到匯編指令助記符對(duì)應(yīng)的機(jī)器指令操作碼,再根據(jù)第一次掃描產(chǎn)生的符號(hào)表,將指令中的符號(hào)操作數(shù)在符號(hào)表中查到,并找到其偏移值,從而將每條匯編指令翻譯成機(jī)器代碼并寫到目標(biāo)程序文件中去。在第二次掃描時(shí),還要進(jìn)行語(yǔ)法檢查,將第一次掃描時(shí)未檢查到的語(yǔ)法錯(cuò)誤查出并顯示。在第二次掃描后除了產(chǎn)生出目標(biāo)程序文件(.OBJ)外,還可根據(jù)需要產(chǎn)生列表文件(.LST)和交叉索引文件(.CRF)。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)匯編程序的第二次掃描是把匯編指令翻譯成機(jī)器碼,它根據(jù)7其中:

·目標(biāo)程序文件——其擴(kuò)展名為.OBJ。在這個(gè)程序文件中,操作碼部分已變成了機(jī)器碼,可由機(jī)器識(shí)別,但地址操作數(shù)部分只是一個(gè)可浮動(dòng)的相對(duì)地址,而不是內(nèi)存中的絕對(duì)地址。

·列表文件——其擴(kuò)展名為.LST。此文件包含源程序及其注釋、地址和目標(biāo)碼(即匯編后的目標(biāo)程序)。它們都是用ASCII碼表示的文本文件,需要時(shí)可用編輯程序?qū)⑵浯蜷_(kāi)以供查閱。

·交叉索引文件——其擴(kuò)展名為.CRF。交叉索引文件是用來(lái)了解源程序中每個(gè)符號(hào)是在哪里定義的。哪些指令用到了這個(gè)符號(hào),給出該指令的行號(hào)。交叉索引文件對(duì)較大的程序很有用,可以用來(lái)幫助查錯(cuò)。要把交叉索引文件打印出來(lái),必須用CREF程序生成交叉索引列表文件,然后用編輯程序等查看。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)其中:

·目標(biāo)程序文件——其擴(kuò)展名為.OBJ。在這個(gè)810.2.3操作過(guò)程

首先啟動(dòng)操作系統(tǒng),假設(shè)MASM系統(tǒng)(以MASM5.0為例)已預(yù)先裝在硬盤的MASM子目錄中。下面均以C盤上操作為例進(jìn)行說(shuō)明。假設(shè)事先用編輯程序編輯的源程序?yàn)閥file.ASM,則匯編過(guò)程如下:C:\MASM\masmMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Sourcefilename[.ASM]:MyfileObjectfilename[.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:51698+417454BytessymbolspacefreeOWarningErrorsOSevereErrors第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.2.3操作過(guò)程

首先啟動(dòng)操作系統(tǒng),假設(shè)MAS9宏匯編程序被調(diào)入以后,先顯示版本號(hào)。然后依次提出提示,請(qǐng)求用戶回答。

第一行提問(wèn)被匯編的源文件的名字,方括號(hào)內(nèi)表示此文件帶有后綴.ASM(.ASM是該源程序文件的隱含擴(kuò)展名),此時(shí)應(yīng)鍵入將要匯編的源程序文件的名字,并按回車鍵。

第二行提問(wèn)匯編后目標(biāo)文件的名字,括號(hào)中的名字表示約定的文件名(其文件名部分自動(dòng)采用源程序文件名),若采用這個(gè)名字則直接鍵入回車鍵,否則鍵入另起的名字。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)宏匯編程序被調(diào)入以后,先顯示版本號(hào)。然后依次提出提示10第三行提問(wèn)是否要建立列表文件。括號(hào)中的NUL為“空”的意思,表示不建立列表文件。若要建立列表文件,則需鍵入文件名,名字任選,也可同源程序文件名。但后綴必須為.LST,后綴可由用戶連同文件名一起鍵入,也可不鍵入,即自動(dòng)采用隱含值。如果不需要建立列表文件,則在第三行提問(wèn)后直接按回車鍵。

第四行是詢問(wèn)是否要建立交叉索引文件,括號(hào)中的意義同第三行,若不需交叉索引文件,可直接按回車鍵,否則鍵入交叉索引文件名。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第三行提問(wèn)是否要建立列表文件。括號(hào)中的NUL為“空”11也可以直接用下面的命令進(jìn)行匯編:

C:\MASM\MASMMyfile

提示同上。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)也可以直接用下面的命令進(jìn)行匯編:

C:\MASM\MASM12用EDIT編輯程序觀看列表文件的操作步驟如下: C:\MASM\EDIT文件名.LST匯編后,也可查看交叉索引文件,以了解源程序中的符號(hào)定義和引用情況。其操作步驟如下: C:\MASM\CREF Creffilename[.CRF]:交叉索引文件名 Listfilename[filename.REF]: C:\MASM\EDITfilename.REF在第一行提示下,打入?yún)R編時(shí)在第四行詢問(wèn)時(shí)所鍵入的交叉索引文件名。第二行提示,可直接回車,表示采用括號(hào)中的文件名。第三行的EDIT程序就可列出交叉索引的列表文件了。如果在匯編時(shí)沒(méi)有要求產(chǎn)生交叉索引文件,當(dāng)然也就無(wú)需用CREF產(chǎn)生交叉索引文件了。返回本章首頁(yè)第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)用EDIT編輯程序觀看列表文件的操作步驟如下:返回本1310.3.1連接程序的作用

由匯編程序生成的目標(biāo)程序文件仍然不能執(zhí)行,必須經(jīng)過(guò)連接程序LINK連接以后,才能變成可執(zhí)行文件。因?yàn)槟繕?biāo)程序文件中有些指令地址還未完全確定,因此仍未成為可以用操作系統(tǒng)裝入的程序形式。再者可能要將幾個(gè)目標(biāo)文件組合成一個(gè)功能更強(qiáng)的實(shí)用文件,甚至要和某些高級(jí)語(yǔ)言的目標(biāo)程序文件進(jìn)行組合,這些都要由連接程序LINK來(lái)完成。通過(guò)連接程序可將若干個(gè)目標(biāo)文件連接成一個(gè)地址可浮動(dòng)的、可由操作系統(tǒng)裝入程序?qū)Φ刂范ㄎ坏目蓤?zhí)行文件。10.3連接程序第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.3.1連接程序的作用

由匯編程序生成的目標(biāo)程14這里要注意的是:連接程序LINK并不僅是為匯編語(yǔ)言程序所專用的。它作為Microsoft的80X86目標(biāo)連接程序,可將宏匯編或高級(jí)語(yǔ)言(例如C、PASCAL等)編譯生成的目標(biāo)文件連接在一起,成為一個(gè)可執(zhí)行程序。并以后綴為.EXE的文件方式存盤。在操作系統(tǒng)命令提示符下,可直接輸入該文件名來(lái)執(zhí)行這個(gè)程序。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)這里要注意的是:連接程序LINK并不僅是為匯編語(yǔ)言程1510.3.2連接過(guò)程

在連接之前,源程序必須通過(guò)匯編或編譯成為目標(biāo)文件。在執(zhí)行連接操作時(shí),以一定的格式將這些目標(biāo)文件與需要的庫(kù)文件一起提供給連接程序。連接程序?qū)⑺鼈兊拇a和數(shù)據(jù)進(jìn)行組合,成為可執(zhí)行文件。操作系統(tǒng)能夠利用裝入程序?qū)⒖蓤?zhí)行文件加載到內(nèi)存的適當(dāng)位置,然后運(yùn)行之。注意:連接程序LINK只能處理在1MB地址以下運(yùn)行的程序。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.3.2連接過(guò)程

在連接之前,源程序必須通過(guò)匯1610.3.3LINK的使用與操作

LINK連接目標(biāo)文件有兩種常用的操作方式:

·會(huì)話方式

·命令方式

不論在哪種操作方式下,若想停止連接程序的工作,可按CTRL+C鍵來(lái)中斷LINK程序的執(zhí)行。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.3.3LINK的使用與操作

LINK連接目標(biāo)文171.會(huì)話方式

首先在含有LINK程序的軟盤插入軟盤驅(qū)動(dòng)器中,或預(yù)先將其存在硬盤上。在操作系統(tǒng)命令提示符下鍵入LINK,連接程序就被調(diào)入。LINK程序?qū)@示有關(guān)信息并依次給出提示信息請(qǐng)用戶逐行回答。屏幕顯示如下:C:\MASM\LINKMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.ObjectModules[.OBJ]:myfileRunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:Warning:nostacksegment第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)1.會(huì)話方式

首先在含有LINK程序的軟盤插入軟盤驅(qū)18第一行提示要求輸入目標(biāo)模塊名。此時(shí)應(yīng)鍵入你要連接的目標(biāo)文件名(后綴.OBJ可省略,LINK程序自動(dòng)加上.OBJ為后綴)。若要連接的是多個(gè)目標(biāo)模塊時(shí),一定要用“+”號(hào)或空格將每個(gè)文件名分開(kāi)。如果輸入的名字一行放不下,就在該行的最后輸入一個(gè)“+”號(hào),然后按回車鍵,這時(shí)連接程序就提示用戶追加目標(biāo)文件。所有目標(biāo)文件輸入完后回車。

第二行提示要求輸入將要生成的可執(zhí)行文件的文件名,括號(hào)內(nèi)為L(zhǎng)INK程序給出的隱含文件名,它與第一行提示中的目標(biāo)模塊名一樣,只是將后綴換成.EXE。若第一行回答的目標(biāo)模塊是多個(gè)的話,則隱含的可執(zhí)行文件名取為第一個(gè)目標(biāo)文件名。此行可不輸入文件名而直接回車。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第一行提示要求輸入目標(biāo)模塊名。此時(shí)應(yīng)鍵入你要連接的目19第三行提示問(wèn)是否要建立列表(映象)文件,若要建立,可鍵入列表文件名,這時(shí)可不輸入擴(kuò)展名,由LINK程序自動(dòng)按隱含值.MAP為擴(kuò)展名。如果不想要列表文件,此行提示時(shí)直接按回車鍵即可。

第四行提示問(wèn)是否需要連接庫(kù)文件。若不需要,則直接按回車鍵。所謂庫(kù)文件,是一些經(jīng)常使用的目標(biāo)文件的集合。它是為了提高效率,為了調(diào)試的方便而建立的。宏匯編語(yǔ)言可以把一些經(jīng)常使用的子程序段單獨(dú)匯編。這些單獨(dú)匯編和調(diào)試的程序作為外部子程序,將它們以目標(biāo)文件的形式存儲(chǔ)起來(lái)而成為一個(gè)文件庫(kù)??砂讶舾蓚€(gè)目標(biāo)文件集中起來(lái),組成一個(gè)文件庫(kù),由庫(kù)管理程序LIB對(duì)其進(jìn)行編輯管理。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第三行提示問(wèn)是否要建立列表(映象)文件,若要建立,可20【例10.1】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ,ex3.OBJ建立一個(gè)名為ex1.EXE的可執(zhí)行文件。

操作如下:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[OBJ]:ex1+ex2+

ObjectModules[.OBJ]:ex3/pause

RunFile[EX1.EXE]:

ListFile[NULMAP]:

Libraries[.LIB]:第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)【例10.1】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ,21第一行目標(biāo)模塊沒(méi)輸完,最后鍵入“+”號(hào),則LINK程序。

第二行繼續(xù)提示輸入目標(biāo)模塊。第二行末尾的”/pause”為L(zhǎng)INK程序的可選擇的參數(shù)項(xiàng)。這里鍵入了這個(gè)參數(shù),表示當(dāng)幾個(gè)目標(biāo)模塊不在一張磁盤上時(shí),連接過(guò)程中需要換盤。在換盤時(shí)此參數(shù)可使連接程序暫停,待換好盤后繼續(xù)執(zhí)行。

第三行鍵入回車表示執(zhí)行程序名選擇括號(hào)里提示的名字。

第四行鍵入回車表示不建立列表文件。

第五行鍵入回車表示連接過(guò)程中不需要用文件庫(kù)中的目標(biāo)模塊。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第一行目標(biāo)模塊沒(méi)輸完,最后鍵入“+”號(hào),則LINK程22【例10.2】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ程序時(shí)用到了A驅(qū)動(dòng)器上LIB目錄下的庫(kù)文件EX.LIB,可執(zhí)行文件名為exa.EXE,建立一個(gè)名為aaa.MAP的映象(列表)文件。

操作過(guò)程:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[.OBJ]:ex1+ex2

RunFile[EX1.EXE]:exa.exe

ListFile[NUL-MAP]:aaa

Libraries[.LIB]:a:\lib\ex

注:關(guān)于庫(kù)文件的建立方法見(jiàn)10.3.4節(jié)。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)【例10.2】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ程23目前常用的匯編語(yǔ)言調(diào)試工具主要有DEBUG、CodeView及TurboDebuger等,其中DEBUG通過(guò)單步、設(shè)置斷點(diǎn)等方式為匯編語(yǔ)言程序員提供了非常有效的調(diào)試手段。10.4調(diào)試工具第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)目前常用的匯編語(yǔ)言調(diào)試工具主要有DEBUG、Code2410.4.1DEBUG程序的調(diào)用

在操作系統(tǒng)的命令提示符下,可鍵入命令:

C:\MASM\DEBUG[d:][PATH][filename][.ext]][parm1][parm2]

其中,文件名是被調(diào)試文件的名字。如用戶鍵入文件名,則DEBUG將指定的文件裝入存儲(chǔ)器中,用戶可對(duì)其進(jìn)行調(diào)試。如果未鍵入文件名,則用戶可以用當(dāng)前存儲(chǔ)器的內(nèi)容工作,或者用DEBUG命令N和L把需要的文件裝入存儲(chǔ)器后再進(jìn)行調(diào)試。命令中的d指定驅(qū)動(dòng)器,PATH為路徑,parm1和parm2則為運(yùn)行被調(diào)試文件時(shí)所需要的命令參數(shù)。

在DEBUG程序調(diào)入后,將出現(xiàn)提示符“-”,此時(shí)就可用DEBUG命令來(lái)調(diào)試程序。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.4.1DEBUG程序的調(diào)用

在操作系統(tǒng)的命令提2510.4.2DEBUG的主要命令

1.顯示存儲(chǔ)單元的命令D(DUMP),格式為:

-D[address]或

-D[range]

例如,按指定范圍顯示存儲(chǔ)單元內(nèi)容的方法為:

-D100120

18E4:0100726F7220720D6164-696E672064726976rorr.adingdriv

18E4:01107375246669636965-6E74206D656D6F72su.ficientmemor

其中0100H至011FH是DEBUG顯示的單元內(nèi)容。左邊用10六進(jìn)制表示每個(gè)字節(jié),右邊用ASCII字符表示每個(gè)字節(jié),“.”表示不可顯示的字符。這里沒(méi)有指定段地址,D命令自動(dòng)顯示DS段的內(nèi)容。如果只指定首地址,則顯示從首地址開(kāi)始的80個(gè)字節(jié)的內(nèi)容。如果完全沒(méi)有指定地址,則顯示上一個(gè)D命令顯示的最后一個(gè)單元后的內(nèi)容。

第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.4.2DEBUG的主要命令

1.顯示存儲(chǔ)單元的命令26

2.修改存儲(chǔ)單元內(nèi)容的命令E(Enter)

此命令有兩種格式如下:第一種格式可以用給定的內(nèi)容表來(lái)替代指定范圍的存儲(chǔ)單元內(nèi)容。命令格式為:

-Eaddress[list]

例如,-Eds:100F5’OK’78

其中F5,’O’,’K’和78各占一個(gè)字節(jié),該命令可以用這五個(gè)字節(jié)來(lái)替代存儲(chǔ)單元DS:0100到0104的原先的內(nèi)容。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)

2.修改存儲(chǔ)單元內(nèi)容的命令E(Enter)

此命令27第二種格式則是采用逐個(gè)單元相繼修改的方法。命令格式為:

-Eadress

例如,-Ees:100

則可能顯示為:

18E4:010089.-

如果需要把該單元的內(nèi)容修改為78,則用戶可以直接鍵入78,再按“空格”鍵可接著顯示下一個(gè)單元的內(nèi)容,如:

18E4:010089.781B.-

這樣,用戶可以不斷修改相繼單元的內(nèi)容,直到用Enter鍵結(jié)束該命令為止。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第二種格式則是采用逐個(gè)單元相繼修改的方法。命令格式為284.檢查和修改寄存器內(nèi)容的命令R(Register)

它有三種格式如下:

(1)顯示CPU內(nèi)所有寄存器內(nèi)容和標(biāo)志位狀態(tài),其格式為:

-R

例如:

-R

AX=0000BX=0000CX=010ADX=0000SP=FFFEEP=0000SI=0000DI=0000

DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC

18E4:0100C70604023801MOVWORDPTR[0204],0138DS:0204=0138

其中標(biāo)志位狀態(tài)的含義如下:第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)4.檢查和修改寄存器內(nèi)容的命令R(Register)

29表10.1DEBUG中標(biāo)志位的符號(hào)表示標(biāo)志名稱溢出OF方向DF中斷IF符號(hào)SF零ZF輔助進(jìn)位AF奇偶PF進(jìn)位CF置位狀態(tài)OVDNEINGZRACPECY復(fù)位狀態(tài)NVUPDIPLNZNAPONC第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)表10.1DEBUG中標(biāo)志位的符號(hào)表示標(biāo)志名稱溢出方向30(2)顯示和修改某個(gè)寄存器內(nèi)容,其格式為:

-Rregistername

例如,鍵入

-RAX

系統(tǒng)將響應(yīng)如下:

AXFlF4

即AX寄存器的當(dāng)前內(nèi)容為F1F4,如不修改則按Enter鍵,否則,可鍵入欲修改的內(nèi)容,如:

-RBX

BX0369

:059F

則把BX寄存器的內(nèi)容修改為059FH。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)(2)顯示和修改某個(gè)寄存器內(nèi)容,其格式為:

-Rr31(3)顯示和修改標(biāo)志位狀態(tài),命令格式為:

-RF

系統(tǒng)將響應(yīng),如:

OVDNEINGZRACPECY-

此時(shí),如不修改其內(nèi)容可按Enter鍵,否則,可鍵入欲修改的內(nèi)容,如:

OVDNEINGZRACPECY-PONZDINV

可見(jiàn)鍵入的順序可以是任意的,且標(biāo)志間也可不用空格。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)(3)顯示和修改標(biāo)志位狀態(tài),命令格式為:

-RF

325.運(yùn)行命令G(Go),其格式為:

-G[=address1][address2[address3...]]

其中,地址1指定了運(yùn)行的起始地址,如不指定則從當(dāng)前的CS:IP開(kāi)始運(yùn)行。后面的地址均為斷點(diǎn)地址,當(dāng)指令執(zhí)行到斷點(diǎn)時(shí),就停止執(zhí)行并顯示當(dāng)前所有寄存器及標(biāo)志位的內(nèi)容,和下一條將要執(zhí)行的指令。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)5.運(yùn)行命令G(Go),其格式為:

-G[=addre336.跟蹤命令T(Trace),有兩種格式:

(1)逐條指令跟蹤

-T[=adress]

從指定地址起執(zhí)行一條指令后停下來(lái),顯示所有寄存器內(nèi)容及標(biāo)志位的值。如未指定地址則從當(dāng)前的CS:IP開(kāi)始執(zhí)行。

(2)多條指令跟蹤

-T[=address][Value]

從指定地址起執(zhí)行n條指令后停下來(lái),n由value指定。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)6.跟蹤命令T(Trace),有兩種格式:

(1)逐條347.程序步跟蹤命令P(Programmingstep)

由于T命令在遇到操作系統(tǒng)或BIOS中斷時(shí)會(huì)跟蹤到中斷服務(wù)程序內(nèi)部,有時(shí)出現(xiàn)死機(jī)現(xiàn)象,因而可用步跟蹤命令P(Programmingstep)代替T命令,以避免上述現(xiàn)象。P命令的使用格式為:

-P[=address][Value]第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)7.程序步跟蹤命令P(Programmingstep)

358.匯編命令A(yù)(Assemble),其格式為:

-A[address]

該命令允許鍵入?yún)R編語(yǔ)言語(yǔ)句,并能把它們匯編成機(jī)器代碼,相繼地存放在從指定地址開(kāi)始的存儲(chǔ)區(qū)中。必須注意:

DEBUG把鍵入的數(shù)字均看成10六進(jìn)制數(shù),所以如要鍵入10進(jìn)制數(shù),則其后應(yīng)加以說(shuō)明,如100D。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)8.匯編命令A(yù)(Assemble),其格式為:

-A[369.反匯編命令U(Unassemble),有兩種格式。

(1)從指定地址開(kāi)始,反匯編32個(gè)字節(jié),其格式為:

-U[address]

例如:

-U100

18E4:0100C70604023801 MOVWORDRTR[0204],0138

18E4:0106C70606020002 MOVWORDPTR[0206],0200

18E4:010CC70608020202 MOVWORDPIR[0208],0202

18E4:0112BB0402 MOVBX,0204

18E4:0115E80200 CALL011A

18E4:0118CD20 INT20

如果地址被省略,則從上一個(gè)U命令的最后一條指令的下一個(gè)單元開(kāi)始顯示32個(gè)字節(jié)。

第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)9.反匯編命令U(Unassemble),有兩種格式。

(137(2)對(duì)指定范圍內(nèi)的存儲(chǔ)單元進(jìn)行反匯編,格式為:

-U[range]

例如:

-U10010C

18E4:0100C70604023801 MOVWORDPTR[0204],0138

18E4:0106C70606020002 MOVWORDPTR[0206],0200

18E4:010CC70608020202MOVWORDPTR[0208],0202

-U100112

18E4:0100C70604023801 MOVWORDPTR[0204],0138

18E4:0106C70606020002 MOVWORDPTR[0206],0200

18E4:010CC70608020202 MOVWORDPTR[0208],0202

可見(jiàn)這兩種格式是等效的。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)(2)對(duì)指定范圍內(nèi)的存儲(chǔ)單元進(jìn)行反匯編,格式為:

3817.輸入命令I(lǐng)(Input)。其格式為:-Iportaddress(portaddress為端口號(hào))其功能是從指定的端口輸入一個(gè)字節(jié)并顯示出來(lái)。例如:-I2F8FF它表示從02F8H端口讀出的內(nèi)容值為0FFH。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)17.輸入命令I(lǐng)(Input)。其格式為:第10章匯編3918.輸出命令O(Output)。其格式為:-Oportaddressbyte(portaddress為端口號(hào))其功能是向指定的端口輸出一個(gè)字節(jié)。例如:-O2F9B7它表示將字節(jié)值0B7H輸出到端口2F9H中。19.退出DEBUG命令Q(Quit),其格式為:-Q它退出DEBUG,返回操作系統(tǒng)。本命令并無(wú)存盤功能,如需存盤應(yīng)先使用W命令。返回本章首頁(yè)第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)18.輸出命令O(Output)。其格式為:19.退出DEB40匯編語(yǔ)言程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程。編寫程序、上機(jī)調(diào)試、運(yùn)行程序是進(jìn)一步學(xué)習(xí)和掌握匯編語(yǔ)言程序設(shè)計(jì)的必要手段。建立程序、調(diào)試程序需要一些應(yīng)用程序的幫助。本章主要講述了一些與上機(jī)操作有關(guān)的應(yīng)用程序,如MASM、LINK、DEBUG、PWB等。對(duì)于一個(gè)掌握匯編語(yǔ)言程序設(shè)計(jì)的人來(lái)說(shuō),應(yīng)熟練掌握以上知識(shí)。本章小結(jié)返回本章首頁(yè)第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)匯編語(yǔ)言程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程。編寫程序、上4110.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述10.2匯編程序10.3連接程序10.4調(diào)試工具第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述第10章匯編語(yǔ)言程序4210.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述10.1.1上機(jī)環(huán)境為了對(duì)包括Pentium指令在內(nèi)的匯編語(yǔ)言的源程序文件進(jìn)行匯編,應(yīng)有一臺(tái)Pentium以上的計(jì)算機(jī)。操作系統(tǒng)使用DOS5.0以上版本或在Windows操作系統(tǒng)命令提示符下進(jìn)行。編輯程序可用EDIT等。MASM5.0以上宏匯編系統(tǒng),包括:

(1)MASM:匯編程序 (2)LINK:連接程序 (3)CREF:索引程序 (4)LIB:庫(kù)管理程序用DEBUG調(diào)試程序時(shí),假定后面的內(nèi)容假定在C盤上建立了MASM子目錄,且上述程序都在該目錄中或建立了相應(yīng)路徑。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.1匯編語(yǔ)言程序設(shè)計(jì)上機(jī)概述10.1.1上機(jī)環(huán)4310.1.2匯編語(yǔ)言源程序上機(jī)操作步驟

從編寫好的匯編語(yǔ)言源程序到計(jì)算機(jī)可以運(yùn)行這個(gè)程序,中間要經(jīng)歷一些步驟??梢詺w納如下:

1.編輯源文件

根據(jù)給定的任務(wù)編寫程序。一般在編輯過(guò)程中總會(huì)有錯(cuò)誤產(chǎn)生,因此還要進(jìn)行人工檢查、重新編輯修改,直到所編輯的源程序認(rèn)為無(wú)誤為止。最后將它以一個(gè)源程序文件(.ASM文件)存盤。

2.匯編源程序文件

由編輯程序所建立的.ASM文件只是一個(gè)文本文件,計(jì)算機(jī)無(wú)法直接運(yùn)行該文件。需要經(jīng)過(guò)匯編程序的匯編,使其轉(zhuǎn)換為目標(biāo)代碼文件。它是通過(guò)調(diào)用宏匯編MASM程序完成這一匯編操作的。匯編程序還將對(duì)源程序進(jìn)行語(yǔ)法檢查,如發(fā)現(xiàn)有錯(cuò),將給出錯(cuò)誤原因。程序設(shè)計(jì)者可根據(jù)它分析和修改源程序,并再經(jīng)過(guò)匯編,直到無(wú)誤為止,此時(shí)得到的是一個(gè)目標(biāo)文件(.OBJ)。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.1.2匯編語(yǔ)言源程序上機(jī)操作步驟

從編寫好的443.目標(biāo)文件

目標(biāo)文件為浮動(dòng)的相對(duì)地址,是不可以直接執(zhí)行的。必須經(jīng)過(guò)連接,把有關(guān)模塊連接在一起構(gòu)成統(tǒng)一的編址,從而為運(yùn)行提供條件。在運(yùn)行時(shí),裝填到內(nèi)存中的具體位置由段地址來(lái)確定。連接過(guò)程是由LINK連接程序?qū)崿F(xiàn)的。此時(shí)得到的是一個(gè)可執(zhí)行文件(.EXE文件)。

4.運(yùn)行可執(zhí)行文件

得到該可執(zhí)行文件后,就可以直接調(diào)用運(yùn)行該可執(zhí)行文件。如果程序設(shè)計(jì)正確,則可獲得正確的運(yùn)行結(jié)果。但對(duì)于一個(gè)較大的程序,往往會(huì)有很多設(shè)計(jì)上的邏輯錯(cuò)誤,不可能一次就得到正確的結(jié)果。返回本章首頁(yè)第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)3.目標(biāo)文件

目標(biāo)文件為浮動(dòng)的相對(duì)地址,是不4510.2.1匯編程序的類別

經(jīng)過(guò)編輯程序所建立的匯編語(yǔ)言源程序,是不能直接在計(jì)算機(jī)上運(yùn)行的,必須經(jīng)過(guò)匯編、連接后才能運(yùn)行。目前使用的匯編程序中,主要有Microsoft公司的宏匯編MASM5.0和MASM6.11及Borland公司的TruboAssember5.0等版本,它們的基本功能是相似的,但高版本功能更強(qiáng)一些。另外,MASM6.11系統(tǒng)所提供的編程集成環(huán)境PWB將源程序的編輯、匯編、連接和運(yùn)行集成在一起,也是一種不錯(cuò)的選擇。MASM5.0支持80386以下CPU的指令集,以下以MASM5.0為例介紹匯編程序。10.2匯編程序第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.2.1匯編程序的類別

經(jīng)過(guò)編輯程序所建立的匯編4610.2.2匯編過(guò)程

宏匯編程序是二次掃描的匯編程序,它兩次從頭到尾逐行掃描源程序完成匯編過(guò)程。第一次掃描用來(lái)定義源程序每個(gè)行的相對(duì)位置。匯編程序中有一個(gè)軟件計(jì)數(shù)器,稱為定位計(jì)數(shù)器或地址計(jì)數(shù)器LC(LocationCounter)。當(dāng)每個(gè)段開(kāi)始時(shí),LC復(fù)位(LC=0)。匯編程序在逐行掃描中,LC按每行指令的字節(jié)數(shù)進(jìn)行計(jì)數(shù)。讀入一個(gè)源程序行后,先查看其是否為偽指令,若為偽指令則LC不計(jì)數(shù),否則將指令長(zhǎng)度(指令字節(jié)數(shù))送L。再檢查此行語(yǔ)句是否有標(biāo)號(hào),若有則把標(biāo)號(hào)寫到一個(gè)符號(hào)表中,并且把現(xiàn)行LC(即為上一條指令的計(jì)數(shù)結(jié)果)賦給標(biāo)號(hào)且填入符號(hào)表中,然后將LC+L→LC,形成下一條指令的地址,即這條指令在段中的相對(duì)位置,稱為段內(nèi)偏移量。若語(yǔ)句沒(méi)有標(biāo)號(hào)則直接將LC十L→LC及其后的操作,其它行按同樣的方法處理,直至掃描到END指令時(shí)結(jié)束第一次掃描,這樣通過(guò)第一次掃描可將源程序中的標(biāo)號(hào)、變量的偏移量等填進(jìn)符號(hào)表中,從而構(gòu)成并得到了各條指令的相對(duì)地址和一張符號(hào)表。在第一次掃描時(shí)還計(jì)算出了源程序機(jī)器碼的總長(zhǎng)度,并可檢查出一些語(yǔ)法錯(cuò)誤,但不產(chǎn)生機(jī)器碼。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.2.2匯編過(guò)程

宏匯編程序是二次掃描的匯編程47匯編程序的第二次掃描是把匯編指令翻譯成機(jī)器碼,它根據(jù)匯編程序中的指令代碼表找到匯編指令助記符對(duì)應(yīng)的機(jī)器指令操作碼,再根據(jù)第一次掃描產(chǎn)生的符號(hào)表,將指令中的符號(hào)操作數(shù)在符號(hào)表中查到,并找到其偏移值,從而將每條匯編指令翻譯成機(jī)器代碼并寫到目標(biāo)程序文件中去。在第二次掃描時(shí),還要進(jìn)行語(yǔ)法檢查,將第一次掃描時(shí)未檢查到的語(yǔ)法錯(cuò)誤查出并顯示。在第二次掃描后除了產(chǎn)生出目標(biāo)程序文件(.OBJ)外,還可根據(jù)需要產(chǎn)生列表文件(.LST)和交叉索引文件(.CRF)。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)匯編程序的第二次掃描是把匯編指令翻譯成機(jī)器碼,它根據(jù)48其中:

·目標(biāo)程序文件——其擴(kuò)展名為.OBJ。在這個(gè)程序文件中,操作碼部分已變成了機(jī)器碼,可由機(jī)器識(shí)別,但地址操作數(shù)部分只是一個(gè)可浮動(dòng)的相對(duì)地址,而不是內(nèi)存中的絕對(duì)地址。

·列表文件——其擴(kuò)展名為.LST。此文件包含源程序及其注釋、地址和目標(biāo)碼(即匯編后的目標(biāo)程序)。它們都是用ASCII碼表示的文本文件,需要時(shí)可用編輯程序?qū)⑵浯蜷_(kāi)以供查閱。

·交叉索引文件——其擴(kuò)展名為.CRF。交叉索引文件是用來(lái)了解源程序中每個(gè)符號(hào)是在哪里定義的。哪些指令用到了這個(gè)符號(hào),給出該指令的行號(hào)。交叉索引文件對(duì)較大的程序很有用,可以用來(lái)幫助查錯(cuò)。要把交叉索引文件打印出來(lái),必須用CREF程序生成交叉索引列表文件,然后用編輯程序等查看。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)其中:

·目標(biāo)程序文件——其擴(kuò)展名為.OBJ。在這個(gè)4910.2.3操作過(guò)程

首先啟動(dòng)操作系統(tǒng),假設(shè)MASM系統(tǒng)(以MASM5.0為例)已預(yù)先裝在硬盤的MASM子目錄中。下面均以C盤上操作為例進(jìn)行說(shuō)明。假設(shè)事先用編輯程序編輯的源程序?yàn)閥file.ASM,則匯編過(guò)程如下:C:\MASM\masmMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Sourcefilename[.ASM]:MyfileObjectfilename[.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:51698+417454BytessymbolspacefreeOWarningErrorsOSevereErrors第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.2.3操作過(guò)程

首先啟動(dòng)操作系統(tǒng),假設(shè)MAS50宏匯編程序被調(diào)入以后,先顯示版本號(hào)。然后依次提出提示,請(qǐng)求用戶回答。

第一行提問(wèn)被匯編的源文件的名字,方括號(hào)內(nèi)表示此文件帶有后綴.ASM(.ASM是該源程序文件的隱含擴(kuò)展名),此時(shí)應(yīng)鍵入將要匯編的源程序文件的名字,并按回車鍵。

第二行提問(wèn)匯編后目標(biāo)文件的名字,括號(hào)中的名字表示約定的文件名(其文件名部分自動(dòng)采用源程序文件名),若采用這個(gè)名字則直接鍵入回車鍵,否則鍵入另起的名字。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)宏匯編程序被調(diào)入以后,先顯示版本號(hào)。然后依次提出提示51第三行提問(wèn)是否要建立列表文件。括號(hào)中的NUL為“空”的意思,表示不建立列表文件。若要建立列表文件,則需鍵入文件名,名字任選,也可同源程序文件名。但后綴必須為.LST,后綴可由用戶連同文件名一起鍵入,也可不鍵入,即自動(dòng)采用隱含值。如果不需要建立列表文件,則在第三行提問(wèn)后直接按回車鍵。

第四行是詢問(wèn)是否要建立交叉索引文件,括號(hào)中的意義同第三行,若不需交叉索引文件,可直接按回車鍵,否則鍵入交叉索引文件名。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第三行提問(wèn)是否要建立列表文件。括號(hào)中的NUL為“空”52也可以直接用下面的命令進(jìn)行匯編:

C:\MASM\MASMMyfile

提示同上。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)也可以直接用下面的命令進(jìn)行匯編:

C:\MASM\MASM53用EDIT編輯程序觀看列表文件的操作步驟如下: C:\MASM\EDIT文件名.LST匯編后,也可查看交叉索引文件,以了解源程序中的符號(hào)定義和引用情況。其操作步驟如下: C:\MASM\CREF Creffilename[.CRF]:交叉索引文件名 Listfilename[filename.REF]: C:\MASM\EDITfilename.REF在第一行提示下,打入?yún)R編時(shí)在第四行詢問(wèn)時(shí)所鍵入的交叉索引文件名。第二行提示,可直接回車,表示采用括號(hào)中的文件名。第三行的EDIT程序就可列出交叉索引的列表文件了。如果在匯編時(shí)沒(méi)有要求產(chǎn)生交叉索引文件,當(dāng)然也就無(wú)需用CREF產(chǎn)生交叉索引文件了。返回本章首頁(yè)第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)用EDIT編輯程序觀看列表文件的操作步驟如下:返回本5410.3.1連接程序的作用

由匯編程序生成的目標(biāo)程序文件仍然不能執(zhí)行,必須經(jīng)過(guò)連接程序LINK連接以后,才能變成可執(zhí)行文件。因?yàn)槟繕?biāo)程序文件中有些指令地址還未完全確定,因此仍未成為可以用操作系統(tǒng)裝入的程序形式。再者可能要將幾個(gè)目標(biāo)文件組合成一個(gè)功能更強(qiáng)的實(shí)用文件,甚至要和某些高級(jí)語(yǔ)言的目標(biāo)程序文件進(jìn)行組合,這些都要由連接程序LINK來(lái)完成。通過(guò)連接程序可將若干個(gè)目標(biāo)文件連接成一個(gè)地址可浮動(dòng)的、可由操作系統(tǒng)裝入程序?qū)Φ刂范ㄎ坏目蓤?zhí)行文件。10.3連接程序第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.3.1連接程序的作用

由匯編程序生成的目標(biāo)程55這里要注意的是:連接程序LINK并不僅是為匯編語(yǔ)言程序所專用的。它作為Microsoft的80X86目標(biāo)連接程序,可將宏匯編或高級(jí)語(yǔ)言(例如C、PASCAL等)編譯生成的目標(biāo)文件連接在一起,成為一個(gè)可執(zhí)行程序。并以后綴為.EXE的文件方式存盤。在操作系統(tǒng)命令提示符下,可直接輸入該文件名來(lái)執(zhí)行這個(gè)程序。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)這里要注意的是:連接程序LINK并不僅是為匯編語(yǔ)言程5610.3.2連接過(guò)程

在連接之前,源程序必須通過(guò)匯編或編譯成為目標(biāo)文件。在執(zhí)行連接操作時(shí),以一定的格式將這些目標(biāo)文件與需要的庫(kù)文件一起提供給連接程序。連接程序?qū)⑺鼈兊拇a和數(shù)據(jù)進(jìn)行組合,成為可執(zhí)行文件。操作系統(tǒng)能夠利用裝入程序?qū)⒖蓤?zhí)行文件加載到內(nèi)存的適當(dāng)位置,然后運(yùn)行之。注意:連接程序LINK只能處理在1MB地址以下運(yùn)行的程序。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.3.2連接過(guò)程

在連接之前,源程序必須通過(guò)匯5710.3.3LINK的使用與操作

LINK連接目標(biāo)文件有兩種常用的操作方式:

·會(huì)話方式

·命令方式

不論在哪種操作方式下,若想停止連接程序的工作,可按CTRL+C鍵來(lái)中斷LINK程序的執(zhí)行。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.3.3LINK的使用與操作

LINK連接目標(biāo)文581.會(huì)話方式

首先在含有LINK程序的軟盤插入軟盤驅(qū)動(dòng)器中,或預(yù)先將其存在硬盤上。在操作系統(tǒng)命令提示符下鍵入LINK,連接程序就被調(diào)入。LINK程序?qū)@示有關(guān)信息并依次給出提示信息請(qǐng)用戶逐行回答。屏幕顯示如下:C:\MASM\LINKMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.ObjectModules[.OBJ]:myfileRunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:Warning:nostacksegment第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)1.會(huì)話方式

首先在含有LINK程序的軟盤插入軟盤驅(qū)59第一行提示要求輸入目標(biāo)模塊名。此時(shí)應(yīng)鍵入你要連接的目標(biāo)文件名(后綴.OBJ可省略,LINK程序自動(dòng)加上.OBJ為后綴)。若要連接的是多個(gè)目標(biāo)模塊時(shí),一定要用“+”號(hào)或空格將每個(gè)文件名分開(kāi)。如果輸入的名字一行放不下,就在該行的最后輸入一個(gè)“+”號(hào),然后按回車鍵,這時(shí)連接程序就提示用戶追加目標(biāo)文件。所有目標(biāo)文件輸入完后回車。

第二行提示要求輸入將要生成的可執(zhí)行文件的文件名,括號(hào)內(nèi)為L(zhǎng)INK程序給出的隱含文件名,它與第一行提示中的目標(biāo)模塊名一樣,只是將后綴換成.EXE。若第一行回答的目標(biāo)模塊是多個(gè)的話,則隱含的可執(zhí)行文件名取為第一個(gè)目標(biāo)文件名。此行可不輸入文件名而直接回車。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第一行提示要求輸入目標(biāo)模塊名。此時(shí)應(yīng)鍵入你要連接的目60第三行提示問(wèn)是否要建立列表(映象)文件,若要建立,可鍵入列表文件名,這時(shí)可不輸入擴(kuò)展名,由LINK程序自動(dòng)按隱含值.MAP為擴(kuò)展名。如果不想要列表文件,此行提示時(shí)直接按回車鍵即可。

第四行提示問(wèn)是否需要連接庫(kù)文件。若不需要,則直接按回車鍵。所謂庫(kù)文件,是一些經(jīng)常使用的目標(biāo)文件的集合。它是為了提高效率,為了調(diào)試的方便而建立的。宏匯編語(yǔ)言可以把一些經(jīng)常使用的子程序段單獨(dú)匯編。這些單獨(dú)匯編和調(diào)試的程序作為外部子程序,將它們以目標(biāo)文件的形式存儲(chǔ)起來(lái)而成為一個(gè)文件庫(kù)??砂讶舾蓚€(gè)目標(biāo)文件集中起來(lái),組成一個(gè)文件庫(kù),由庫(kù)管理程序LIB對(duì)其進(jìn)行編輯管理。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第三行提示問(wèn)是否要建立列表(映象)文件,若要建立,可61【例10.1】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ,ex3.OBJ建立一個(gè)名為ex1.EXE的可執(zhí)行文件。

操作如下:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[OBJ]:ex1+ex2+

ObjectModules[.OBJ]:ex3/pause

RunFile[EX1.EXE]:

ListFile[NULMAP]:

Libraries[.LIB]:第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)【例10.1】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ,62第一行目標(biāo)模塊沒(méi)輸完,最后鍵入“+”號(hào),則LINK程序。

第二行繼續(xù)提示輸入目標(biāo)模塊。第二行末尾的”/pause”為L(zhǎng)INK程序的可選擇的參數(shù)項(xiàng)。這里鍵入了這個(gè)參數(shù),表示當(dāng)幾個(gè)目標(biāo)模塊不在一張磁盤上時(shí),連接過(guò)程中需要換盤。在換盤時(shí)此參數(shù)可使連接程序暫停,待換好盤后繼續(xù)執(zhí)行。

第三行鍵入回車表示執(zhí)行程序名選擇括號(hào)里提示的名字。

第四行鍵入回車表示不建立列表文件。

第五行鍵入回車表示連接過(guò)程中不需要用文件庫(kù)中的目標(biāo)模塊。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第一行目標(biāo)模塊沒(méi)輸完,最后鍵入“+”號(hào),則LINK程63【例10.2】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ程序時(shí)用到了A驅(qū)動(dòng)器上LIB目錄下的庫(kù)文件EX.LIB,可執(zhí)行文件名為exa.EXE,建立一個(gè)名為aaa.MAP的映象(列表)文件。

操作過(guò)程:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[.OBJ]:ex1+ex2

RunFile[EX1.EXE]:exa.exe

ListFile[NUL-MAP]:aaa

Libraries[.LIB]:a:\lib\ex

注:關(guān)于庫(kù)文件的建立方法見(jiàn)10.3.4節(jié)。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)【例10.2】連接目標(biāo)模塊ex1.OBJ,ex2.OBJ程64目前常用的匯編語(yǔ)言調(diào)試工具主要有DEBUG、CodeView及TurboDebuger等,其中DEBUG通過(guò)單步、設(shè)置斷點(diǎn)等方式為匯編語(yǔ)言程序員提供了非常有效的調(diào)試手段。10.4調(diào)試工具第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)目前常用的匯編語(yǔ)言調(diào)試工具主要有DEBUG、Code6510.4.1DEBUG程序的調(diào)用

在操作系統(tǒng)的命令提示符下,可鍵入命令:

C:\MASM\DEBUG[d:][PATH][filename][.ext]][parm1][parm2]

其中,文件名是被調(diào)試文件的名字。如用戶鍵入文件名,則DEBUG將指定的文件裝入存儲(chǔ)器中,用戶可對(duì)其進(jìn)行調(diào)試。如果未鍵入文件名,則用戶可以用當(dāng)前存儲(chǔ)器的內(nèi)容工作,或者用DEBUG命令N和L把需要的文件裝入存儲(chǔ)器后再進(jìn)行調(diào)試。命令中的d指定驅(qū)動(dòng)器,PATH為路徑,parm1和parm2則為運(yùn)行被調(diào)試文件時(shí)所需要的命令參數(shù)。

在DEBUG程序調(diào)入后,將出現(xiàn)提示符“-”,此時(shí)就可用DEBUG命令來(lái)調(diào)試程序。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.4.1DEBUG程序的調(diào)用

在操作系統(tǒng)的命令提6610.4.2DEBUG的主要命令

1.顯示存儲(chǔ)單元的命令D(DUMP),格式為:

-D[address]或

-D[range]

例如,按指定范圍顯示存儲(chǔ)單元內(nèi)容的方法為:

-D100120

18E4:0100726F7220720D6164-696E672064726976rorr.adingdriv

18E4:01107375246669636965-6E74206D656D6F72su.ficientmemor

其中0100H至011FH是DEBUG顯示的單元內(nèi)容。左邊用10六進(jìn)制表示每個(gè)字節(jié),右邊用ASCII字符表示每個(gè)字節(jié),“.”表示不可顯示的字符。這里沒(méi)有指定段地址,D命令自動(dòng)顯示DS段的內(nèi)容。如果只指定首地址,則顯示從首地址開(kāi)始的80個(gè)字節(jié)的內(nèi)容。如果完全沒(méi)有指定地址,則顯示上一個(gè)D命令顯示的最后一個(gè)單元后的內(nèi)容。

第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)10.4.2DEBUG的主要命令

1.顯示存儲(chǔ)單元的命令67

2.修改存儲(chǔ)單元內(nèi)容的命令E(Enter)

此命令有兩種格式如下:第一種格式可以用給定的內(nèi)容表來(lái)替代指定范圍的存儲(chǔ)單元內(nèi)容。命令格式為:

-Eaddress[list]

例如,-Eds:100F5’OK’78

其中F5,’O’,’K’和78各占一個(gè)字節(jié),該命令可以用這五個(gè)字節(jié)來(lái)替代存儲(chǔ)單元DS:0100到0104的原先的內(nèi)容。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)

2.修改存儲(chǔ)單元內(nèi)容的命令E(Enter)

此命令68第二種格式則是采用逐個(gè)單元相繼修改的方法。命令格式為:

-Eadress

例如,-Ees:100

則可能顯示為:

18E4:010089.-

如果需要把該單元的內(nèi)容修改為78,則用戶可以直接鍵入78,再按“空格”鍵可接著顯示下一個(gè)單元的內(nèi)容,如:

18E4:010089.781B.-

這樣,用戶可以不斷修改相繼單元的內(nèi)容,直到用Enter鍵結(jié)束該命令為止。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)第二種格式則是采用逐個(gè)單元相繼修改的方法。命令格式為694.檢查和修改寄存器內(nèi)容的命令R(Register)

它有三種格式如下:

(1)顯示CPU內(nèi)所有寄存器內(nèi)容和標(biāo)志位狀態(tài),其格式為:

-R

例如:

-R

AX=0000BX=0000CX=010ADX=0000SP=FFFEEP=0000SI=0000DI=0000

DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC

18E4:0100C70604023801MOVWORDPTR[0204],0138DS:0204=0138

其中標(biāo)志位狀態(tài)的含義如下:第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)4.檢查和修改寄存器內(nèi)容的命令R(Register)

70表10.1DEBUG中標(biāo)志位的符號(hào)表示標(biāo)志名稱溢出OF方向DF中斷IF符號(hào)SF零ZF輔助進(jìn)位AF奇偶PF進(jìn)位CF置位狀態(tài)OVDNEINGZRACPECY復(fù)位狀態(tài)NVUPDIPLNZNAPONC第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)表10.1DEBUG中標(biāo)志位的符號(hào)表示標(biāo)志名稱溢出方向71(2)顯示和修改某個(gè)寄存器內(nèi)容,其格式為:

-Rregistername

例如,鍵入

-RAX

系統(tǒng)將響應(yīng)如下:

AXFlF4

即AX寄存器的當(dāng)前內(nèi)容為F1F4,如不修改則按Enter鍵,否則,可鍵入欲修改的內(nèi)容,如:

-RBX

BX0369

:059F

則把BX寄存器的內(nèi)容修改為059FH。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)(2)顯示和修改某個(gè)寄存器內(nèi)容,其格式為:

-Rr72(3)顯示和修改標(biāo)志位狀態(tài),命令格式為:

-RF

系統(tǒng)將響應(yīng),如:

OVDNEINGZRACPECY-

此時(shí),如不修改其內(nèi)容可按Enter鍵,否則,可鍵入欲修改的內(nèi)容,如:

OVDNEINGZRACPECY-PONZDINV

可見(jiàn)鍵入的順序可以是任意的,且標(biāo)志間也可不用空格。第10章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)指導(dǎo)(3)顯示和修改標(biāo)志位狀態(tài),命令格式為:

-RF

735.運(yùn)行命令G(Go),其格式為:

-G[=address1][address2[address3...]]

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論