在學習16位彙編時,debug是常用的調試工具,但很多基本用法命令幫助中並未提及,經查驗和實驗,特記錄如下:
一、基本概念:
debug可加載exe或com文件,並顯示內存中內容或變量值,還可以顯示cpu的寄存器值。可以顯示可執行文件的機器碼(彙編的方式),並且可以通過單步執行彙編代碼,檢測程序的邏輯錯誤,並可修改彙編代碼或內存數據。
1、命令語法:
dos下輸入:debug 可執行文件名稱,然後進入命令提示符界面(橫線-),輸入:命令 參數。
例如:
c:\>debug hello.exe(回車)
-?(回車) 顯示幫助
-r(回車) 顯示cpu寄存器值
2、參數分隔符
debug中參數之間的分隔符可用“空格”或“逗號”,效果一致,如:
-u 100 110等於-u 100,110
-d 0100:0000 0010等於-d 0100:0000,0010
3、value的表示
無論是debug的參數中含有的地址,立即數或彙編代碼中的數字,都是十六進制,無需加前綴或後綴,範圍只能是0~4位。
字符需要引號,如:'a'
4、debug命令和代碼不區分大小寫。
5、地址(address)表示
1)完全地址形式(段地址segment:偏移地址offset):段地址可通過段寄存器名稱和立即地址表示,如地址可通過DS:0010和0100:0010兩種方式表示。
2)默認段地址形式(偏移地址offset):-d 0100(默認段地址是DS)。
6、range的寫法
參數range有2種寫法:
1)開始地址和結束地址,如:
-d 0100:0000 0010(結束地址段地址與開始相同,不能跨段)
-d 0000 0010 (起始都是默認段地址)
2)開始地址和長度,如:
-d 0100:0000 l 0080(開始地址和長度)
7、list的寫法
用分隔符把各項羅列出來,如-f 0100:0110 1f 2f 3f ff(用數值列表輪流填充)
8、string的表示
'string'或"string"都行,表示一串字符,實質相當於字符list
9、路徑path規範
文件的路徑可寫成完整路徑,如當前目錄,可省略路徑
10、加載彙編代碼
可通過debug < hello.asm的方式加載彙編代碼,就相當於手動輸入每一行(最後必須有Q命令)。
a 100
mov ax,5
mov bx,10
add ax,bx
int 20
(blank line)
Q
二、命令用法:
1、N(指定文件名稱)
指定寫出(W)或載入(L)的文件名稱,如載入hello.exe:
-N c:\c\hello.exe
-L