999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談Debug調(diào)試匯編語言程序的方法

2008-12-31 00:00:00計(jì)博婧
電腦知識與技術(shù) 2008年9期

摘要:本文淺談了Debug在匯編語言程序上機(jī)調(diào)試中的基本步驟和方法,幫助學(xué)生如何利用Debug工具更好地學(xué)習(xí)匯編語言,對于匯編語言教學(xué)具有一定的參考價(jià)值。

關(guān)鍵詞:匯編語言;Debug;調(diào)試;命令

中圖分類號:TP393文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)09-11653-03

The Method of the Debug Debugging Assembly Language Procedure

JI Bo-jing

(Chizhou Institute, Chizhou 247100, China)

Abstract: This article discussed shallowly basic step and method of Debug in the assembly language procedure hands-on debugging, and help the students how to study the assembly language well by using the Debug tool. It has certain reference value regarding the assembly language teaching.

Key words: Assembly language; Debug; Debugging; Order

1 引言

匯編語言是一種介于計(jì)算機(jī)能直接識別、執(zhí)行的機(jī)器語言和高級語言之間的程序設(shè)計(jì)語言。匯編語言最顯著的特

點(diǎn)是它與機(jī)器硬件關(guān)系密切,與機(jī)器語言一一對應(yīng),可以編寫出在“時(shí)空”兩方面最有效率的程序,因此在系統(tǒng)軟件開發(fā)、實(shí)時(shí)工業(yè)控制等場合中是必不可少的軟件開發(fā)工具。現(xiàn)在大多數(shù)高校的計(jì)算機(jī)專業(yè)均將《匯編語言程序設(shè)計(jì)》作為必修課程,通過該課程的教學(xué),有助于培養(yǎng)學(xué)生的程序設(shè)計(jì)方面的能力,同時(shí)可以讓學(xué)生從根本上認(rèn)識、理解計(jì)算機(jī)的工作原理,這對《接口技術(shù)》、《單片機(jī)》等后續(xù)課程的學(xué)習(xí)是非常有幫助的。但是在具體的教學(xué)過程中,尤其是在上機(jī)環(huán)節(jié)里學(xué)生普遍感到匯編語言程序難以調(diào)試,以至于不能很好的理解課堂上傳授的理論知識,由此引發(fā)學(xué)生剛接觸這門課程時(shí)學(xué)習(xí)興趣不高。好在系統(tǒng)為我們提供了Debug工具,利用好這個(gè)調(diào)試工具將很大程度地幫助于我們調(diào)試好匯編語言程序,從而提高了學(xué)生的學(xué)習(xí)興趣和教學(xué)效果。下面筆者結(jié)合教學(xué)實(shí)踐就如何使用Debug來調(diào)試匯編語言程序這個(gè)問題談?wù)勛约旱幕痉椒ā?/p>

2 結(jié)合教學(xué)實(shí)踐介紹Debug調(diào)試匯編語言程序的基本方法

2.1 調(diào)試程序前的準(zhǔn)備工作

2.1.1 熟悉Debug工具中常用的命令的使用方法

Debug提供了一系列操作命令,具有很強(qiáng)的調(diào)試功能,涉及的內(nèi)容也相當(dāng)廣。下面簡要介紹在程序調(diào)試中使用的一些常用命令。

R--顯示寄存器的內(nèi)容 A--對助記符指令進(jìn)行匯編

D--顯示內(nèi)存單元的內(nèi)容 G--運(yùn)行程序

U--對二進(jìn)制指令代碼進(jìn)行反匯編 Q--退出Debug

E--修改存儲區(qū)數(shù)據(jù) T--單步執(zhí)行程序

2.1.2 借助參考文件

利用匯編和連接過程中產(chǎn)生的.LST或.MAP文件信息,記下調(diào)試中某些關(guān)鍵變量、標(biāo)號、子程序的地址,為便于調(diào)試中查看中間結(jié)果和設(shè)置斷點(diǎn)位置。

2.1.3 制定調(diào)試步驟方案

多數(shù)同學(xué)在上機(jī)過程中,完成匯編語言源程序的編輯、匯編、連接以及進(jìn)入Debug調(diào)試環(huán)境后,普遍感到束手無策,不知從何處開始調(diào)試,更無法得知程序的結(jié)果是否正確。面臨這種問題,往往筆者在上機(jī)教學(xué)中告訴學(xué)生首先要回顧一下程序所要求實(shí)現(xiàn)的功能,其次借助.LST或.MAP文件信息分析出程序的已知條件 ,比如已知變量的值及存放的內(nèi)存單元地址,進(jìn)而可將已知變量數(shù)據(jù)所存儲的示意圖畫在紙上,然后分析出程序運(yùn)行的正確結(jié)果及所存放的具體地址。上述問題正確分析完后就可以制定出一個(gè)較具體的調(diào)試步驟方案。

2.2 調(diào)試過程的具體實(shí)施

2.2.1 啟動(dòng)Debug

在完成調(diào)試程序前的準(zhǔn)備工作之后,就啟動(dòng)Debug程序,裝入被調(diào)試程序進(jìn)入調(diào)試環(huán)境。注意,進(jìn)入Debug時(shí)一定要以完整的形式指定用戶可執(zhí)行程序文件名(完整路徑\\文件名.擴(kuò)展名),裝入被調(diào)試程序。

2.2.2 觀察寄存器和數(shù)據(jù)單元的初始值

在裝入用戶程序后,先用R命令顯示寄存器的初始值,通過CS和SS寄存器可以了解到程序代碼段和堆棧段在內(nèi)存中的分布位置;從IP可以知道第一條可執(zhí)行指令在代碼段中的起始地址;DS和ES中的值是相同的,注意它們并不是用戶程序數(shù)據(jù)段的段基值,而是PSP的段基值。然后選擇U命令或者查看連接過程中產(chǎn)生的.MAP文件來找出用戶程序數(shù)據(jù)段的段值,如果用戶想查看數(shù)據(jù)段中的內(nèi)容,還必須提供變量的偏移地址,這時(shí)可以通過.LST文件或者畫出變量存儲示意圖分析出數(shù)據(jù)段中定義的變量的偏移量。緊接著用D命令和已查到的數(shù)據(jù)段段基值、變量偏移地址來查看用戶數(shù)據(jù)段中存儲的內(nèi)容。此時(shí)就可以對程序的各個(gè)功能段在內(nèi)存中的存儲分布情況有了具體的了解,便于后續(xù)的調(diào)試。

2.2.3 目標(biāo)代碼的反匯編

在運(yùn)行程序之前,還須對要執(zhí)行的代碼段進(jìn)行反匯編。只有這樣才能確定待運(yùn)行的程序段的起始地址、斷點(diǎn)地址。

2.2.4 選用適當(dāng)?shù)倪\(yùn)行程序命令,運(yùn)行用戶程序

Debug提供了G、T、P三個(gè)運(yùn)行程序命令,這就要求我們要靈活的選用。比如,對執(zhí)行順序程序部分,通常使用G命令。對于要特別仔細(xì)查看的指令,可選用P命令或T命令,一般建議在單步執(zhí)行時(shí),選用P命令,在需要考察LOOP循環(huán),進(jìn)入子程序或軟中斷調(diào)用時(shí),使用T命令進(jìn)行跟蹤運(yùn)行。

2.2.5 斷點(diǎn)的設(shè)置

在程序的各功能段調(diào)試中,可能包含有轉(zhuǎn)移分支指令,往往需要對分支的原因、分支的正確性進(jìn)行驗(yàn)證。這時(shí)就需要在G命令中加上斷點(diǎn)參數(shù)。

2.2.6 觀察運(yùn)行結(jié)果

匯編語言源程序運(yùn)行后,大多數(shù)情況下運(yùn)行結(jié)果并不直觀的顯示在屏幕上,這時(shí)就可以選擇D命令或者R命令來顯示出存放在內(nèi)存單元或寄存器中的運(yùn)行結(jié)果。

如果用戶希望像高級語言那樣,程序運(yùn)行結(jié)果可以直接顯示在屏幕上,可以調(diào)用系統(tǒng)提供的DOS系統(tǒng)功能調(diào)用或者BIOS中斷調(diào)用來顯示。用戶可以結(jié)合題目的要求和分析,對運(yùn)行結(jié)果作出判斷,從而可得知用戶程序是否正確。

2.3 舉例說明Debug在匯編語言中的調(diào)試方法

2.3.1 以下是該程序的功能要求和源程序清單:

;定義源字符串變量sstr的值為小寫字母表,用程序?qū)⑺鼜?fù)制到目標(biāo)字符串dstr中。

datasegment

sstrdb'abcdefghijklmnopqrstuvwxyz'

dataends

extra segment

dstrdb 26 dup(?)

extra ends

codesegment

assume cs:code,ds:data,es:extra

start: mov ax,data

mov ds,ax

mov ax,extra

mov es,ax

lea si,sstr

lea di,dstr

mov cx,26

cld

repmovsb

movah,4ch; dos系統(tǒng)功能調(diào)用,標(biāo)志源程序結(jié)束

int21h

code ends

endstart

2.3.2 具體調(diào)試過程

為了方便說明給該程序命名為“mycopy.asm”,首先在DOS環(huán)境下完成對該程序的編輯輸入、匯編、連接,接著啟動(dòng)Debug將生成的mycopy.exe文件裝入內(nèi)存,輸入R命令后,屏幕出現(xiàn)了各個(gè)寄存器的當(dāng)前值,如下所示:

E:\\MASM>debug mycopy.exe

-r

AX=0000BX=0000CX=005CDX=0000SP=0000BP=0000SI=0000DI=0000DS=13D3ES=13D3SS=13E3CS=13E7IP=0000 NV UP EI PL NZ NA PO NC

13E7:0000 B8E313MOVAX,13E3

可以查到當(dāng)前代碼段段基值是13E7H,堆棧段的段基值為13E3H,整個(gè)程序段所占內(nèi)存大小存放在(BX,CX)中,為005CH個(gè)字節(jié)。

輸入U(xiǎn)命令后,屏幕出現(xiàn)了代碼段在內(nèi)存中的存放情況,如下所示:

-u cs:0

13E7:0000 B8E313MOVAX,13E3

13E7:0003 8ED8MOVDS,AX

13E7:0005 B8E513MOVAX,13E5

13E7:0008 8EC0MOVES,AX

13E7:000A 8D360000LEASI,[0000]

13E7:000E 8D3E0000LEADI,[0000]

13E7:0012 B91A00MOVCX,001A

13E7:0015 FCCLD

13E7:0016 F3REPZ

13E7:0017 A4MOVSB

13E7:0018 B44CMOVAH,4C

13E7:001A CD21INT21

13E7:001C ECIN AL,DX

13E7:001D 81EC9000 SUBSP,0090

可以查到數(shù)據(jù)段的段基值為13E3H,附加段段基值為13E5H,并可以找到待運(yùn)行代碼段的起始地址為13E7:0000,結(jié)束地址為13E7:001C。

經(jīng)過分析后可以找到數(shù)據(jù)段中的小寫字母表存放的首偏移地址是0,將要存放復(fù)制過來的小寫字母表的首偏移地址也是0。這樣就可以查看數(shù)據(jù)段中被復(fù)制的小寫字母表在內(nèi)存中存放的情況,選用D命令,如下所示:

-D 13E3:0 L1A

13E3:000061 62 63 64 65 66 67 68-69 6A 6B 6C 6D 6E 6F 70abcdefghijklmnop

13E3:001071 72 73 74 75 76 77 78-79 7Aqrstuvwxyz

可以看出屏幕顯示三欄信息,右邊欄顯示的是數(shù)據(jù)段在內(nèi)存中存放的信息,當(dāng)前是小寫字母表,中間欄顯示的是這些小寫字母在內(nèi)存中存儲的形式,均為十六進(jìn)制,左邊欄顯示的是每一行的16個(gè)字節(jié)單元區(qū)域的首字節(jié)單元地址。

接下來選擇G命令來運(yùn)行程序,如下所示:

-G=13e7:0000001C

Program terminated normally

可以看出該程序的結(jié)果并沒有直觀顯示出來,這時(shí)我們可以分析下該程序的功能,是將數(shù)據(jù)段中的小寫字母表復(fù)制到附加段的存儲區(qū)域,要想觀察結(jié)果得用D命令去查看附加段所在內(nèi)存單元的內(nèi)容是否是小寫字母表就可以了。如下所示:

-d 13e5:0 l1a

13E5:000061 62 63 64 65 66 67 68-69 6A 6B 6C 6D 6E 6F 70abcdefghijklmnop

13E5:001071 72 73 74 75 76 77 78-79 7Aqrstuvwxyz

結(jié)果已經(jīng)顯示在屏幕上了,可以看出附加段里有存放的小寫字母表,可以判斷該程序是正確的。

3結(jié)束語

“匯編語言程序設(shè)計(jì)”是一門實(shí)踐性很強(qiáng)的學(xué)科,要求我們在學(xué)習(xí)理論知識的同時(shí)更重視上機(jī)環(huán)節(jié)的實(shí)踐操作能力的培養(yǎng),尤其要熟練地靈活使用Debug調(diào)試工具,以實(shí)驗(yàn)實(shí)踐促進(jìn)理論知識的深入理解,從而激發(fā)學(xué)生的學(xué)習(xí)興趣,提高教學(xué)質(zhì)量和教學(xué)效率,為學(xué)生的后續(xù)課程的學(xué)習(xí)打下扎實(shí)的基礎(chǔ)。

參考文獻(xiàn):

[1] 沈美明. IBM——PC匯編語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1991.

[2] 王正智. 宏匯編語言程序設(shè)計(jì)[M].成都:電子科技大學(xué)出版社,2000.

[3] 羅省賢. 匯編語言程序設(shè)計(jì)教程[M].北京:電子工業(yè)出版社,2004.

[4] 楊季文. 80X86匯編語言程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,1998.

主站蜘蛛池模板: 色久综合在线| 自拍中文字幕| 久久夜色精品| 婷婷六月激情综合一区| 色丁丁毛片在线观看| 久久国产拍爱| 最新国产精品第1页| 一区二区在线视频免费观看| av在线手机播放| 色悠久久综合| 情侣午夜国产在线一区无码| 欧美日韩北条麻妃一区二区| 狠狠躁天天躁夜夜躁婷婷| 久操中文在线| 伊人网址在线| 国产丝袜丝视频在线观看| 亚洲性一区| 手机成人午夜在线视频| 伊人久久婷婷| 久久毛片免费基地| 国产三级成人| 中文字幕免费播放| 欧美日韩一区二区在线播放| 天堂网亚洲综合在线| 欧美不卡二区| 精品伊人久久久久7777人| 国产激情第一页| 亚洲精品在线91| 国产成人综合日韩精品无码首页| 国产精品视频猛进猛出| 国内老司机精品视频在线播出| 国产精品青青| 91国语视频| 亚洲国产成人自拍| 欧美.成人.综合在线| 久久久久久久久久国产精品| 三上悠亚精品二区在线观看| 天天色综网| 亚洲毛片网站| 四虎成人在线视频| 久久黄色一级视频| 视频二区国产精品职场同事| 啪啪免费视频一区二区| 在线精品自拍| 午夜视频在线观看区二区| 国产精品无码久久久久AV| 亚洲香蕉在线| 制服丝袜一区| 99在线视频免费观看| 亚洲免费毛片| 嫩草影院在线观看精品视频| 2021国产精品自产拍在线观看 | 99精品久久精品| 99视频在线看| 久久久久九九精品影院| 亚洲无码高清一区二区| 中文字幕在线看| 国产一区二区免费播放| 亚洲第一精品福利| 四虎影院国产| 国产噜噜噜视频在线观看| 白丝美女办公室高潮喷水视频| 久久综合九九亚洲一区| 伊在人亚洲香蕉精品播放| 午夜激情婷婷| 色综合天天操| 国产成人精品一区二区| 亚洲无线视频| 国产精品夜夜嗨视频免费视频| 99久久精品久久久久久婷婷| 久久香蕉国产线看观看精品蕉| 国产一区二区三区在线观看视频| 伊人久久福利中文字幕| 亚洲成人一区二区三区| 国产福利微拍精品一区二区| 亚洲狼网站狼狼鲁亚洲下载| 五月天福利视频| 日韩一区精品视频一区二区| 日韩在线观看网站| 国产精品密蕾丝视频| 亚洲熟女偷拍| 国产成人精品18|