亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

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

        中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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ī)能直接識(shí)別、執(zhí)行的機(jī)器語言和高級(jí)語言之間的程序設(shè)計(jì)語言。匯編語言最顯著的特

        點(diǎn)是它與機(jī)器硬件關(guān)系密切,與機(jī)器語言一一對應(yīng),可以編寫出在“時(shí)空”兩方面最有效率的程序,因此在系統(tǒng)軟件開發(fā)、實(shí)時(shí)工業(yè)控制等場合中是必不可少的軟件開發(fā)工具?,F(xiàn)在大多數(shù)高校的計(jì)算機(jī)專業(yè)均將《匯編語言程序設(shè)計(jì)》作為必修課程,通過該課程的教學(xué),有助于培養(yǎng)學(xué)生的程序設(shè)計(jì)方面的能力,同時(shí)可以讓學(xué)生從根本上認(rèn)識(shí)、理解計(jì)算機(jī)的工作原理,這對《接口技術(shù)》、《單片機(jī)》等后續(xù)課程的學(xué)習(xí)是非常有幫助的。但是在具體的教學(xué)過程中,尤其是在上機(jī)環(huán)節(jié)里學(xué)生普遍感到匯編語言程序難以調(diào)試,以至于不能很好的理解課堂上傳授的理論知識(shí),由此引發(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--修改存儲(chǔ)區(qū)數(shù)據(jù) T--單步執(zhí)行程序

        2.1.2 借助參考文件

        利用匯編和連接過程中產(chǎn)生的.LST或.MAP文件信息,記下調(diào)試中某些關(guān)鍵變量、標(biāo)號(hà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ù)所存儲(chǔ)的示意圖畫在紙上,然后分析出程序運(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文件或者畫出變量存儲(chǔ)示意圖分析出數(shù)據(jù)段中定義的變量的偏移量。緊接著用D命令和已查到的數(shù)據(jù)段段基值、變量偏移地址來查看用戶數(shù)據(jù)段中存儲(chǔ)的內(nèi)容。此時(shí)就可以對程序的各個(gè)功能段在內(nèi)存中的存儲(chǔ)分布情況有了具體的了解,便于后續(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é)果。

        如果用戶希望像高級(jí)語言那樣,程序運(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)存中存儲(chǔ)的形式,均為十六進(jìn)制,左邊欄顯示的是每一行的16個(gè)字節(jié)單元區(qū)域的首字節(jié)單元地址。

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

        -G=13e7:0000001C

        Program terminated normally

        可以看出該程序的結(jié)果并沒有直觀顯示出來,這時(shí)我們可以分析下該程序的功能,是將數(shù)據(jù)段中的小寫字母表復(fù)制到附加段的存儲(chǔ)區(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í)的同時(shí)更重視上機(jī)環(huán)節(jié)的實(shí)踐操作能力的培養(yǎng),尤其要熟練地靈活使用Debug調(diào)試工具,以實(shí)驗(yàn)實(shí)踐促進(jìn)理論知識(shí)的深入理解,從而激發(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.

        国产亚洲精品综合在线网址| 在线播放免费播放av片| 无码国产精品一区二区vr老人| 97久久人人超碰超碰窝窝| 久久久亚洲色| 久久久久久久98亚洲精品| WWW拍拍拍| 今井夏帆在线中文字幕| 精品综合久久久久久888蜜芽| 国产精品免费久久久久影院仙踪林| 亚洲男人堂色偷偷一区| 亚洲永久精品日韩成人av| 免费成人电影在线观看| 日本边添边摸边做边爱的网站| av中文字幕综合在线| 久久一二三四区中文字幕| 美利坚日韩av手机在线| 内射少妇36p亚洲区| 日本韩国一区二区三区| 亚洲国产一区中文字幕| 91色老久久偷偷精品蜜臀懂色 | 男人天堂插插综合搜索| 亚洲av综合av国产av中文| 免费特级毛片| 亚洲 无码 制服 丝袜 自拍| 精品人妻一区二区三区蜜臀在线 | 97人妻人人做人碰人人爽| 欧美性受xxxx黑人xyx性爽| 中文字幕人成人乱码亚洲| 日本久久视频在线观看| 精品无码av无码专区| 人妻少妇偷人精品无码| 欧洲午夜视频| 麻豆视频在线观看免费在线观看| 国产精品高潮呻吟av久久黄| 国产免费av片在线播放| 中文字幕一区二区三区在线不卡| 亚洲国产精品成人一区二区在线| 国产尤物精品视频| 波多野结衣中文字幕在线视频| 一区二区三区少妇熟女高潮|