工程學(xué)院匯編語言程序設(shè)計實驗教程_第1頁
工程學(xué)院匯編語言程序設(shè)計實驗教程_第2頁
工程學(xué)院匯編語言程序設(shè)計實驗教程_第3頁
工程學(xué)院匯編語言程序設(shè)計實驗教程_第4頁
工程學(xué)院匯編語言程序設(shè)計實驗教程_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言實驗教程一、常用DOS命令 1. 進入虛擬DOS選中開始菜單中的“運行”命令,輸入cmd 后按確定,可以進入虛擬DOS環(huán)境。如圖所示:打開窗口后,可以在屬性中修改字體大小、顏色和窗口大小。并且可以用組合鍵ALT+ENTER進行窗口最大化。2. 常用DOS命令(1)查看目錄命令DIR C:>dir C:>dir/w(2)顯示文件內(nèi)容命令TYPE C:>type test.asm(3)文件拷貝命令COPY C:>copy sa.asm sd.asm 將文件sa.asm拷貝為sd.asm(4)改變盤符命令 C:>e: 結(jié)果為:E:>(5)進入下一

2、級目錄 C:>cd 子目錄名 例如:C:>cd masm5 得:C:masm5>(6)改變目錄 例如:C:>cd windowstemp 得:C:>windowstemp>(7)退到上級目錄 例如:C:>masm5>abc>cd. 得:C:>masm5(8)退到根目錄 例如:C:>masm5>cd 得:C:>(9)清屏 例如:C:>cls3. DOS下常用快捷健(1)清除當(dāng)前命令行:ESC(2)輸入上次輸入的命令:F5(3)顯示曾經(jīng)輸入的所有命令供選擇并執(zhí)行:F7(4)搜索命令的歷史記錄,循環(huán)顯示所有曾經(jīng)輸入的

3、命令,直到按下回車鍵為止:F8【技巧1】虛擬DOS下復(fù)制粘貼方法在窗口上點擊鼠標(biāo)右鍵,選擇“標(biāo)記”后可以用鼠標(biāo)選擇需要復(fù)制的字符,點一下右鍵,然后在光標(biāo)處點右鍵選“粘貼”即可。【技巧2】虛擬DOS窗口增加滾動條在虛擬DOS窗口中選屬性->布局-> 屏幕緩沖區(qū)大小->將“高度”改為80以上。二、程序的編輯、編譯和鏈接下面我們完整的完成一個實驗,實驗要求為在計算機屏幕上顯示一個字符串“HELLO!”,具體步驟如下。1. 調(diào)用文本編輯軟件建立源程序.ASM文件。利用Windows2000操作系統(tǒng)附件中的“記事本”編輯以下源程序。命名為:Test1.ASM,該程序的功能是在

4、計算機屏幕上顯示一個字符串“HELLO!”。DATASEGMENTS1DBHELLO!,$DATAENDSSTACKSEGMENTPARA STACKDB 64 DUP(?)STACKENDSCODE SEGMENTMAIN PROC FARASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSH DS MOV AX,0 PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AH,09HMOV DX,OFFSET S1INT 21HRETMAIN ENDPCODE ENDS END START2. 調(diào)用匯編程序MASM對

5、源程序匯編產(chǎn)生.OBJ文件。在C:提示符下鍵入MASM Test1.ASM(回車)執(zhí)行上述操作命令之后將在屏幕上顯示如下信息:Microsoft(R) Macro Assembler Version 5.00Copyright(C) Mirosoft Corp 1981-1985,1987.All rights reservedObject filenameTest1.OBJ:(回車)Source listingNUL.LST:(回車)Cross referenceNUL.CRF:(回車)50678 + 410090 Bytes symbol space free0 warning Error

6、s0 Severe Errors在匯編過程中,匯編程序一般采用兩遍掃描的方法,第一遍掃描源程序產(chǎn)生符號表、處理偽指令等,第二遍掃描產(chǎn)生機器指令代碼、確定數(shù)據(jù)等。在匯編過程中還會產(chǎn)生列表文件和交叉引用文件。列表文件的后綴為.LST,主要用于給出源程序和機器代碼程序的清單,以供檢查程序使用。交叉引用文件的后綴為.CRF,它是一個為源程序所引用的各種符號進行前后對照的文件,主要用于給出不同程序段中互相引用的全部符號列表。這兩個文件是可有可無的,如果不需要生成這兩個文件,可以在匯編過程中直接按回車跳過。列表文件有兩部分內(nèi)容。在第一部分源程序中,最左列是數(shù)據(jù)或指令在該段從0開始的相對偏移地址,向右依次是

7、指令的機器代碼字節(jié)個數(shù)、機器代碼和匯編語言語 句。機器代碼后有字母"R"表示該指令的立即數(shù)/位移量現(xiàn)在不能確定或是只是相對地址,它將在程序連接或進入主存時才能定位。帶有“*”的處理器指令是由 前面一條偽指令產(chǎn)生的,采用/Sg選項時的列表文件才羅列。如果陳序中有錯誤(ERROR)或警告(WARMING),也會會在相應(yīng)位置提示。列表文件的第二部分是標(biāo)示符使用情況。對段名和組名給出他們的名字(NAME)、尺寸(Size)、長度(Length)、定位(Align)、組合 (Combine)和類別(Class)屬性;對符號給出他們的名字、類型(Type)、數(shù)值(Value)和屬性(A

8、ttr)。采用簡化段定義格式,有 許多匯編系統(tǒng)的預(yù)定義標(biāo)示符,例如DATA等。【小技巧】輸入“MASM test1; ”(后面加個分號)可以省去中間文件生成的3次提示而直接生成.obj文件3. 調(diào)用鏈接程序LINK對目標(biāo)文件進行鏈接產(chǎn)生可執(zhí)行文件。在C:提示符下鍵入LINK Test1(回車)執(zhí)行上述命令后將在屏幕上顯示如下信息:Microsoft(R) Overlay Linker Version 3.6Copyright(C) Mirosoft Corp 1983-1987.All rights reserved Run FileTest1.EXE List FileNUL.MAP: Li

9、braries.LIB:在匯編過程中形成了目標(biāo)文件(.OBJ),但是在該文件中,只是將源程序的操作碼部分變成了機器碼,而地址操作數(shù)還是可浮動的相對地址,不是實際地址,浮動地址需要再定位。只有經(jīng)過鏈接過程才能形成最后的可執(zhí)行文件。鏈接程序的功能就是把一個或多個目標(biāo)文件合并成一個可執(zhí)行文件,其后綴為.EXE。其實在鏈接過程中一共形成兩個文件:第一個是可執(zhí)行文件(.EXE)。默認的可執(zhí)行文件名字與源程序文件相同,也可以根據(jù)用戶要求進行修改可執(zhí)行文件的名字。鏈接過程中形成的第二個文件是內(nèi)存映像文件(.MAP),它給出了每個段的地址分配情況和長度。如果不需要該文件則可以在鏈接命令執(zhí)行時直接鍵入回車鍵。在

10、鏈接過程中還與一個庫文件(.LIB文件)相關(guān)。一般的匯編程序不需要庫文件。但是當(dāng)匯編語言與高級語言(如C語言)接口時需要用到庫文件。此時輸入相應(yīng)的庫文件名字即可。映像文件也是一種文本文件,含有每段在存儲器中的分配情況。映像文件中首先給出了該程序各個邏輯段的起點(Start)、終點(sTOP)、長度(Length)、段名(Name)和類別(Class);然后是段 組(GROUP)位置和組名;最后提示程序開始執(zhí)行的邏輯地址。注意,這里的起點、終點和段地址是以該程序文件開頭而言的相對地址,實際的絕對地址需要在程序進入主存后確定。【小技巧】輸入“LINK test1; ”(后面加個分號)可以省去中間文

11、件生成的2次提示而直接生成可執(zhí)行文件4. 運行可執(zhí)行文件。在C:提示符下鍵入Test1(回車),在屏幕上將顯示出“1”這個數(shù)字。三、調(diào)試工具DEBUG介紹 1.調(diào)試程序DEBUG的特點 如果匯編語言的源程序中存在一些語法或格式上的錯誤,在匯編和鏈接過程中都可以發(fā)現(xiàn)并得到糾正。但是如果在源程序中存在著算法錯誤和邏輯錯誤,那就只有在調(diào)試過程中才能發(fā)現(xiàn)并糾正了。常用的調(diào)試工具軟件是DEBUG。DEBUG提供了修改寄存器、內(nèi)存單元內(nèi)容的命令,可以很方便的修改寄存器、內(nèi)存單元的內(nèi)容,為調(diào)試程序、修改程序帶來了方便。在DEBUG狀態(tài)下,還為用戶提供了調(diào)試、控制測試的環(huán)境。用戶可以在此環(huán)境下進行編輯、調(diào)試、

12、執(zhí)行一些簡單的匯編程序。由于DEBUG有顯示命令。通過顯示命令,用戶可以觀察某個內(nèi)存單元的內(nèi)容、CPU內(nèi)部某個寄存器的內(nèi)容。并可以根據(jù)這些內(nèi)容的變化情況分析、調(diào)試程序。調(diào)試程序debug具有如下功能特點:1. 裝入,顯示或修改任何文件(帶任何擴展名的文件);2. 執(zhí)行DOS程序;3. 測試和調(diào)試程序4. 完成磁盤實際讀/寫操作;5. 建立、匯編匯編語言源程序或反匯編可執(zhí)行文件。2. DEBUG的命令格式DEBUG.EXE是DOS提供的可用于調(diào)試可執(zhí)行程序的一個工具軟件,也是可用于匯編語言程序設(shè)計的一種調(diào)試工具。調(diào)試程序DEBUG.EXE是版本有關(guān)的,不同版本的操作系統(tǒng)具有不同的文件(功能一樣)

13、。純DOS操作系統(tǒng),DEBUG.EXE在DOS目錄下;Windows 9x操作系統(tǒng),使用Windows文件夾下command子文件夾的DEBUG.EXE文件;Windows 2000/XP操作系統(tǒng),使用WINNT文件夾下system32子文件夾的DEBUG.EXE文件。需要說明的是,windows操作系統(tǒng)中要使用debug.exe進行程序調(diào)試,必須進入到虛擬DOS中,具體方法是在運行對話框中輸入“cmd”后回車即可。然后,在DOS的提示符下,可鍵入如下命令啟動Debug調(diào)試程序: DEBUG drive:pathfilename.exeparameters命令中各字段含義如

14、下:Drive:DEBUG將要調(diào)試的文件所在的磁盤驅(qū)動器。 Path:查找DEBUG將要調(diào)試的文件所需的子目錄路徑,若未指定,DOS使用當(dāng)前目錄。 filename.exe:DEBUG將要調(diào)試的文件名。如果用戶鍵入文件名,則啟動DEBUG的同時還將指定的文件裝入存儲器中,用戶可對其進行調(diào)試,如果未鍵入文件名,則用戶可用當(dāng)前存儲器的內(nèi)容工作,或者用DEBUG命令N和L將需要的文件裝入存儲器后再進行調(diào)試。 parameters :運行被調(diào)試的程序(或文件)時所需的命令行參數(shù)。 在DEBUG程序調(diào)入后,將出現(xiàn)提示符“-”,此時就可用DEGUG命令來調(diào)試程序。說明:· (1) 運行

15、Debug程序時,如果不帶被調(diào)試程序,則所有段寄存器值相等,都指向當(dāng)前可用的主存段,即DEBUG程序后的第一個段;除SP之外的通用寄存器都設(shè)置為0,而SP指示當(dāng)前堆棧頂在這個段的尾部或COMMAND.COM暫駐部分的結(jié)束地址(其中較小的那個地址);指令指針寄存器IP置為0100H(程序段前綴PSP后的第一個語句);狀態(tài)標(biāo)志都是清0狀態(tài)。 · (2) 運行Debug程序時,如果載入的被調(diào)試程序擴展名不是.EXE(如debug hello.asm),則BX、CX包含被調(diào)試文件大小的字節(jié)數(shù)(BX為高16位),其他同不帶被調(diào)試程序的情況。 (3) 運行Debug程序時,如果帶入的被調(diào)試程序擴

16、展名是.EXE,則需要重新定位。此時,CS : IP和SS : SP根據(jù)被調(diào)試程序確定,分別指向代碼段和堆棧段。DS=ES指向當(dāng)前可用的主存段(即PSP段基址),BX、CX包含被調(diào)試文件大小的字節(jié)數(shù)(BX為高16位),其他通用寄存器為0,狀態(tài)標(biāo)志都是清0狀態(tài)。3. DEBUG的主要命令Debug 的每個命令都是一個字母,后面跟一個或多個參數(shù),所需注意事項如下:* 字母不區(qū)分大小寫* 命令中各項之間以空格或逗號分隔* 命令中只能使用16進制數(shù),且要求不帶后綴H* 可用組合鍵Ctrl-C 或Ctrl-Break終止命令的執(zhí)行* 可用F1、F2、F3、Ins、

17、Del、左移鍵、右移鍵等編輯鍵來編輯本行命令* 若命令有語法錯誤,會提示“Error”,并用“”符號指出錯誤位置Debug的主要命令及含義如下表所示:命令格式功能說明A地址輸入?yún)R編指令C范圍 起始地址對由“范圍”指定的區(qū)域與“起始地址”指定的同大小區(qū)域進行比較,顯示不相同的單元D范圍顯示指定范圍內(nèi)的內(nèi)存單元內(nèi)容E地址 字節(jié)值表用值表中的值替換從“地址”開始的內(nèi)存單元內(nèi)容F范圍 字節(jié)值表用指定的字節(jié)值表來填充內(nèi)存區(qū)域G=起始地址 斷點地址從起點(或當(dāng)前地點)開始執(zhí)行,到終點結(jié)束H數(shù)值1 數(shù)值2顯示二個十六進制數(shù)值之和、差I(lǐng)端口地址從端口輸入L地址 驅(qū)動器號 扇區(qū) 扇區(qū)數(shù)從磁盤讀M范圍 地址把“范

18、圍”內(nèi)的字節(jié)值傳送到從“地址”開始的單元N文件標(biāo)識符 文件標(biāo)識符指定文件名,為讀/寫文件做準(zhǔn)備O端口地址 字節(jié)值向端口輸出P=地址 指令數(shù)按執(zhí)行過程,但不進入子程序調(diào)用或軟中斷Q退出DEBUG,不保存正在調(diào)試的文件R寄存器名顯示和修改寄存器內(nèi)容S范圍 字節(jié)值表在內(nèi)存區(qū)域內(nèi)搜索指定的字節(jié)值表。如果找到,顯示起始地址,否則,什么也不顯示T=地址 指令數(shù)跟蹤執(zhí)行,從起點(或當(dāng)前地點)執(zhí)行若干條指令U范圍反匯編,顯示機器碼所對應(yīng)的匯編指令W地址 驅(qū)動器號 扇區(qū) 扇區(qū)數(shù)向磁盤寫內(nèi)容,(BX、CX)為寫入字節(jié)數(shù)說明:* 地址:用“段值:偏移量”的形式來表示地址,也可用段寄存器來代表“段值”例如:1000:

19、0001,ds:1001,es:0200,cs:0030等* 范圍:表示地址范圍從哪個地址開始到哪個地址結(jié)束。它有二種表示方式:(1)地址 地址前者表示起始地址,用“段值:偏移量”來表示;后者表示終止地址,只用“偏移量”來表示(2)地址 長度前者表示起始地址,用“段值:偏移量”來表示;后者表示該區(qū)域的大小,用字母L開頭的數(shù)值來表示例如:100:50 100段值為100,偏移量從50到100的內(nèi)存區(qū)域,100:50 L100段值為100,偏移量從50開始的100個字節(jié)區(qū)域。* 端口地址:二位十六進制數(shù)值* 字節(jié)值:二位十六進制數(shù)值* 字節(jié)值表:由若干個字節(jié)值組成,也可以是用引號括起來的字符串*

20、驅(qū)動器號:0驅(qū)動器A、1驅(qū)動器B、2驅(qū)動器C、3驅(qū)動器D等(1)A(匯編命令)  格式:A地址  用途:該命令允許鍵入?yún)R編語言語句,并能把它們匯編成機器代碼,相繼的存放在內(nèi)存從指定位置(缺省為IP指針位置)開始的存儲區(qū)中。  注意:      * 所有數(shù)值默認皆為十六進制整數(shù),數(shù)值后不帶“H”。 如要鍵入十進制數(shù),則其后應(yīng)加以說明,如100D。      * 不支持文件管理用的目錄表、宏標(biāo)記、條件匯編      * 跳轉(zhuǎn)指令后要直接書寫十六進制地址不支持標(biāo)號  &#

21、160;   * 數(shù)據(jù)類型若非默認類型,要以PTR加以指定      * 字符串操作要指定類型為B或W(如lodsb和lodsw等)及長度      * 用DB和DW接受數(shù)據(jù)定義,直按進行匯編      * 對內(nèi)存地址加以與立即數(shù)區(qū)分 * 如果不指定地址,a命令將在它上次停止處開始匯編 * 段超越指令需要在相應(yīng)指令前,單獨一行輸入 舉例: -A 1397:0100 MOV CX,5 1397:0103 MOV AL,0 1397:0105 MOV SI,0010 1397:0108 ES: 13

22、97:0109 ADD AL,SI 1397:010B INC SI 1397:010C LOOP 0108(2)C(比較命令)格式:C 范圍 起始地址  用途:比較內(nèi)存的兩個區(qū)域相對應(yīng)字節(jié)的內(nèi)容是否相同,對發(fā)現(xiàn)有差別的內(nèi)容及其地址用如下形式顯示出(地址A為第一個區(qū)域某單元地址,地址B為第二個區(qū)域中與地址A相對應(yīng)的存儲單元的地址):           地址A   地址A中值  地址B中值  地址B說明:參數(shù)range指定要比較的內(nèi)存第一個區(qū)域的起始和結(jié)束地址,或起

23、始地址和長度;參數(shù)address指定要比較的第二個內(nèi)存區(qū)域的起始地址;若地址范圍或地址不含段地址,默認為DS的值。舉例:-C 100,109 200該命令對 100h 到 109h 的內(nèi)存數(shù)據(jù)塊與 200h 到 209h 的內(nèi)存數(shù)據(jù)塊進行比較。  Debug響應(yīng)前面的命令并顯示如下信息(假定此時 DS = 1397):   1397:0100 35 6E 1397:0300   1397

24、:0102 7D 1C 1397:0302   1397:0106 12 89 1397:0306   1397:0109 58 A4 1397:0309   內(nèi)容不相等的存儲單元的地址和內(nèi)容會在列表中顯示出來,對應(yīng)內(nèi)容相等則不會顯示(3)D(顯示內(nèi)存命令)格式:D地址范圍用途:內(nèi)存內(nèi)容顯示指令,以十六進制和ASCII碼形式顯示指定范圍內(nèi)的內(nèi)存內(nèi)容。說明:地址范圍指定要顯示其內(nèi)容的內(nèi)存區(qū)域的起始和結(jié)束地址,或起始地址和長度。若不指定范圍,第一次從

25、目標(biāo)程序的CS:IP位置開始顯示,以后從上次顯示的末地址的下一地址開始進行顯示。若不指定長度,則顯示128字節(jié)共8行的內(nèi)容。 舉例:-D 0000 001F   Debug 按以下格式顯示范圍中的內(nèi)容:  1401:0000 48 45 4C 4C 4F 21 24 00-00 00 00 00 00 00 00 00 HELLO!$ .  1401:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 . .當(dāng)使用 D 命令時,Debug&#

26、160;以兩個部分顯示內(nèi)存內(nèi)容:左邊用十六進制表示每個字節(jié); 右邊用ASCII字符表示每個字節(jié)。每個非打印字符在顯示的 ASCII 部分用“.”表示。每個顯示行顯示 16 字節(jié)的內(nèi)容,其中在第8字節(jié)和第9字節(jié)之間有一個連字符。每個顯示行從 16 字節(jié)的邊界上開始。另外,這里沒有指定段地址,D命令會自動顯示DS段的內(nèi)容。如果只指定首地址,則顯示從首地址開始的80個字節(jié)的內(nèi)容。(4)E(輸入/修改內(nèi)存命令)格式:E  地址  字節(jié)值表 E  地址用途:向內(nèi)存區(qū)域輸入數(shù)據(jù),覆蓋掉原有數(shù)據(jù)。說明: *“地址”表示

27、數(shù)據(jù)輸入的內(nèi)存始地址,“字節(jié)值表”表示一組連續(xù)的字節(jié)數(shù)據(jù)。* 第一種格式可以用給定的字節(jié)值表的內(nèi)容來替代指定范圍的存儲單元內(nèi)容;第二種格式則是采用逐個單元相繼修改的方法來達到輸入或修改內(nèi)存的目的。* 數(shù)據(jù)以十六進制形式或以ASCII碼形式輸入均可。    * 十六進制數(shù)要用空格、逗號或制表符加以分隔。字符串則要用單引號或雙引號括起且區(qū)分大小寫。    * 若不指寫段址,則默認為DS中值。每寫完一數(shù)據(jù)地址自動增加。    * 如省略字節(jié)值表,將對各單元逐個修改。點號前為該字節(jié)原始值,點號后輸入改后值。這時若按空格,跳過這一字節(jié);按回車,

28、 結(jié)束輸入;按減號或連字符,顯示前一字節(jié)內(nèi)容。     * 字符串只能以數(shù)值列表的形式輸入,不能按地址形式輸入。舉例:-E  DS:100   F3'XYZ'8D其中F3,X,Y,Z和8D各占一個字節(jié),該命令可以用這五個字節(jié)來替代存儲單元DS:0100到0104的原先的容。-E  CS:100則可能顯示為:1397:0100   89. -如果需要把該單元的內(nèi)容修改為78,則可以直接鍵入78,再按空格鍵可接著顯示下一個單元的內(nèi)容,這樣可以不斷修改相繼單元的內(nèi)容,直到Enter鍵結(jié)束該命令為

29、止。(5)F(填充內(nèi)存命令)格式:F 地址范圍數(shù)值列表用途:將數(shù)值列表中的數(shù)據(jù)寫入內(nèi)存,并覆蓋原有信息。若出錯,顯示出錯信息,原有信息保留。說明:* 輸入數(shù)據(jù)以十六進制或字符串兩種形式,字符串必須以單引號或雙引號括起,區(qū)分大小寫。* 若未指寫段址,默認為DS寄存器值。* 若要填充區(qū)域大于數(shù)據(jù)數(shù)目,列表可重復(fù)使用;相反,若列表比要填充區(qū)域大時,則自動截斷后面的數(shù)據(jù)。* 地址范圍為數(shù)據(jù)輸入的內(nèi)存始本地址或首地址和長度舉例:-F 04BA:100 L100 47 4F 4F 44命令執(zhí)行后,Debug 重復(fù)使用值47 4F 4F 44填充從 04BA:100 到 04BA:1FF 的內(nèi)存位置,直到所

30、有100H個字節(jié)全部填滿為止。(6)G(執(zhí)行程序命令)格式:G=地址斷點0斷點9用途:將CPU控制權(quán)由Debug轉(zhuǎn)移給被調(diào)試中的程序,即運行當(dāng)前在內(nèi)存中的程序說明:    * 地址:Debug開始執(zhí)行的地址。如未指定段址,則使用目標(biāo)程序的CS寄存器中的值。當(dāng)?shù)刂肥÷詴r,則Debug使用目標(biāo)程序的CS:IP寄存器的值開始執(zhí)行。且為與斷點區(qū)分,地址參數(shù)前必須加等號,否則將其認為是第零個斷點。* 斷點0斷點9:指定的010個臨時中斷點。程序在斷點處中止時,將會顯示寄存器的內(nèi)容、標(biāo)志位狀態(tài)及CS:IP指出的指令(也就是下一條將要執(zhí)行的指令),然后是提示符“-”。 (7)H

31、(十六進制運算命令)格式:H 值1 值2用途:用來求兩個十六進制數(shù)的和、差,對結(jié)果顯示為值1+值2及值1-值2。如果值2 >值1則顯示其補碼。說明:    * 值1、2為0FFFFH范圍內(nèi)的任意十六進制數(shù)。舉例:H 19F 10A Debug 執(zhí)行后顯示結(jié)果為: 02A9 0095 (8)I(端口輸入命令)格式:I 端口地址用途:用來讀取指定I/O端口地址,并以2位十六進制數(shù)加以顯示。說明:* 端口地址:0FFFF范圍內(nèi)的I/O端口地址。* 警告:I指令將直接訪問計算機硬件,不是所以錯誤檢查都能進行,所以使用是必須小心。對某個外設(shè)控制器分配端口的輸入操作,可能干涉系統(tǒng)

32、固有的操作。(9)O(端口輸出命令)格式:O 端口  字節(jié)   用途:向I/O端口地址寫入一字節(jié)。說明:* 端口:I/O端口地址。        * 字節(jié):寫入I/O端口的0FFFF范圍的值。  * 警告:錯誤的操作將導(dǎo)致系統(tǒng)崩潰。(10)L(加載命令)  格式:L 地址        或        L 地址 驅(qū)動器 開始扇區(qū) 扇區(qū)數(shù)用途:將某個文件或特定磁盤扇區(qū)的內(nèi)容加載到內(nèi)存。說明:    

33、0;   * 地址:存放從盤中讀出數(shù)據(jù)的內(nèi)存地址。* 驅(qū)動器:A=0, B=1, C=2, 以此類推。* 開始扇區(qū):以十六進制數(shù)表示要最先裝入的邏輯扇區(qū)號。* 扇區(qū)數(shù):以十六進制數(shù)表示要裝入連續(xù)扇區(qū)個數(shù)。* 裝入后文件長度,或.exe文件程序的實際長度放入目標(biāo)程序的BX和CX兩個寄存器中。高十六位放在BX中。 舉例:假定需要從驅(qū)動器 C 將起始邏輯扇區(qū)為 15 (0Fh) 的 109 (6Dh) 個扇區(qū)的內(nèi)容加載到起始地址為 04BA:0100 的內(nèi)存中,可以鍵入以下命令: -L 04BA:100 2 0f 6d (11)M(內(nèi)存塊移動命令)格式:M 地址范圍 地址用途:對

34、內(nèi)存中數(shù)據(jù)進行復(fù)制。目的域被覆蓋。說明:        * 地址范圍:被復(fù)制域的始末地址,或始地址和長度。        * 地址:數(shù)據(jù)復(fù)制目的域的起始地址。       * 若地址范圍中無段址,則使用DS內(nèi)容;若地址中無段址,使用地 址范圍中的值。 舉例:-M CS:100 110 CS:500 Debug 首先將 CS:110 地址中的內(nèi)容復(fù)制到地址 CS:510 中,然后將 CS:10F 地址中的內(nèi)容復(fù)制到 CS:50F 中,如此操作直至將 CS:100 地址

35、中的內(nèi)容復(fù)制到地址 CS:500 中。(12)N(命名命令)格式:N 驅(qū)動器 路徑 文件名N 參數(shù) 參數(shù)用途:* 指定后面的 l(加載)或 w(寫入)命令所使用的文件。* 指定被調(diào)試文件的命令行參數(shù)和開關(guān)舉例:-D EBUG PROG.COM -N PARAM1 PARAM2 -G g命令會運行程序,就好像在命令提示符后鍵入了命令: PROG PARAM1 PARAM2(13)P(循環(huán)或子程序處理命令)格式:P =地址 命令數(shù)用途:該程序不間斷運行,直到循環(huán)、重復(fù)字符串指令、軟件中斷或者完成了指定地址的子例程為止,或者直到執(zhí)行了指定數(shù)量的機器指令為止,并控制返回到 Debug。說明: * 地址

36、:執(zhí)行的起始地址。  * 指令數(shù):執(zhí)行的指令條數(shù)。* 執(zhí)行中會顯示目標(biāo)程序寄存器內(nèi)容、標(biāo)志位狀態(tài)和下一條要執(zhí)行的指令。    * 若地址參數(shù)中無段地址,則使用CS中的值。完全忽略地址時,則從程序中的CS:IP指定位置開始執(zhí)行。 舉例:假定正在測試的程序在地址 CS:143F 處包含一個 call 指令。要運行 call 目標(biāo)位置的子程序然后將控制返回到 Debug可以鍵入以下命令: P=143F(14)Q(Debug退出命令)格式:Q用途:程序結(jié)束返回,即退出DEBUG,返回DOS。本命令無存盤功能,如需存盤應(yīng)先使用W命令(15)R(寄存器查看和修改命令)格式:R

37、 寄存器用途:顯示或改變一個或多個 CPU 寄存器的內(nèi)容說明: * 寄存器:AX BX CX DX SP BP SI DI DS ES CS IP PC F  * 若R不帶參數(shù),則顯示所有寄存器的內(nèi)容和狀態(tài)標(biāo)志、下一條指令。        * 若指定新值,在顯示內(nèi)容后,給出冒句提示輸入新值,回車結(jié)束。        * 對狀態(tài)字F,在連字符“-”后以空格間隔輸入新值,次序不計。        * 若直接回車,則跳過修改,寄存器內(nèi)容不變。(16)S(內(nèi)存檢索

38、命令)格式:S 地址范圍  列表用途:在指定的內(nèi)存范圍內(nèi)檢索列表的值。對每一個匹配的地址進行顯示。說明:* 地址范圍:想來你該明白是什么樣了吧:)    * 列表:欲檢索的一個以上的字節(jié)值或字符串。* 若起地址中無段址,默認為DS的值。* 檢索范圍不得大于FFFFH* 列表必須以分隔符(空格,逗號,制表符等)分隔;字符串要加單引號或雙引號括起,區(qū)分大小寫。 舉例:查找包含值 41 并且范圍從 CS:100 到 CS:110 的所有地址,可用以下指令實現(xiàn):-S CS:100 110 41 Debug會按以下格式顯示結(jié)果: 04BA:0104 04BA:010D 以下

39、命令在 CS:100 到 CS:1A0 的范圍內(nèi)搜索字符串“Ph”。 SCS:100 1A0 "PH" (17)T(單步跟蹤命令)格式:T =地址指令數(shù)用途:執(zhí)行單條指令,顯示寄存器的值及下一條指令。說明:* 地址:執(zhí)行的第一條指令的地址。* 指令數(shù):執(zhí)行的機器指令的條數(shù)。* 在地址參數(shù)中若無段址,則默認為CS寄存器的值。若全部省略,則由CS:IP寄存器指出的地址開始執(zhí)行,以后則順序執(zhí)行。* 對ROM內(nèi)的跟蹤應(yīng)使用T命令。* 警告:對8259 中斷屏幕的內(nèi)容(IBM PC及兼容機端口20H和21H)的更 改,或者系統(tǒng)功能調(diào)用(INT 21H),不能使用T指令,對上述情況要使

40、用P指令。 (18)U(反匯編命令)格式:U 地址范圍用途:反匯編字節(jié)并顯示相應(yīng)的原語句,其中包括地址和字節(jié)值。說明:* 地址范圍中無段址時,默認使用CS值。* 當(dāng)始地址與實際邊界不一致時,結(jié)果將不可信。* 若不含末地址或長度,則自給定始地址起反匯編32個字節(jié)。* 以后由前次U最后一指令的下一指令做32字節(jié)的反匯編。* 若從沒用過U,則于CS:IP開始進行反匯編。* 只能對8086指令解碼,對其它以DB來顯示。 舉例:要反匯編 16 (10h) 字節(jié),從地址 04BA:0100 開始,可以鍵入以下命令: -U 0B6D:100L10 Debug 按以下格式顯示結(jié)果: 0B6D:0100 26

41、ES:0B6D:0101 894502 MOV DI+02,AX0B6D:0104 58 POP AX0B6D:0105 3C01 CMP AL,010B6D:0107 750A JNZ 01130B6D:0109 26 ES:0B6D:010A 895504 MOV DI+04,DX0B6D:010D 26 ES:0B6D:010E 894D06 MOV DI+06,CX(19)W(寫磁盤命令)格式: W 地址      或       W 地址 驅(qū)動器 開始扇區(qū) 扇區(qū)數(shù) 用途:將內(nèi)存中的文件寫入到磁盤。說明:* 地址:待

42、寫入盤的數(shù)據(jù)在內(nèi)存中的起始位置。* 驅(qū)動器:寫入數(shù)據(jù)的盤的驅(qū)動器號(A=0,B=1,C=2,以下類推)。* 開始扇區(qū):寫入數(shù)據(jù)的最前的邏輯扇區(qū)號(0FFFFH)* 扇區(qū)數(shù):寫入數(shù)據(jù)的連續(xù)扇區(qū)個數(shù)(0FFFFH)。* W若不帶參數(shù),或只有地址參數(shù),則按BX:CX寄存器指出的字節(jié),從內(nèi)存向磁盤寫入數(shù)據(jù)。此時的文件名是此命令前最后一個使用過的文件名,或者是N命令中指定的文件, 如果沒有使用過N命令,則使用Debug命令行中指定的文件。* W命令不能向擴展名為.EXE或.HEX的文件中寫入數(shù)據(jù)。但可以通過更改擴展名的方法讓其能對.exe文件寫入。* 若無地址項,則認為是目標(biāo)程序的CS:0100H。*

43、該命令可不通過MS-DOS的文件系統(tǒng)直接訪問磁盤的邏輯扇區(qū)。但必須以十六進制形式給在命令行中給定各參數(shù)。* W命令不能對用于網(wǎng)絡(luò)上的驅(qū)動器進行邏輯扇區(qū)寫入處理。* 警告:若參數(shù)有誤,則可能破壞盤文件結(jié)構(gòu)。請務(wù)必先搞清再作試踐,特別是對硬盤的操作。      舉例:假定要將起始地址為 CS:100 的內(nèi)存內(nèi)容寫入到驅(qū)動器 B 的磁盤中。需要將數(shù)據(jù)從磁盤的邏輯扇區(qū)號 37h 開始并持續(xù) 2Bh 個扇區(qū)。為此,鍵入以下命令: -W CS:100 1 37 2B 當(dāng)寫操作完成時,Debug 再次顯示 Debug 提示符。 四、應(yīng)用DEBUG軟件調(diào)試程序?qū)嶒瀸嶒灢襟E1)進入

44、DEBUG環(huán)境在Windows2000環(huán)境下,按順序選擇“開始”“程序”“附件”“命令提示符”后進入DOS環(huán)境,鍵入“DEBUG”后即可進入DEBUG,此時屏幕上顯示“_”提示符號。2)A(編輯命令)使用練習(xí)用DEBUG的A命令輸入程序。_A1000357:0100MOVAL,340357:0102MOVDL,360357:0104ADDDL,AL0357:0106SUB DL,320357:0109MOVAH,20357:010BINT 210357:010DINT200357:010F (回車)鍵入A命令時,自動產(chǎn)生程序所存內(nèi)存單元的段地址和偏移地址。程序輸入結(jié)束時,只需鍵入回車鍵就可以退出匯編狀態(tài)(A狀態(tài)),回到DEBUG狀態(tài)。注意:使用A命令時,只要注意起始地址的偏移地址從0100開始即可。至于前面的段地址是隨機變化的(取決于當(dāng)前內(nèi)存使用情況),對此不必介意。3)C(比較命令)使用練習(xí)

溫馨提示

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

評論

0/150

提交評論