MASM調試程序使用步驟 1、在運行中輸入cmd,進入DOS界面 2、輸入edit c:\abc.asm 編輯程序文件 3、通過 “cd 目錄” 到指定masm目錄 4、masm 文件名.asm (匯編),生成obj文件 5、link 文件名.obj(鏈接),生成可執(zhí)行文件 6、 文件名.exe(執(zhí)行) DEBUG及其常用命令 轉帖[http://wwdyjdx.blog.163.com/blog/static/163401212006101413352405/] 一 DEBUG簡介 DEBUG是DOS的一個外部命令, 其命令格式為: [path]DEBUG [filename] [parm1] [parm2] [path]是DEBUG命令在磁盤上的路徑 filename是要用DEBUG來處理的文件的名字, 它包括文件的盤符、路徑、 文件主名和擴展名。 參數parm1和parm2是文件filename運行時使用的參數。 當啟動DEBUG時, 將對CPU的各寄存器進行初始化: 1. 如果啟動時指定的filename是.EXE文件, 則DEBUG啟動后將自動把指定的文件裝入內存, 并置: CS為程序代碼段段地址 IP為第一條要執(zhí)行指令的偏移地址 SS為堆棧段段地址 SP為堆棧底部+1單元的偏移地址 DS和ES是裝入文件前第一個可用內存段的段地址(即DEBUG程 序后的第一個段地址) 標志寄存器的所有標志位為0 BX(0)和CX是裝入的文件長度 其余寄存器為0。 2. 如果啟動DEBUG時指定的文件filename不是.EXE文件, 則DEBUG 將把文件裝入內存, 并置: 四個段寄存器為DEBUG程序后面的第一個段地址 IP指向100H SP指向這個段的段尾 標志寄存器的所有標志位為0 BX和CX是裝入的文件長度 其余寄存器為0。 3. 如果啟動DEBUG時不指定filename, 則只是把CPU 的各寄存器進行初始化, 初始化結果與上述的第2點相同。這時要想顯示、修改文件,可以用DEBUG的子命令裝入文件。 二 。DEBUG的命令 DEBUG的命令都用單個字母表示, 其后可跟一個或多個參數, 參數之間用空格或逗號分隔。 DEBUG的命令參數大多數是地址或地址范圍, 其地址書寫格式為: [段地址:]偏移地址 其中的段地址可以用段寄存器名表示, 也可以用一個十六進制數表示。 如: ES:100 43A5:200 地址范圍的書寫格式為: Ⅰ. [段地址:]起始偏移地址 終止偏移地址 Ⅱ. [段地址:]起始領銜地址 L長度 如: CS:100 10F和CS:100 L10所指的地址范圍是一致的。 當輸入的命令不正確時, DEBUG將在該行底下指出錯誤所在。 注意: 在DEBUG下, 輸入的數據和顯示的數據都是十六進制數,不用在數據后加“H”。 A 匯編與反匯編命令 1.匯編命令A 格式: A [地址] 功能:從鍵盤輸入匯編程序, 并逐條地把匯編指令翻譯成機器代碼指令存入對應內存單元。 說明: 如果不指定匯編地址, 則以CS:IP為地址 2. 反匯編命令U 格式: U [地址]/[地址范圍] 功能: 將指定地址范圍內的機器代碼翻譯成匯編源程序指令顯示出來, 并同時顯示地址及代碼。 注意: 反匯編時一定確認指令的起始地址, 否則得不到正確的結果。 B 顯示與修改內存單元內容的命令 1. 顯示內存單元內容命令D 格式1: D [地址] 格式2: D 地址范圍 說明: D命令在屏幕上顯示的內容分為三部分, 左邊是每一行存儲單元的起始地址, 中間是各字節(jié)單元的內容, 右邊是各單元內容對應的ASCII碼字符( 不可顯示的字符用"."代替)。 2. 修改內存單元內容命令E 格式1: E 地址 內容表 說明: 內容表可以是以逗號或空格分隔的兩位16進制數, 也可以是用單引號''或雙引號""括起來的字符串, 還可以是二者的組合。 格式2: E 地址 說明: 在修改數據時可用以下鍵進行不同操作: 1)鍵入空格鍵。修改后一個字節(jié)單元的內容。 2) 輸入減號"-"。另起一行, 修改前面一個字節(jié)單元的內容。 3) 輸入回車鍵, 結束內存單元的修改。 3. 填充內存命令F 格式: F 地址范圍 內容表 功能: 將<內容表>的值逐個填入指定地址范圍, 內容表中的內容用完后再重復使用。 C。顯示與修改寄存器內容的R命令 格式1: R 功能: 顯示當前所有寄存器內容, 狀態(tài)標志及將要執(zhí)行的下一條指令的地址、代碼和匯編指令形式。 格式2: R 寄存器名 功能: 顯示并修改指定寄存器的內容 D。運行和跟蹤命令 1. 運行程序命令G 格式: G [=起始地址] [斷點地址] 功能: 從起始地址開始執(zhí)行程序, 直到程序結束或遇到斷點地址為止。 說明: 如果不指定起始地址, 則從CS:IP處開始執(zhí)行。 如果程序執(zhí)行到結束,則顯示"Program terminated normally"(程序正常結束)。如果遇到斷點, 則程序停止執(zhí)行, 并顯示當時各寄存器的內容 和下一條要執(zhí)行的指令。 2. 跟蹤運行命令T 格式: T [=起始地址] [指令條數] 功能: 逐條跟蹤程序的運行, 同時顯示出各寄存器的內容、狀態(tài)標志和下一條要執(zhí)行的指令, 當執(zhí)行夠指定的指令數后就暫停程序的運行。 說明: 如果不指定起始地址, 則從CS:IP處開始執(zhí)行。 不指定指令條數時, 認為只執(zhí)行一條指令。 3. 繼續(xù)命令P 格式: P [=起始地址] [指令條數] 功能: 與T命令一樣完成跟蹤程序的運行, 但遇到子程序、中斷程序、循環(huán)時并不跟蹤下去, 而是把它們當作一條指令來執(zhí)行。 E。磁盤讀寫命令 1. 文件命名命令N 格式: N 文件名 功能: 指定要裝入內存或寫到磁盤的文件的名字(包括盤符和路徑)。 2. 裝入命令L 格式: L [地址] [驅動器號 扇區(qū)號 扇區(qū)數] 功能: 把指定文件或磁盤扇區(qū)的內容裝入到內存指定地址 說明: 地址的默認值為CS:100。 驅動器號用0表示A盤, 1表示B盤, 2表示C盤。 3. 寫磁盤命令W 格式: W [地址] [驅動器號 扇區(qū)號 扇區(qū)數] 功能: 將指定內存地址的一片單元內容寫到磁盤中。 說明: 地址的默認值為CS:100。 要將內存內容寫入文件時, 必須先用N命令命名一個文件,并置BX和CX為文件長度。 注意: W命令不能寫入以.EXE和.HEX為擴展名的文件。 F。DEBUG的其它命令 1. 移動內存命令 格式: M 源地址范圍 目標起始地址 功能: 把<源地址范圍>中的內容順序移到<目標起始地址>起的一片連續(xù)內存單元。 注意: 源區(qū)域的數據不因移動而消失, 其內容仍保持不變。 源、目標中的地址只要不指定段地址, 則都是隱含使用DS段。 2. 比較命令C 格式: C 源地址范圍 目標起始地址 功能: 從<源地址范圍>的起始地址單元開始, 逐個與<目標起始地址>后的單元的內容順序進行比較, 直到源終止地址為止。遇到不相同時顯示出它們的地址和內容: 源地址 源內容 目標內容 目標地址 3. 查找命令S 格式: S 地址范圍 要查找的內容 功能: 在指定的地址范圍內查找指定的內容, 若找到則顯示出它們所 處的地址, 否則不顯示任何信息。 4. 十六進制算術運算命令H 格式: H 值1 值2 功能: 顯示十六進制數<值1>與<值2>的和差的結果。 5. 退出DEBUG命令Q 格式: Q 功能: 結束DEBUG程序, 返回到DOS提示符下。 注意: Q命令并不把內存中正在工作的文件存盤 |
|