《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程_第1頁
《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程_第2頁
《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程_第3頁
《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程_第4頁
《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設計(第2版)《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第1頁。10.1匯編語言程序設計上機概述10.2匯編程序10.3連接程序10.4調(diào)試工具10.5集成的編程環(huán)境PWB介紹第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第2頁。10.1匯編語言程序設計上機概述10.1.1上機環(huán)境為了對包括Pentium指令在內(nèi)的匯編語言的源程序文件進行匯編,應有一臺Pentium以上的計算機。操作系統(tǒng)使用DOS5.0以上版本或在Windows操作系統(tǒng)命令提示符下進行。編輯程序可用EDIT等。

MASM5.0以上宏匯編系統(tǒng),包括: (1)MASM:匯編程序 (2)LINK:連接程序 (3)CREF:索引程序 (4)LIB:庫管理程序用DEBUG調(diào)試程序時,假定后面的內(nèi)容假定在C盤上建立了MASM子目錄,且上述程序都在該目錄中或建立了相應路徑。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第3頁。10.1.2匯編語言源程序上機操作步驟

從編寫好的匯編語言源程序到計算機可以運行這個程序,中間要經(jīng)歷一些步驟。可以歸納如下:

1.編輯源文件

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

2.匯編源程序文件

由編輯程序所建立的.ASM文件只是一個文本文件,計算機無法直接運行該文件。需要經(jīng)過匯編程序的匯編,使其轉(zhuǎn)換為目標代碼文件。它是通過調(diào)用宏匯編MASM程序完成這一匯編操作的。匯編程序還將對源程序進行語法檢查,如發(fā)現(xiàn)有錯,將給出錯誤原因。程序設計者可根據(jù)它分析和修改源程序,并再經(jīng)過匯編,直到無誤為止,此時得到的是一個目標文件(.OBJ)。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第4頁。3.目標文件

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

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

得到該可執(zhí)行文件后,就可以直接調(diào)用運行該可執(zhí)行文件。如果程序設計正確,則可獲得正確的運行結(jié)果。但對于一個較大的程序,往往會有很多設計上的邏輯錯誤,不可能一次就得到正確的結(jié)果。返回本章首頁第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第5頁。10.2.1匯編程序的類別

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

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

匯編程序的第二次掃描是把匯編指令翻譯成機器碼,它根據(jù)匯編程序中的指令代碼表找到匯編指令助記符對應的機器指令操作碼,再根據(jù)第一次掃描產(chǎn)生的符號表,將指令中的符號操作數(shù)在符號表中查到,并找到其偏移值,從而將每條匯編指令翻譯成機器代碼并寫到目標程序文件中去。在第二次掃描時,還要進行語法檢查,將第一次掃描時未檢查到的語法錯誤查出并顯示。在第二次掃描后除了產(chǎn)生出目標程序文件(.OBJ)外,還可根據(jù)需要產(chǎn)生列表文件(.LST)和交叉索引文件(.CRF)。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第8頁。其中:

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

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

·交叉索引文件——其擴展名為.CRF。交叉索引文件是用來了解源程序中每個符號是在哪里定義的。哪些指令用到了這個符號,給出該指令的行號。交叉索引文件對較大的程序很有用,可以用來幫助查錯。要把交叉索引文件打印出來,必須用CREF程序生成交叉索引列表文件,然后用編輯程序等查看。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第9頁。10.2.3操作過程

首先啟動操作系統(tǒng),假設MASM系統(tǒng)(以MASM5.0為例)已預先裝在硬盤的MASM子目錄中。下面均以C盤上操作為例進行說明。假設事先用編輯程序編輯的源程序為yfile.ASM,則匯編過程如下: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章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第10頁。

宏匯編程序被調(diào)入以后,先顯示版本號。然后依次提出提示,請求用戶回答。

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

第二行提問匯編后目標文件的名字,括號中的名字表示約定的文件名(其文件名部分自動采用源程序文件名),若采用這個名字則直接鍵入回車鍵,否則鍵入另起的名字。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第11頁。

第三行提問是否要建立列表文件。括號中的NUL為“空”的意思,表示不建立列表文件。若要建立列表文件,則需鍵入文件名,名字任選,也可同源程序文件名。但后綴必須為.LST,后綴可由用戶連同文件名一起鍵入,也可不鍵入,即自動采用隱含值。如果不需要建立列表文件,則在第三行提問后直接按回車鍵。

第四行是詢問是否要建立交叉索引文件,括號中的意義同第三行,若不需交叉索引文件,可直接按回車鍵,否則鍵入交叉索引文件名。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第12頁。也可以直接用下面的命令進行匯編:

C:\MASM\MASMMyfile

提示同上。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第13頁。

用EDIT編輯程序觀看列表文件的操作步驟如下:

C:\MASM\EDIT文件名.LST

匯編后,也可查看交叉索引文件,以了解源程序中的符號定義和引用情況。其操作步驟如下:

C:\MASM\CREF Creffilename[.CRF]:交叉索引文件名

Listfilename[filename.REF]:

C:\MASM\EDITfilename.REF

在第一行提示下,打入?yún)R編時在第四行詢問時所鍵入的交叉索引文件名。第二行提示,可直接回車,表示采用括號中的文件名。第三行的EDIT程序就可列出交叉索引的列表文件了。如果在匯編時沒有要求產(chǎn)生交叉索引文件,當然也就無需用CREF產(chǎn)生交叉索引文件了。返回本章首頁第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第14頁。10.3.1連接程序的作用

由匯編程序生成的目標程序文件仍然不能執(zhí)行,必須經(jīng)過連接程序LINK連接以后,才能變成可執(zhí)行文件。因為目標程序文件中有些指令地址還未完全確定,因此仍未成為可以用操作系統(tǒng)裝入的程序形式。再者可能要將幾個目標文件組合成一個功能更強的實用文件,甚至要和某些高級語言的目標程序文件進行組合,這些都要由連接程序LINK來完成。通過連接程序可將若干個目標文件連接成一個地址可浮動的、可由操作系統(tǒng)裝入程序?qū)Φ刂范ㄎ坏目蓤?zhí)行文件。10.3連接程序第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第15頁。

這里要注意的是:連接程序LINK并不僅是為匯編語言程序所專用的。它作為Microsoft的80X86目標連接程序,可將宏匯編或高級語言(例如C、PASCAL等)編譯生成的目標文件連接在一起,成為一個可執(zhí)行程序。并以后綴為.EXE的文件方式存盤。在操作系統(tǒng)命令提示符下,可直接輸入該文件名來執(zhí)行這個程序。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第16頁。10.3.2連接過程

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

LINK連接目標文件有兩種常用的操作方式:

·會話方式

·命令方式

不論在哪種操作方式下,若想停止連接程序的工作,可按CTRL+C鍵來中斷LINK程序的執(zhí)行。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第18頁。1.會話方式

首先在含有LINK程序的軟盤插入軟盤驅(qū)動器中,或預先將其存在硬盤上。在操作系統(tǒng)命令提示符下鍵入LINK,連接程序就被調(diào)入。LINK程序?qū)@示有關(guān)信息并依次給出提示信息請用戶逐行回答。屏幕顯示如下:C:\MASM\LINKMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.ObjectModules[.OBJ]:myfileRunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:Warning:nostacksegment第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第19頁。

第一行提示要求輸入目標模塊名。此時應鍵入你要連接的目標文件名(后綴.OBJ可省略,LINK程序自動加上.OBJ為后綴)。若要連接的是多個目標模塊時,一定要用“+”號或空格將每個文件名分開。如果輸入的名字一行放不下,就在該行的最后輸入一個“+”號,然后按回車鍵,這時連接程序就提示用戶追加目標文件。所有目標文件輸入完后回車。

第二行提示要求輸入將要生成的可執(zhí)行文件的文件名,括號內(nèi)為LINK程序給出的隱含文件名,它與第一行提示中的目標模塊名一樣,只是將后綴換成.EXE。若第一行回答的目標模塊是多個的話,則隱含的可執(zhí)行文件名取為第一個目標文件名。此行可不輸入文件名而直接回車。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第20頁。

第三行提示問是否要建立列表(映象)文件,若要建立,可鍵入列表文件名,這時可不輸入擴展名,由LINK程序自動按隱含值.MAP為擴展名。如果不想要列表文件,此行提示時直接按回車鍵即可。

第四行提示問是否需要連接庫文件。若不需要,則直接按回車鍵。所謂庫文件,是一些經(jīng)常使用的目標文件的集合。它是為了提高效率,為了調(diào)試的方便而建立的。宏匯編語言可以把一些經(jīng)常使用的子程序段單獨匯編。這些單獨匯編和調(diào)試的程序作為外部子程序,將它們以目標文件的形式存儲起來而成為一個文件庫??砂讶舾蓚€目標文件集中起來,組成一個文件庫,由庫管理程序LIB對其進行編輯管理。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第21頁。【例10.1】連接目標模塊ex1.OBJ,ex2.OBJ,ex3.OBJ建立一個名為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章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第22頁。

第一行目標模塊沒輸完,最后鍵入“+”號,則LINK程序。

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

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

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

第五行鍵入回車表示連接過程中不需要用文件庫中的目標模塊。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第23頁?!纠?0.2】連接目標模塊ex1.OBJ,ex2.OBJ程序時用到了A驅(qū)動器上LIB目錄下的庫文件EX.LIB,可執(zhí)行文件名為exa.EXE,建立一個名為aaa.MAP的映象(列表)文件。

操作過程:

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)于庫文件的建立方法見10.3.4節(jié)。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第24頁。2.命令方式

這是用輸入帶有要處理文件名的LINK命令來建立可執(zhí)行文件。命令行的一般格式為:

LINKobjectfiles[,[executablefile][,[mapfile][,[Libraryfile3]]]][options][:]

其中目標文件名,可執(zhí)行文件名,列表文件名,庫文件名同前,options為可控制連接程序操作的參數(shù),詳細內(nèi)容見有關(guān)資料。命令中方括號中的參數(shù)表示可省略。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第25頁。【例10.3】

連接目標模塊ex1.obj,ex2.obj,ex3.obj,建立一個名為ex1.exe的可執(zhí)行文件,目標模塊可能不在一張磁盤上,不要建立列表文件,連接過程中不需要用文件庫中的目標模塊。

操作:

C:\MASM\LINKex1+ex2+ex3/pause,,,

命令中除目標文件名給出外,其余均省略,則意義同前,表示均采用隱含值。也可以用逗號分隔順序輸入每一個參數(shù).如果命令行以分號結(jié)尾,則連接過程中不顯示提示信息,直接執(zhí)行連接。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第26頁。10.3.4子程序庫的建立

前面提到,為了高效率地利用多個目標文件,可將調(diào)試好的程序以目標文件的形式存入子程序庫中,用庫管理程序來管理和調(diào)用。子程序庫的建立和使用由庫管理程序LIB來實現(xiàn)。

庫管理程序的主要功能如下:

(1)建立子程序庫。

(2)對庫文件進行修改,包括增加和刪除模塊。

(3)調(diào)用庫中的目標文件。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第27頁。

對庫的操作是通過啟動LIB程序來實現(xiàn)的。對庫有兩種操作:一種是建立新庫,一種是向已建立的庫里添加或刪除模塊。下面分別介紹。

1.建立新庫:設新庫名為tst.lib,這里擴展名必須為.lib。操作如下:

C:\MASM\LIB

Microsoft(R)LibraryManagerVersion3.07

Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.

Libraryname:tst.1ib

Librarydoesnotexist.Creat?y

Operations:+ex1+ex2

Listfile:tst.lis

例中所給出的EX1、EX2為子程序的目標文件。它們將被存入子程序庫中,成為庫文件,在匯編時供調(diào)用。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第28頁。2.向已存在的庫中添加目標文件:設庫名為TST。操作如下:

C:\MASM\LIB

Microsoft(R)LibraryManagerVersion3.07

Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.

Libraryname:tst.lib

Operations:+aaa

Listfile:tst1.Iis

Outputlibrary:

其中,如果是新建庫,則輸入庫名后將顯示:Librarydoesnotexist.Create?回答Y則表示建立。若回答NO則表示不建立此庫,LIB程序結(jié)束執(zhí)行。如果輸入的庫名是已存在的庫,此行信息不顯示,直接顯示operations。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第29頁。operations參數(shù)表示要求輸入操作字符,以指示進行何種操作。輸入操作符格式是命令字符后跟目標文件名。命令字符有+、-等。其意義為:

+:把其后的文件作為模塊追加到文件庫里。新建庫也可用此命令;.

-:從文件庫中刪除此符號后面的這個模塊,并要對刪除以后的模塊依次進行整理。

上述建庫的第二種操作中,最后一行提示信息“outputlibrary:”是詢問庫中內(nèi)容是否復制到另一個庫中,若是,則回答另一個庫名,否則,直接按回車。通常,直接按回車。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第30頁。

當文件庫建立好了以后,直接返回操作系統(tǒng),這時,可用編輯程序顯示出列表文件。列表文件的內(nèi)容是:建立的文件庫中所收集的符號、標號、變量的名字以及這些名字所屬的模塊名。列表順序是按照庫中模塊的順序列出,每個模塊中的名字又是按照字母順序列出的。

當連接時,如果在匯編程序中調(diào)用了庫文件,則在Libraries[.lib]提示時應回答子程序庫的名字。返回本章首頁第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第31頁。

目前常用的匯編語言調(diào)試工具主要有DEBUG、CodeView及TurboDebuger等,其中DEBUG通過單步、設置斷點等方式為匯編語言程序員提供了非常有效的調(diào)試手段。10.4調(diào)試工具第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第32頁。10.4.1DEBUG程序的調(diào)用

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

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

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

在DEBUG程序調(diào)入后,將出現(xiàn)提示符“-”,此時就可用DEBUG命令來調(diào)試程序。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第33頁。10.4.2DEBUG的主要命令

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

-D[address]或

-D[range]

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

-D100120

18E4:0100726F7220720D6164-696E672064726976rorr.adingdriv

18E4:01107375246669636965-6E74206D656D6F72su.ficientmemor

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

第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第34頁。

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

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

-Eaddress[list]

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

其中F5,’O’,’K’和78各占一個字節(jié),該命令可以用這五個字節(jié)來替代存儲單元DS:0100到0104的原先的內(nèi)容。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第35頁。

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

-Eadress

例如,-Ees:100

則可能顯示為:

18E4:010089.-

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

18E4:010089.781B.-

這樣,用戶可以不斷修改相繼單元的內(nèi)容,直到用Enter鍵結(jié)束該命令為止。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第36頁。3.填充命令F(Fill),其格式為:

-Frangelist

例如:-F04BA:01005F5‘XYZ’8D

使04BA:0100~0104單元包含指定的五個字節(jié)的內(nèi)容。如果list中的字節(jié)數(shù)超過指定的范圍,則忽略超過的項;如果list的字節(jié)數(shù)小于指定的范圍,則重復使用list填入,直到填滿指定的所有單元為止。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第37頁。4.檢查和修改寄存器內(nèi)容的命令R(Register)

它有三種格式如下:

(1)顯示CPU內(nèi)所有寄存器內(nèi)容和標志位狀態(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

其中標志位狀態(tài)的含義如下:第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第38頁。表10.1DEBUG中標志位的符號表示標志名稱溢出OF方向DF中斷IF符號SF零ZF輔助進位AF奇偶PF進位CF置位狀態(tài)OVDNEINGZRACPECY復位狀態(tài)NVUPDIPLNZNAPONC第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第39頁。(2)顯示和修改某個寄存器內(nèi)容,其格式為:

-Rregistername

例如,鍵入

-RAX

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

AXFlF4

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

-RBX

BX0369

:059F

則把BX寄存器的內(nèi)容修改為059FH。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第40頁。(3)顯示和修改標志位狀態(tài),命令格式為:

-RF

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

OVDNEINGZRACPECY-

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

OVDNEINGZRACPECY-PONZDINV

可見鍵入的順序可以是任意的,且標志間也可不用空格。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第41頁。5.運行命令G(Go),其格式為:

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

其中,地址1指定了運行的起始地址,如不指定則從當前的CS:IP開始運行。后面的地址均為斷點地址,當指令執(zhí)行到斷點時,就停止執(zhí)行并顯示當前所有寄存器及標志位的內(nèi)容,和下一條將要執(zhí)行的指令。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第42頁。6.跟蹤命令T(Trace),有兩種格式:

(1)逐條指令跟蹤

-T[=adress]

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

(2)多條指令跟蹤

-T[=address][Value]

從指定地址起執(zhí)行n條指令后停下來,n由value指定。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第43頁。7.程序步跟蹤命令P(Programmingstep)

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

-P[=address][Value]第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第44頁。8.匯編命令A(Assemble),其格式為:

-A[address]

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

DEBUG把鍵入的數(shù)字均看成10六進制數(shù),所以如要鍵入10進制數(shù),則其后應加以說明,如100D。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第45頁。9.反匯編命令U(Unassemble),有兩種格式。

(1)從指定地址開始,反匯編32個字節(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

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

第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第46頁。(2)對指定范圍內(nèi)的存儲單元進行反匯編,格式為:

-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

可見這兩種格式是等效的。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第47頁。10.命名命令N(Name),其格式為:

-Nfiespecs[filepecs]

命令把兩個文件標識符格式化在CS:5CH和CS:6CH的兩個文件控制塊中,以便在其后用L或W命令把文件裝入或存盤。filepecs的格式可以是:

[d:][path]filemme[.ext]

例如:

-Nmyprog

-L

-

可把文件myprog裝入存儲器。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第48頁。11.裝入命令L(Load),有兩種功能:

(1)把磁盤上指定扇區(qū)范圍的內(nèi)容裝入到存儲器從指定地址開始的區(qū)域中,其格式為:

-L[address[drivesectorsector]

(2)裝入指定文件,其格式為:

-L[address]

此命令裝入已在CS:5CH中格式化了的文件控制塊所指定的文件。如未指定地址,則裝入到CS:0100H開始的存儲區(qū)中。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第49頁。12.寫命令W(Write),有兩種功能:

(1)把數(shù)據(jù)寫入磁盤的指定扇區(qū)。其格式為:

-Waddressdrivesectorsector

(2)把數(shù)據(jù)寫入指定的文件中。其格式為:

-W[address]

此命令把指定的存儲區(qū)中的數(shù)據(jù)寫入由CS:5CH處的文件控制塊所指定的文件中。如未指定地址則數(shù)據(jù)從CS:0100開始。要寫入文件的字節(jié)數(shù)應先放入BX和CX中。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第50頁。13.比較命令C(Compare)。其格式為:

-Crangeaddress

其功能是比較兩個存貯塊的內(nèi)容

說明:range為比較的第一個存儲塊范圍,address為第二個存儲塊起始地址。具體格式為:

-C第一個存儲塊起始地址L長度第二個存儲塊的起始地址。

或表示為:

-C第一個存儲塊起始地址終止地址第二個存貯塊起始地址。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第51頁。

在比較的范圍內(nèi),如果有不相等的字符,將顯示它們的地址和內(nèi)容。例如比較100H地址和110H地址的16個字符的一致性。先用D命令顯示內(nèi)容,然后再用C命令比較。很容易看出不相同字符和它們的地址。它們緊跟在C命令之后把比較結(jié)果顯示出來。

-D10011f

117C:01000001020304050607-08090A0B0C0D0E0F……………

117C:01100001000304050607-02090A0B0C0D0E0F……………

-C10010f110

117C:01020200117C:0112

117C:01080802117C:0118第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第52頁。

如果在起始地址中未給出段地址,則C命令就把DS作為段地址。

例如:-C100L20200

從DS:100H開始的32個字節(jié)和從DS:200H開始的32個字節(jié)逐字節(jié)比較。如果有不相同字符,則將顯示出來。

14A7:0103010014A7:0203第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第53頁。14.傳送會令M(Move)。其格式為:

-Mrangeaddress

其功能是將range指定的內(nèi)存范圍內(nèi)的內(nèi)容(數(shù)據(jù)塊),傳送到以address為指定開始地址的內(nèi)存單元中去。

說明:傳送期間不會丟失數(shù)據(jù)的情況下,一般可以進行重疊傳送(源區(qū)和目的區(qū)共享一些相同的存貯單元)。源區(qū)中數(shù)據(jù)保持不變,除非源區(qū)和目的區(qū)重疊部分被沖掉。

注:(1)如果range的開始地址只輸入一個偏移量,則M命令認為段寄存器是DS。如果讓range指定結(jié)束地址,則只需輸入一個偏移量。

(2)如果目的區(qū)地址address只輸入一個偏移量,則M命令也認為段寄存器是DS。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第54頁。15.檢索命令S(Search)。其格式為:

-SrangeList

其功能是從range(范圍)中檢索出List(表里)的字符。

說明:用顯示被搜索到的匹配字符的地址來指出所有的匹配字符。

若命令執(zhí)行后,只顯示提示符“-“而無地址,是表示沒有找到任何匹配字符。

若對range起始地址,只輸入一個偏移量,則S命令認為段寄存器是DS。

例:若想從地址范圍CS:100H到CS:110H中檢索41H,可輸入:

SCS:10011041

如果找到了兩個匹配字符,則響應可能是:

04BA:0104

04BA:010D第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第55頁。

如果想在上例相同的地址范圍內(nèi)搜索與4個字節(jié)長list相匹配的字符串,可輸入:

SCS:10011041“AB”F

若找到,則把所有相匹配字符和字符串的地址都列出來。若未找到,則不顯示任何地址信息。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第56頁。16.十六進制算術(shù)運算命令H(Hexarithmetic)。其格式為:

-Hvaluevalue

其功能是先將兩個十六進制數(shù)相加,然后再求其差(第一個數(shù)減第二個數(shù)),并在同一行中顯示結(jié)果。例如:-H0F8 1707

即000FH與0008H的和為17H,差為07H。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第57頁。17.輸入命令I(lǐng)(Input)。其格式為:

-Iportaddress(portaddress為端口號)其功能是從指定的端口輸入一個字節(jié)并顯示出來。例如:-I2F8FF

它表示從02F8H端口讀出的內(nèi)容值為0FFH。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第58頁。18.輸出命令O(Output)。其格式為:

-Oportaddressbyte(portaddress為端口號)其功能是向指定的端口輸出一個字節(jié)。例如:-O2F9B7

它表示將字節(jié)值0B7H輸出到端口2F9H中。19.退出DEBUG命令Q(Quit),其格式為:

-Q

它退出DEBUG,返回操作系統(tǒng)。本命令并無存盤功能,如需存盤應先使用W命令。返回本章首頁第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第59頁。10.5集成的編程環(huán)境PWB介紹MASM6.11提供了一個集成的編程環(huán)境PWB(Programmer’sWorkBench),程序員可直接在此環(huán)境下編輯源程序,并匯編、連接和運行程序。PWB具有以下特點:(1)在匯編源程序時,如果有錯誤,系統(tǒng)將列舉出所有出錯位置和出錯原因。還可以用Shift+F3和Shift+F4來定位前一個錯誤和后一個錯誤。(2)在連接時,可指定堆棧的大小、附加的庫文件、符號跟蹤等。(3)在運行時,可設置命令行參數(shù)、直接運行、按調(diào)試方式運行、用操作系統(tǒng)命令來運行等。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第60頁。

10.5.1PWB的啟動假如PWB安裝于E:\MASM611\BINR子目錄下,可用下面的命令查看PWB的啟動方式。E:\MASM611\BINR\PWB/?

Microsoft(R)Programmer’sWorkBenchVersion2.1.49Copyright(C)MicrosoftCorp1992.Allrightreserved.Usage:PWB[<options>][<files>] [<options>][/D[S|T∣A]…]DisableCURRENT.STS,TOOLS.INI,Autoload[/P{P∣F}<file>] SetPWBorForeignProgramList[/PL] SetLastProgramList[/E<cmd-string>] Executecommands[/M<mark>] Startatmark[/R] Read-onlymode[<files>][[/T]<file>] (Temporary)filetoopen

第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過程全文共71頁,當前為第61頁。通常在啟動PWB時,可在其后面加上將要編輯的文件名。假如要編輯源文件W1.ASM,可直接輸入以下命令:

E:\MASM611\BINR\PWBW1.ASM則結(jié)果如圖10-1所示。第10章匯編語言程序設計上機指導《匯編語言程序設計(第2版)》第十章-匯編語言程序設計上機過

溫馨提示

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

最新文檔

評論

0/150

提交評論