據我所知有兩種方法實現masm:
找到asm文件右擊選擇默認打開方式,然後將方式改爲dosbox就可以了:接下來就是:
masm ****.asm(無錯誤提示的話,連續按三個回車)
link ****.obj
*****.exe
這樣就可以了。
第二種方法有點麻煩:
首先得通過mount命令將你源文件所在位置轉化爲c盤;
然後masm(同上):
DEBUG.EXE程序是專門爲分析、研製和開發彙編語言程序而設計的一種調試工具,具有跟蹤程序執行、觀察中間運行結果、顯示和修改寄存器或存儲單元內容等多種功能。它能使程序設計人員或用戶觸及到機器內部,因此可以說它是80X86CPU的心靈窗口,也是我們學習彙編語言必須掌握的調試工具。初學者可以直接在DEBUG環境下執行彙編指令。
2.1 DEBUG程序使用
在DOS提示符下鍵入命令:
C>DEBUG [盤符:][路徑][文件名.EXE][參數1][參數2]
這時屏幕上出現DEBUG的提示符“-”,表示系統在DEBUG管理之下,此時可以用DEBUG進行程序調試。若所有選項省略,僅把DEBUG裝入內存,可對當前內存中的內容進行調試,或者再用N和L命令,從指定盤上裝入要調試的程序;若命令行中有文件名,則DOS把DEBUG程序調入內存後,再由DEBUG將指定的文件名裝入內存。
每條命令以單個字母的命令符開頭,然後是命令的操作參數,操作參數與操作參數之間,用空格或逗號隔開,操作參數與命令符之間用空格隔開,命令的結束符是回車鍵。DEBUG中所用數均爲十六進制數,所以後面不用加H。
2.2 DEBUG的常用命令
1彙編命令 A
格式:A[起始地址]
功能:將輸入源程序的指令彙編成目標代碼並從指定地址單元開始存放。若缺省起始地址,則從當前CS:100地址開始存放。A命令按行彙編,主要是用於小段程序的彙編或對目標程序的修改。
例如:
-A 100
18E4:0100 mov ax,1234
18E4:0103 add ax,5
18e4:0105 (回車)
2 反彙編命令 U
格式1:U[起始地址]
格式2:U[起始地址][結束地址|字節數]
功能:格式1從指定起始地址處開始將32個字節的目標代碼轉換成彙編指令形式,缺省起始地址,則從當前地址CS:IP開始。
格式2將指定範圍的內存單元中的目標代碼轉換成彙編指令。
例如:
-u100
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70608020202 MOV WORD PTR[0208],0202
18E4:0112 BB0402 MOV BX,0204
18E4:0115 E80200 CALL 011A
18E4:0118 CD20 INT 20
18E4:011A 50 PUSH AX
18E4:011B 51 PUSH CX
18E4:011C 56 PUSH SI
18E4:011D 57 PUSH DI
18E4:011E 8B37 MOV SI,[BX]
3顯示、修改寄存器命令 R
格式:R[寄存器名]
功能:若給出寄存器名,則顯示該寄存器的內容並可進行修改。缺省寄存器名,則按以下格式顯示所有寄存器的內容及當前值(不能修改)。
AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000
DI=0000 DS=3000 ES=23A0 CS=138E IP=0000
NV UP DI PL NZ NA PO NC
138E:0000 MOV AX,1234
-R AX ;輸入命令
AX 0014 ;顯示AX的內容
: ;供修改,不修改按回車。
若對標誌寄存器進行修改,輸入:-RF
屏幕顯示如下信息,分別表示OF、DF、IF、SF、ZF、AF、PF、CF的狀態。
NV UP DI PL NZ NA PONC
不修改按回車鍵。要修改需個別輸入一個或多個此標誌的相反值,再按回車鍵。R命令只能顯示、修改16位寄存器。
4顯示存儲單元命令 D
格式1:D[起始地址]
格式2:D[起始地址][結束地址|字節數]
功能:格式1從起始地址開始按十六進制顯示80H個單元的內容,每行16個單元,共8行,每行右邊顯示16個單元的ASCII碼,不可顯示的ASCII碼則顯示“·”。格式2顯示指定範圍內存儲單元的內容,其他顯示方式與格式1一樣。如果缺省起始地址或地址範圍,則從當前的地址開始按格式1顯示。
例如,按指定範圍顯示存儲單元內容的方法爲:
-D 100 120
067C:0100 C7 D7 0D 0A 32 33 33 34 - D5 C5 B4 C630 10 42 0C ....2334....0.B.
067C:0110 03 41 4243 44 45 46 47 - 48 49 4A 4B 4C 4D 4E 4F .ABCDEFGHIJKLMNO
067C:0120 8B
其中0100至0120是DEBUG顯示的單元內容。 左邊用十六進制表示每個字節,右邊用ASCII字符表示每個字節,“.”表示不可顯示的字符。這裏沒有指定段地址, D命令自動顯示DS段的內容。如果只指定首地址,則顯示從首地址開始的80個字節的內容。如果完全沒有指定地址,則顯示上一個D命令的最後一個單元的內容。
說明:在DEBUG中,地址表示方式有如下形式:
段寄存器名:相對地址,如:DS:100
段基值:偏移地址(相對地址),如:23A0:1500
5 修改存儲單元命令 E
格式1:E[起始地址] [內容表]
格式2:E[地址]
功能:格式1按內容表的內容修改從起始地址開始的多個存儲單元內容,即用內容表指定的內容來代替存儲單元當前內容。
例如:-E DS:0100 'VAR' 12 34
表示從DS:0100 爲起始單元的連續五個字節單元內容依次被修改爲
'V'、'A'、'R'、12H、34H。
格式2是逐個修改指定地址單元的當前內容。
如:-E DS:0010
156F:0010 41.5F
其中156F:0010單元原來的值是41H,5FH爲輸入的修改值。若只修改一個單元的內容,這時按回車鍵即可;若還想繼續修改下一個單元內容,此時應按空格鍵,就顯示下一個單元的內容,需修改就鍵入新的內容,不修改再按空格跳過,如此重複直到修改完畢,按回車鍵返回DEBUG“-”提示符。如果在修改過程中,將空格鍵換成按“-”鍵,則表示可以修改前一個單元的內容。
6 運行命令 G
格式:G[=起始地址][第一斷點地址[第二斷點地址……]]
功能:CPU從指定起始地址開始執行,依次在第一、第二等斷點處中斷。若缺省起始地址,則從當前CS:IP指示地址開始執行一條指令。最多可設置10個斷點。
7 跟蹤命令 T
格式:T[=起始地址][正整數]
功能:從指定地址開始執行‘正整數’條指令,若缺省‘正整數’,表示執行一條指令,若兩項都缺省,表示從當前CS:IP指示地址開始執行一條指令。
8跟蹤命令 P
格式:-P[=地址]
從指定地址起執行一條指令後停下來,顯示所有寄存器內容、標誌位的值和下一條要執行的指令地址和指令內容。如未指定地址則從當前的CS:IP開始執行。
9 指定文件命令 N
格式:N<文件名或擴展名>
功能:指定即將調入內存或從內存寫入磁盤的文件名。該命令應該用在L命令和W命令之前。
10 裝入命令 L
格式1:L[起始地址][盤符號][扇區號][扇區數]
格式2:L[起始地址]
功能:格式1根據盤符號,將指定扇區的內容裝入到指定起始地址的存儲區中。
格式2將N命令指出的文件裝入到指定起始地址的存儲區中,若省略起始地址,則裝入到CS:100處或按原來文件定位約定裝入到相應位置。
11 寫磁盤命令 W
格式1:W<起始地址>[驅動器號]<起始扇區><扇區數>
格式2:W[起始地址]
功能:格式1把指定地址開始的內容數據寫到磁盤上指定的扇區中。
格式2將起始地址的BX×10000H+CX個字節內容存放到由N命令指定的文件中。在格式2的W命令之前,除用N命令指定存盤的文件名外,還必須將要寫的字節數用R命令送入BX和CX中。
12 退出命令 Q
格式:Q
功能:退出DEBUG,返回到操作系統。下面再來說說debug命令: