




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編語言的編程步驟與調(diào)試方法匯編源程序的建立1. 使用工具使用文本編輯軟件(1) EDIT記事本等文本編輯軟件,編輯源程序,保存為.asm文件;(2)ASM,MASM匯編程序,對(duì)源程序進(jìn)行匯編,生成.obj文件-目 標(biāo)文件,以及調(diào)試用 丄ST列表文件和.CRF交叉引用表;(3兒ink連接程序,對(duì)使用的目標(biāo)文件和庫文件進(jìn)行連接,生成.exe文件,同時(shí)調(diào)試用.map-地址映像文件;如果源程序無語法錯(cuò)誤,上述三步將生成可運(yùn)行的.exe文件,=* =*.asm丄匯編程序如果運(yùn)行結(jié)果無誤,則完成對(duì)匯編程序的編程,如果運(yùn)行后結(jié)果存 在錯(cuò)誤,需要進(jìn)行調(diào)試。T*.objr 確。(4)Debug調(diào)試程序,對(duì).e
2、xe文件進(jìn)行調(diào)試,修改,直到程序正T連接程序圖3目標(biāo)程序生成步驟圖T'.exe2. 編程過程(1) 用文本編輯軟件,編寫擴(kuò)展名為.asm的源文程序文件。(2) 用匯編程序?qū)幒玫脑次募M(jìn)行匯編。命令行:masm *asm /可根據(jù)這如果源文件中存在語法錯(cuò)誤,則匯編程序?qū)⒅赋鲥e(cuò)誤類型及位置, 些信息重新編輯源文件,直至無語法錯(cuò)誤,匯編后,將生成指定名稱的目標(biāo)文 件.obj。使用MASM50匯編程序進(jìn)行匯編,輸入命令行masm或者masm *.asm后,根據(jù)提示,輸入文件名,在匯編沒有錯(cuò)誤的情況下,如屏幕所示:匯編程序可生成三個(gè)文件,*.obj,*.lst和*.crf。*.obj-目標(biāo)文件
3、,用于連接生成可執(zhí)行文件;*.lst-列表文件(可選),匯編語言匯編的機(jī)器語言與匯編語言對(duì)照表,可用于 調(diào)試;*.crf-交叉引用文件(可選),給出了用戶定義的所有符號(hào)和對(duì)每個(gè)符號(hào)定義、引用的行號(hào)。阿命令提示符一Microsoft Macro Assenbler Uersion 5.00Cnpyi*i fl-lit:Nirr'nsnFt Crii*p 19B119HS, 19B7_ All p-ig-hts i*r?ri*upc1_uhject fi1Ana(w rsbnu.OnJl: sbnu om*ca listing rNUL.LSTl: ref erNLIJj. CBF 1:E
4、Q722+潞& By七曰e enfco 1 spaca freeQ UAming Effci*©0 Severe Epi'dits(3)目標(biāo)文件的連接命令行:link *obj *obj *lib /連接程序,將多個(gè)目標(biāo)程序及庫文件,連接生成可執(zhí)行的*exe文件,同時(shí)可選擇生成*map文件。.ma p-地址映像文件,給出內(nèi)存地址分配的有關(guān)信息。下圖所示屏幕,為L(zhǎng)ink連接兩個(gè)目標(biāo)文件,沒有錯(cuò)誤的情況下,生成.exe文件。C = Xmas 1150>1 ink sliou. obj pasrei'. objhlcs'DEof t <HLink
5、e i? U e i*e io n 3.69Hicrosofh Corp 1983 190?_ fillrijfht Sl >'ese r'ued .Jtun File CSHOU.EXE : List File MUL.nftP: Lib+sries C.LIBZI:(4)執(zhí)行程序執(zhí)行*.exe文件,觀察程序運(yùn)行結(jié)果,如果存在錯(cuò)誤,需要進(jìn)行調(diào)試。調(diào)試工具DEBUG是針對(duì)匯編語言程序設(shè)計(jì)的一種調(diào)試工具,熟練使用DEBUG有助于匯編語言程序員對(duì)于邏輯錯(cuò)誤的調(diào)試。匯編程序的調(diào)試1.調(diào)試方法DEBUG工具的調(diào)試文件為可執(zhí)行文件*.exe,在命令行窗口或者DOS環(huán)境下,執(zhí)行DEB
6、UG命令:命令行 Debug *.exe /DEBUG程序如果正常啟動(dòng),提示符顯示為“ _”。出現(xiàn)“ _”提示符后,根據(jù) 調(diào)試的需要,輸入正確的Debug命令,根據(jù)顯示內(nèi)容,修改源文件。2.常用DEBUG命令(1) D 命令-內(nèi)存顯示命令命令格式 格式1: D起始地址/格式2: D起始地址結(jié)束地址|L字節(jié)數(shù)/調(diào)試程序的過程中,可利用該命令可以察看指定范圍的內(nèi)存單元的內(nèi)容,以 確定對(duì)內(nèi)存單元的修改是否正確??梢酝ㄟ^命令指定顯示的范圍 (格式 2),在不指定顯示長(zhǎng)度的情況下 (格式1),將顯示從起始地址開始128個(gè)字節(jié)的內(nèi)容,如果只寫D,則將從上一個(gè)D命令顯示結(jié)束的位置開始顯示 1 28個(gè)字節(jié)。在
7、內(nèi)存顯示過程中,可以通過“ Ctrl+S”鍵暫停,按任意鍵可繼續(xù)顯示,以防顯示過快,來不及察看,另外可以通過“Ctrl+S' 中止該命令的執(zhí)行。(2)E命令-數(shù)據(jù)編輯命令命令格式格式1: E起始地址列表/格式2: E起始地址/調(diào)試過程中,為了進(jìn)行程序測(cè)試,需要改變內(nèi)存或者寄存器的數(shù)據(jù),此時(shí)利 用DEBUG的 E命令可以非常方便的進(jìn)行修改。E命令可以使用一連串的數(shù)據(jù)對(duì)內(nèi)存連續(xù)地址單元進(jìn)行修改,此時(shí)使用格式 1,也可以修改某個(gè)地址單元的內(nèi)容后,按“空格'鍵,繼續(xù)修改 高地址單元內(nèi) 容。使用 E 命令時(shí),可以同時(shí)配合使用 D 命令,以確定是否正確的完成了對(duì)內(nèi) 存單元的修改。(3) U
8、 命令-反匯編命令命令格式:U起始地址結(jié)束地址調(diào)試過程中, 可以利用 U 命令將目標(biāo)程序反匯編為匯編程序, 以觀察匯編指令的存放位置, 匯編指令的正確與否, 對(duì)于無源碼的目標(biāo)程序, 還可以利用反匯編獲取目標(biāo)程序的源碼。(4)G命令-運(yùn)行程序命令命令格式:G=起始地址第一斷點(diǎn)地址第二斷點(diǎn)地址:調(diào)試過程中,可以利用G命令運(yùn)行程序,觀察結(jié)果的正確性,或者設(shè)置斷點(diǎn),利用G命令觀察程序運(yùn)行到某一位置是否正確,G命令最多可以設(shè)置10個(gè)斷點(diǎn),當(dāng)程序運(yùn)行置斷點(diǎn)時(shí),停止執(zhí)行,并顯示當(dāng)前所有寄存器和標(biāo)志位的內(nèi)容, 以及下一條將要執(zhí)行的指令。如果G命令無起始地址,則從當(dāng)前 CS:IP內(nèi)容為開始運(yùn)行。(5)T命令-單
9、步執(zhí)行命令命令格式格式1: T=地址格式2: T=地址執(zhí)行指令的條數(shù)調(diào)試過程中,可以利用該指令單步執(zhí)行,從指定地址開始(如果不指定,則從CS:IP開始),執(zhí)行一條指令(格式1)或者執(zhí)行指定條數(shù)的指令(格式 2)后,停止執(zhí)行,并顯示當(dāng)前所有寄存器和標(biāo)志位的內(nèi)容。(6)R命令-寄存器訪問命令命令格式格式1: R格式2: R寄存器名稱一般匯編程序中,會(huì)頻繁的使用寄存器,使用R命令,可以在調(diào)試程序的過程中方便的進(jìn)行寄存器內(nèi)容的察看。如果不指定寄存器名稱(格式1),則顯示所有寄 存器和標(biāo)志位內(nèi)容;可以指定需要察看的寄存器的名稱(格式2),只顯示察看寄存器的內(nèi)容。(7)Q命令-Debug退出命令命令格式
10、QDebug程序使用結(jié)束后,使用該命令退出Debug。使用舉例右邊所示的匯編源程序,在命令行窗口中輸入下面 命令行:MASM /ATA SEGUEHIK DB 亍6V DB 6FZ DO 78 RESULT OB ?DATA ENDSCODE SEGMENIASSUME CS:CODE,DS:DAJABEGAIN;nouROUnovnulnouROUnuladddiuFhOUnov intdXMKalzresult,al ah 沁 ch2lhCODE ENDSEND BEGAIN對(duì)文件進(jìn)行匯編,如果沒有語法錯(cuò)誤,則生成目標(biāo)文件。輸入下面命令行:LINK /對(duì)目標(biāo)文件進(jìn)行連接,連接后得到可執(zhí)行文
11、件,使用Debug對(duì)該程序進(jìn)行調(diào)試。(1) U-反匯編對(duì)反匯編后,得到代碼段地址和指令的對(duì)應(yīng)圖如下圖所示。從反匯編的結(jié)果,可以得到指令在代碼段的偏移地址,常與T命令和G命令聯(lián)合使用,使程序運(yùn)行到固定的位置,查看結(jié)果。同時(shí),可以從反匯編代碼中看 出,變量會(huì)被匯編為直接尋址方式,使用變量在數(shù)據(jù)段內(nèi)的有效地址表示。-U i3Ci-000e 13C1:0003 13C1:0005 13C1:0008 13C1J000A 13C1:Q0QC 13G1;00QF 13G120011 FL3G1:0013 13C1I0017 (13C1Z001A i3Cl=00iC 13C1:001E00102B3C10C
12、D0ED0EC3a4s08E06G063624D0D8AFaoAFQFABC03 01 0000MOU nou MOU nuL NOV MOU nuL ADD DIU non now INTAX.13C6 聒腫 AL.臨 see ALreeeiiHLAK BKBYTE PTB 0002 0eeH ,flL“H/C2iIBK+Sl ,flL(2) T單步每按一下T執(zhí)行一步,屏幕上顯示執(zhí)行指令后,通用寄存器、段寄存器和標(biāo) 志位的狀態(tài),下一條指令,以及指令中操作的存儲(chǔ)器尋址方式對(duì)應(yīng)的內(nèi)存單元的nK=13C0 BX=QBQe DS=13B0ES=13B0i3Cl:0033 8£De -Tcx
13、=002E DK=0eQB sp=eeQeSS =1 :*f:H f:K=IStCl fpT HOUbs,吐丁BP=eQee si=0000 01=0000NU UP El PL NZ NA PO NCnK=13C0 BX=QBQe DS=13C0ES=13B0131:0035-Tcx=002E DK=0eQB sp=eeQeSS=13C0CS=13C1IP=000SHOUAL,0000JBP=eQee si=0000 01=0000NU UP El PL NZ NA POIds=0000-38口 K=1晅1 BX=0000DS=13C0ES=13B0131:0038 FtEeCX=00ZE
14、DX=0000sp=0000SS=13C0CS=13C1 IF=0e0BnUL ALBP=eooeNU UPSI=0006 DI=0900 El PL NZ NA PO NC內(nèi)容。(3) GM根據(jù)反匯編的情況,G斷點(diǎn)常設(shè)置在正常返回DOS調(diào)用之前,即 MOVAH,4CH執(zhí)行后,可以通過查看寄存器內(nèi)容,或者命令查看內(nèi)存地址單元的-G 001AAH =3DS =13Ctf13C1:001A B44CB»=e0ee ck=0021 dx =0040 sr-0000 _LL=0eiA meES=13Be SS=li£0_CR±iaLl nouBP=0OeO 81=0006
15、01=0600NU UP ET FL NE NA PE MC內(nèi)容,檢查程序的運(yùn)行是否正常。(4)D-查看存儲(chǔ)器內(nèi)容 查看數(shù)據(jù)段內(nèi)容,屏幕上會(huì)給出16個(gè)字節(jié)。因此可以根據(jù)定義的數(shù)據(jù)段中,128字節(jié)存儲(chǔ)單元的內(nèi)容,每行為順序的 變量的偏移量,查看運(yùn)行結(jié)果。-D 1300:00004E13oe w e DS AQ QI1309:090013CQ:0Qie38EQ43C01309:0020EQ03C2FC36 62 Qii3ca:oa300000030600 B0 6113C0:00400000000000 ee cii13C9:00500000000330 ee e0000000606 ee 611300:00700000000600 ee eiee-ee ee-F6 A2-03 00-00 ee-ee ee-ea00-000QEQ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京混凝土合同范本
- 各種合同范本app
- 廚房墻壁維修合同范本
- 種植水稻農(nóng)村土地出租合同范本
- 醫(yī)院租賃合同范本
- 發(fā)廊給干股 合同范本
- 買賣合同范本 中日
- 沖擊鉆合同范本
- 古董繼承合同范例
- 單位之間贈(zèng)與合同范例
- 機(jī)械設(shè)計(jì)基礎(chǔ)網(wǎng)考題庫答案 吉林大學(xué)
- 建筑垃圾回收利用統(tǒng)計(jì)臺(tái)賬
- 《不一樣的你我他》(完美)課件
- 新蘇教版科學(xué)六年級(jí)下冊(cè)全冊(cè)教案(含反思)
- 原油電脫鹽電脫水技術(shù)
- 國(guó)考斷面水站建設(shè)及運(yùn)維技術(shù)要求參考
- Q∕GDW 10799.7-2020 國(guó)家電網(wǎng)有限公司電力安全工作規(guī)程 第7部分:調(diào)相機(jī)部分
- 熱工學(xué)后題答案
- 不吸煙不喝酒課件
- 奧數(shù)知識(shí)點(diǎn) 間隔問題
- 簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置
評(píng)論
0/150
提交評(píng)論