




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、調試程序DEBUG.EXE解析1、debug是什么?DEBUG.EXE是DOS提供的可用于調試可執行程序的一個工具軟件,也是可用于匯編語言程序設計的一種調試工具。DEBUG也是軟件開發的重要調試工具,這是因為DEBUG除了可運行匯編語言程序外,還可直接用來檢查和修改內存單元,裝入、存儲及啟動運行程序,檢查及修改寄存器。也就是說DEBUG可深入到計算機的基本級上,可使用戶更緊密的與計算機中真正進行的工作相聯系。2、如何啟動debug命令來調試程序?啟動DEBUG的一般命令如下: DEBUG 路徑文件名參數1參數2其中:文件名指定被調試的文件,包括文件名和后綴,參數表是被調試文件運行時所需要的參數
2、。被調試的文件可以是系統中的任何文件,但通常它們的后綴為EXE或COM。當DEBUG啟動成功后,將顯示連接符“-”,這時,可輸入各種命令。注意: 運行Debug程序時,如果不帶被調試程序,則所有段寄存器值相等,都指向當前可用的主存段;除SP之外的通用寄存器都設置為0,而SP指示當前堆棧頂在這個段的尾部;IP=0100h;狀態標志都是清0狀態。 運行Debug程序時,如果帶入的被調試程序擴展名是.EXE,則需要重新定位。此時,CS:IP和SS:SP根據被調試程序確定,分別指向代碼段和堆棧段。DS=ES指向當前可用的主存段,BX.CX包含被調試文件大小的字節數(BX為高16位),其他通用寄存器為0
3、,狀態標志都是清0狀態。標志名稱溢出OF方向DF中斷IF負號SF零ZF輔助進位AF奇偶PF進位CF置位狀態1OVDNEINGZRACPECY復位狀態0NVUPDIPLNZNAPONC表1 DEBUG中標志位的符號表示3、DEBUG的命令及其參數 (一)DEBUG的命令Debug的命令都是一個字母,后跟一個或多個參數: 字母參數。命令的使用中注意:(1) 字母不分大小寫; (2) 只使用16進制數,并且不加尾綴“H”;(3) 分隔符(空格或逗號)只在兩個數值之間是必須的,命令和參數間可無分隔符。因此下列這些命令是等價的: dcs:100 110 d cs:100 110 d,cs:100,110
4、(4) 只有在按ENTER鍵之后,輸入的命令才有效。可以用Ctrl+Break中止命令的執行;(5)如果遇到語法出錯,那么就顯示“error”字樣, 如: d cs:100 cs:110 error錯誤原因是,命令D要求第二個地址中只包含16進制的偏移值。(6)不能使用符號常量和符號地址。 (7)不能使用絕大部分偽指令,但兩個最常用的偽指令DB和DW能被使用,用于直接把字節和字數據置人相應存儲單元。如: DB 1,2,3,4,“ABCD” DW 1234,5678 (8)可以使用屬性操作符“PTR”對DEBUG不能明確類型的操作數進行說明。如:INC BYTE PTR BX。 (9)DEBUG
5、的A命令匯編程序能根據轉移目標地址的距離自動地匯編出短、近或遠的轉移或調用指令。當然,這也能由“SHORT”、“NEAR PTR”或FAR PTR”對轉移目標地址進行說明來實現。 (10)遠返回指令的助記符在DEBUG中為RETF。 (11)指令前綴助記符必須在相關的指令之前輸入,也可以分別放在不同的行。 (12)串操作指令只能用其字節型或字型的助記符形式,如:MOVSB、CMPSW等。 (13)可以使用段超越前綴助記符CS:、DS:、ES:和SS:。如: DS: MOV AL,BP(二)DEBUG的命令參數許多命令的參數是主存邏輯地址,形式是“段地址:偏移地址”。其中,段地址可以是段寄存器或
6、數值;偏移地址是數值。如果不輸入段地址,則采用默認值,可以是缺省段寄存器值。如果沒有提供偏移地址,則通常就是當前偏移地址。例如:1000:0,ds:10,cs:30等;對主存操作的命令還支持地址范圍這種參數,從哪個地址開始,到哪個地址結束。它有二種表示方式:地址 地址前者表示起始地址,要用“段值:偏移量”來表達,后者表示終止地址,只用“偏移量”來表示; 例如:200:50 100段值為200,偏移量從50到100的內存區域,地址 長度前者表示起始地址,要用“段值:偏移量”來表達,后者表示該區域的大小,用字母L開頭的數值來表示。 例如:200:50 L100段值為200,偏移量從50開始的100
7、個字節區域。4、DEBUG命令的使用DEBUG的命令共有19條,這里具體介紹常用的幾條,其余的請同學們課后自行消化。(1)裝人命令(Load) 用途:把文件或特定磁盤扇區的內容加載到內存。說明:用單個Load命令可裝入的最大扇區數是80H。如果出現讀盤錯,則DEBUG顯示出錯信息。 裝入命令有兩種形式: 形式1用于在沒有參數或只用一個地址參數時,裝入文件。L地址 ;形式1:裝入由N命令指定的文件當使用不帶參數的 L 命令時,在 debug 命令行上指定的文件將加載到內存中,從地址 CS:100 開始。Debug 同時將 BX 和 CX 寄存器設置為加載的字節數。如果不在 debug 命令行指定
8、文件,所裝入的文件將是最近使用 n 命令指定的文件。如果使用帶 address 參數的 L命令,Debug 將從內存位置 address 開始加載文件或指定扇區的內容。 形式2L地址驅動器扇區號扇區數用于從指定的驅動器中的盤上裝人數據,并把數據存放在存儲器中指定的address開始的單元中。 例如: L 4BA:100 1 OF 6D從驅動器B的盤上裝人數據,并把數據存放在以4BA:100開始的內存中。從相對扇區0FH(15),即該軟盤的第16扇區開始,傳送6DH(109)個連續扇區的數據。其中,0表示A盤,1表示B盤,2表示C盤,。(2)命名命令(Name)格式:Ndrive:path fi
9、lename用途:把一個或兩個可以包含路徑的文件全名存入Debug中,以便在其后用L或W命令把文件裝入或存盤。 說明:如果在無文件說明時啟動DEBUG,在用L命令裝入文件之前,必須使用Name命令。如果現在使用 w(寫入)命令,Windows將使用名稱 File2.dat 保存正在調試的文件 File1.exe。為避免出現此結果,應該總是在 l 或 w 命令之前使用 n 命令。 (3)退出命令(Quit) 格式:Q ;用途:結束DEBUG程序。 說明:Q命令不保存內存中正工作的文件,需要時可用Write命令保存文件。(4)匯編命令(Assemble) 用途:鍵人匯編指令,并把它們匯編成機器代碼
10、,相繼存放在從指定地址開始的存儲區中。 格式:A地址;從指定地址開始匯編指令說明:輸入給本命令的所有數字都是十六進制的。將輸人的指令從指定的地址address開始裝入內存的連續單元。如果不指定地址,則把語句裝人CS:0100確定的區域中;如果已用過A命令,那么就在前一個A命令所裝入的最后一條指令的后繼單元中,接著輸入指令。進行匯編的步驟如下:輸入匯編命令A地址,按回車。Debug提示地址,等待你輸入新指令; 輸入匯編指令,按回車; 如上繼續輸入匯編指令,直到輸入所有指令; 不輸入內容就按回車,結束匯編,返回Debug的提示符狀態。 DEBUG對不可用語句的響應是顯示信息: error 并顯示當
11、前的裝人地址。A命令支持標準的8086(和8087浮點)指令系統以及匯編語言語句格式,但要注意以下一些規則:所有輸入的數值都是16進制數; 段超越指令需要在相應指令前,單獨一行輸入; 段間(遠)返回的助記符要使用RETF; A命令也支持最常用的兩個偽指令DB和DW。(5)寄存器命令(Register) 用途:寄存器命令有三種功能: 顯示單個寄存器的十六進制內容,并帶有修改這些內容的選擇。 顯示全部寄存器、標志位、以及將被執行的下條指令。 顯示8個標志位狀態,并帶有修改它們之中任一個或全部的選擇。 格式:R 寄存器名 使用說明:顯示和修改指定寄存器 有效寄存器是:AX、BX、CX、DX、SP、B
12、P、SI、DI、DS、ES、SS、CS和IP。例如,為了顯示AX寄存器的內容,可輸入:R AXAX F1E4 :_系統顯示如下: 現在可以采用下列兩個操作中的某一個: a按ENTER鍵保留未修改的內容。 b輸入14字符的十六進制值來修改AX寄存器的內容,例如FFFH, AX F1F4 :FFF_現在按ENTER鍵把AX寄存器內容改變成0FFFH。 顯示所有的寄存器和標志位 為了顯示所有寄存器的內容和標志位(還有下條要執行的指令),輸入: R則系統可能顯示如下: AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000 DS=
13、04BA ES=04BA SS=04BA CS=04BA IP=011A NV UP DI NG NZ AC PE NC 04BA:01lA CD21 1NT 21頭4行顯示寄存器十六進制內容和8個標志位狀態。最后一行指出下一條要執行的指令地址和它的16進制機器碼以及反匯編形式,這是當前CS:IP指向的指令。 顯示標志位 有8個標志位,每位用2個字母表示是置“1”狀態還是清除狀態,詳細說明見下表: 標志位的符號表示 標志位 名 稱 Set(置位) clear(清除) 溢出(是否) 方向(減增) 中斷(允許禁止)符號(負正) 零 (是否) 輔助進位(是否) 奇偶(偶奇) 進位(是否) O V D
14、 N E I N G Z R A C P E C Y N V U P D I P L N Z N A P O N C為了顯示所有的標志位,輸人命令: R F如果所有標志位處于置1狀態,就顯示: OV DN EI NGZR AC PE CY現在可以進行下面兩個操作之中的某一個: a按ENTER鍵保留未修改的標志位狀態。 b修改任一個或全部標志位狀態。為了修改標志位,應輸入它的相反碼。可以按任何順序,帶或不帶分隔的空格來輸入此相反碼。例如,為了修改第一、第三、第五和第七標志位,輸入: 0V DN EI NG ZR AC PE CY 上面是按倒過來的順序輸入標志碼的。按ENTER鍵則按所指定的要求修
15、改各標志位。(6)跟蹤命令(Trace) 格式:T=地址 ;逐條指令跟蹤T=地址數值;多條指令跟蹤用途:從CS:IP或者=address(如果指定的話)單元中的指令開始單步執行一條或多條指 令。這里的=號必須輸入。可以用value指定跟蹤多條指令。每條指令執行后,顯示所有寄存 器的內容、標志位的狀態以及下一條要執行的指令。 例如,輸入命令: T 如果IP寄存器內容為011A,而該地址指向的指令是MOV AH,0EH,這可能顯示: AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C D1=0000 DS=04BA ES=04BA SS=
16、04BA CS=04BA IP=011C NV UP DI NG NZ NC PE NC 04BA:01lC CD21 INT 21這是執行011A中指令之后顯示的結果,并且指出下條要執行的指令是04BA:011C單元中的INT 21。T命令逐條指令執行程序,遇到子程序(CALL)或中斷調用(INTn)指令也不例外,也會進入到子程序或中斷服務程序當中執行。(7)繼續命令P(Proceed)類似T命令,逐條執行指令、顯示結果。但是當遇到子程序調用、中斷功能調用和循環指令等時,不在子程序、中斷服務程序或循環體中單步執行,而是直接執行完成子程序、中斷服務程序或循環體,然后顯示結果。當不需要調試子程序
17、、中斷服務程序或循環程序段時,要應用P命令,而不是T命令。P=地址數值 (8)反匯編命令(Unassemble) 反匯編命令有兩種選擇形式:U地址;從指定地址開始,反匯編32個字節, 如果不指定地址,則U命令認為起始地址是原先U命令反匯編過的最后指令的下一個單元。因此,連續地輸入無參數的U命令能夠對連續的內存單元進行反匯編,并產生連續的反匯編的顯示。如果原先沒有輸入U命令,則起始單元是由DEBUG初始化在代碼中的段內偏移值01OOH。U范圍;對指定范圍的主存內容進行反匯編, 不管系統顯示格式如何,把指定地址范圍內的所有指令都進行反匯編。(9)執行命令(GO) 用途:執行正在調試的程序。當達到所
18、指定的斷點地址處時,就停止執行,并顯示寄存器、標志位以及下一條要執行的指令。 格式:G=地址斷點地址1,斷點地址2,.,斷點地址10 說明:如果不采用=address參數(必須輸入=號),就從CS和IP寄存器內容決定的地址開始執行程序。如果指定=address,則程序就從CS:address處開始執行。斷點可以沒有,但最多只能有10個。程序正常結束,將顯示“Programterminatednormally”。 執行命令(GO)有兩種形式供選用: 形式1在無斷點時,利用此形式執行正在調試的程序。 例如:G=address如果不采用=address時,在發出G命令之前,務必要把CS:IP值設置正
19、確。 形式2完成與形式1相同的功能,此外還允許在指定的地址上設置斷點。 例如: G=address address address此形式使執行停在指定的單元上,因此可以檢查系統程序環境。可以按任一種順序指定十個斷點。DEBUG程序在斷點地址上用個中斷碼CCH置換該指令碼。在執行時,無論到達哪個斷點都停止執行,顯示寄存器和標志位,并把所有斷點地址的內容都恢復成它們原來的指令碼。 例如:G 102 1EF 208從當前的指令開始執行,當前指令的地址是CS:IP的當前值。沒有使用=address參數。指定了三個斷點,假設到達第二個斷點,指令執行到CS:1EF單元之前停止執行,恢復原來的指令碼,取消所
20、有三個斷點,產生顯示并結束GO命令。(10)顯示內存命令(Dump) 用途:顯示存儲器的內容。格式:D 地址;顯示當前或指定開始地址的主存內容。例如:D CS:10D 范圍;顯示指定范圍的主存內容.例如:D CS:100 10C 說明:用兩個部分來顯示內存內容: 十六進制部分。每個字節的值都用十六進制格式表示. 每個顯示行顯示 16 字節的內容,第 8 字節和第 9 字節之間有一個連字符。每個顯示行從 16 字節的邊界上開始。ASCII部分。每個字節的值都用 ASCII 碼字符表示。每個非打印字符在顯示的 ASCII 部分由句號 (.) 表示。(11)修改內存命令(Enter) E(Enter
21、)命令用于修改主存內容,它有兩種格式:E地址 ;格式1,修改指定地址的內容 E地址數據表;格式2,用數據表的數據修改指定地址的內容格式1是逐個單元相繼修改的方法。例如,鍵入“e ds:100”,Debug顯示原來內容,用戶可以直接輸入新數據,然后按空格鍵顯示下一個單元的內容,或者按“”鍵顯示上一個單元的內容;不需要修改可以直接按空格或“”鍵;這樣,用戶可以不斷修改相繼單元的內容,直到用回車鍵結束該命令為止。 格式2可以一次修改多個單元,例如: -e ds:100 F3XYZ8D ;用F3/X/Y/Z/8D這5個數據替代DS:0100 0104的原來內容 5、DEBUG下的上機編程及程序調試方法
22、和操作實例 例21 在DEBUG下運行如下程序 MOV DL,33H ;字符3的ASCII碼送DL MOV AH,2 ;使用DOS的2號功能調用 INT 21H ;進行功能調用,輸出字符3 INT 20H ;正常結束程序中斷調用 該程序運行結果是在顯示器上輸出一個字符3。如果要輸出其它字符,可改變程序中 “33H”為相應字符的ASCII碼。該程序涉及DOS功能調用,因為我們是在DOS的支持下運行 匯編語言程序,所以一般情況下,我們要使用DOS內部提供的中斷服務程序完成輸入輸出及其它有關操作。 該程序上機操作如下: 進入DEBUG 設A驅動器上有DEBUG.COM程序。 ADEBUG 屏幕顯示
23、_ 在該提示符下可鍵人任意DEBUG命令。下面用a命令送程序。 送程序并匯編 _ a 100 1D11:0100 MOV DL,33 1D11:0102 MOV AH,2 1D11:0104 INT 21 IDll:0106 INT 20 1D11:0108 至此程序已送完,并匯編成了機器指令。 運行程序 _ g 3 program terminated normally _ 如果想看一下機器指令是什么樣子的話,方法之一是可以用反匯編命令u,作如下操作。 反匯編 _u100,107 1Dll:0100 B233 MOV DL,33 1Dll:0102 B402 MOV AH,02 1D1l:0
24、104 CD21 INT 21 1D11:0106 CD20 INT 20 送機器指令程序 e 200 B2,33,B4,02,CD,21,CD,20 執行機器指令程序 -g=200 3 Program terminated normally 退出DEBUG返回DOS _q A 例22 進入DEBUG送程序,用R命令顯示狀態,再用T命令單條執行。 進入DEBUG用A命令輸入并匯編源程序 Cdebug _a100 0D4C:0100 mov ah,3 0D4C:0102 mov al,2 0D4C:0104 add a1,ah 0D4C:0106 int 20 0D4C:0108 用R命令顯示寄
25、存器狀態 _r AX=0000 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0100 NV UP DI PL NZ NA PO NC 0D4C:0100 B403 M0V AH,03 _用T命令單條執行 _t AX=0300 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0102 NV UP DI PL NZ NA PO N
26、C 0D4C:0102 B002 MOV Al,02 _t AX=0302 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0104 NV UP DI PL NZ NA PO NC 0D4C:0104 00E0 ADD AL,AH _t (結果在AL中) AX=0305 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0106 N
27、V UP DI PL NZ NA PE NC 0D4C:0106 CD20 INT 20 _g Program terminated normally 退出 _q C6、其余的命令下面的命令請同學們自己消化:(12)輸出命令(Output)格式:O 端口地址字節數據 用途:把字節發送到指定的端口。 例如:為了把字節值4F發送到輸出端口2F8,輸人: 0 2F8 4F (13)比較命令(Compare) 用途:比較存儲器中兩個數據塊的內容。 格式:C 范圍 起始地址說明:對由“范圍”指定的區域與“起始地址”指定的同大小區域進行比較,顯示不相同的單元。參數 范圍:指定要比較的內存第一個區域的起始和結束地址,或起始地址和長度。 起始地址:指定要比較的第二個內存區域的起始地址。(14)填寫命令(Fill) 用途:用清單中的值填寫范圍內的存儲單元。 格式:F范圍數據表 說明:如果清單中包含的字節數小于地址范圍,則重復地使用該清單,直到把所指定范圍內的存儲器單元填滿為止。如果清單中包含的字節數大于地址范圍,就忽略不計超過的部分。 例如: F 4BA:1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高職單招面試培訓
- 服務與教學培訓
- 全國上海科教版初中信息技術八年級第一學期第三單元活動三《設計家庭網絡》教學設計
- 人教部編版五年級下冊景陽岡教學設計及反思
- 地震救援高級培訓課件
- 材料安全復習測試卷
- 《營養含量》(教學設計)-2024-2025學年北師大版小學數學六年級上冊
- 【八下HK數學】安徽省桐城市黃崗初級中學2023-2024學年八年級下學期期中數學試題
- 江蘇省宿遷市沭陽縣鄉鎮聯考2024-2025學年八年級下學期4月期中數學試題(原卷版+解析版)
- 大氣環境生態信息傳播重點基礎知識點
- 2025有關房屋買賣合同書模板
- 養老床位建設服務方案(技術方案)
- 《學打結做毽子》教學課件
- 語文-湖南省長郡二十校聯盟2025屆新高考教學教研聯盟高三第一次聯考(長郡二十校一聯)試題和答案
- 個人用電協議合同范例
- 建筑工程再生能源規劃
- 《自動化控制系統培訓課件》
- 基于專利視角下人工智能在合成生物學中的應用
- 多元函數概述
- 廚師用電安全培訓
- 2025贍養老人個稅扣除分攤協議書模板
評論
0/150
提交評論