1632位微機原理與接口技術實驗指導書_第1頁
1632位微機原理與接口技術實驗指導書_第2頁
1632位微機原理與接口技術實驗指導書_第3頁
1632位微機原理與接口技術實驗指導書_第4頁
1632位微機原理與接口技術實驗指導書_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第1章 匯編語言程序設計概述1.1 匯編語言開發(fā)環(huán)境1.1.1 實驗設備硬件設備 PC機一臺1.1.2 匯編語言開發(fā)環(huán)境1、DOS環(huán)境在計算機的任一邏輯盤上建一目錄,把下面四個文件拷貝到該文件夾下。編輯軟件EDIT.exe匯編軟件MASM.exe連接程序LINK.exe調(diào)試程序DEBUG.exe例如在邏輯盤D下建一子目錄MASM,把上述文件拷貝到該目錄下。該目錄在后面的匯編語言上機詳細過程中還會用到。2、WINDOWS集成開發(fā)環(huán)境具體操作見第二章的2.1。1.1.3 匯編語言程序上機操作一般過程 首先要用編輯軟件建立匯編語言的源程序文件。用匯編語言編寫的源程序不能由計算機直接執(zhí)行。須通過具有“

2、翻譯”功能的系統(tǒng)程序匯編程序(Assembler)匯編產(chǎn)生相應的目標代碼文件,再通過連接程序生成可執(zhí)行文件,則可以用DEBUG上機調(diào)試或運行程序。編輯、匯編、連接、調(diào)試過程如圖1-1所示。用匯編語言編寫的程序叫源程序,源程序經(jīng)匯編程序翻譯后所得的機器指令代碼稱為機器語言目標程序,簡稱目標程序。圖1-1 匯編語言程序上機過程1、編寫匯編語言源程序將要解決的應用問題用匯編語言語句編寫成程序,并建立擴展名為.asm的源程序文件??扇芜x一種編輯軟件,來輸入、建立或修改源程序。不要用格式控制符,要求編輯完成的文件擴展名必須是.asm。編輯源程序文件可任選下列軟件的一款:WORD、寫字板、書寫器、EDIT

3、.COM、WP、行編輯軟件EDLIN.COM等。2、匯編將匯編語言源程序翻譯成機器語言程序的過程,即將*.ASM匯編語言源文件轉換為*.obj文件。由系統(tǒng)軟件匯編程序完成此翻譯過程。匯編程序有ASM.EXE、宏匯編MASM.EXE及TASM等,一般使用宏匯編MASM.EXE,因它比ASM.EXE功能強。TASM適用于8086/8088至Pentium系列CPU指令系統(tǒng)所編寫的匯編語言程序,是比較先進的匯編工具。3、連接將不可執(zhí)行的二進制文件轉換為可執(zhí)行文件,即將*.obj文件轉換為*.EXE文件。完成連接的程序有LINK.EXE或TLINK.EXE,將匯編產(chǎn)生的機器代碼程序(即.OBJ文件)連

4、接成可執(zhí)行程序文件(即.EXE文件)。4、程序調(diào)試(DEBUG)進行匯編語言程序調(diào)試和文件格式轉換。常用軟件調(diào)試工具有:動態(tài)調(diào)試程序DEBUG.COM、文件格式轉換程序EXE2BIN.EXE、交叉引用程序CREF.EXE、動態(tài)調(diào)試程序TD(turbo Debugger簡稱),可在DOS和Windows環(huán)境下運行,用戶界面友好。1.2 匯編語言實驗過程詳細步驟1.2.1 DOS環(huán)境實驗過程詳細步驟1、建立源程序運行任選一款編輯軟件,輸入源程序。保存源程序文件,且擴展名為.ASM。2、匯編 用編輯軟件建立的源程序.ASM文件,必須經(jīng)過匯編才能產(chǎn)生.OBJ文件。在Windows環(huán)境下,點擊屏幕左下角

5、的“開始”“所有程序”“附件”“命令提示符”, 鍵入D: 并回車,再鍵入cd masm并回車,則顯示如圖1-2所示:圖1-2 命令提示符窗口在D:masm>提示符下鍵入MASM并回車,則在屏幕上顯示: Microsoft(R) Macro assemble Version 5.00 Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reservedSource filename .ASM:輸入要匯編的匯編語言源程序文件名,并回車,則屏幕顯示:OBJ filename<file>.obj:直接鍵入回車,則生成中括號中指定

6、文件名的.obj文件;也可以在上述輸入自己的文件名后再鍵入回車,則生成自己指定文件名的.obj文件。然后屏幕顯示: Source listingnul.lst: 直接鍵入回車,則不生成.lst文件;若要生成.lst文件,則鍵入一個文件名后鍵入回車,屏幕顯示: Cross-referencenul.crf:直接鍵入回車,則不生成.crf文件;若要生成.crf文件,則鍵入一個文件名后鍵入回車,屏幕顯示: 49748 + 451356 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsD:masm>說明:通過上述匯編后生成以下幾個文

7、件。(1).OBJ文件.OBJ文件是必須生成的一個目標代碼文件,當源程序中無語法錯誤時,則在當前工作盤上自動存入一個.OBJ文件,供下一步連接用。若源程序有語法錯誤時,會出現(xiàn)錯誤信息提示:文件名.ASM(12): error A2009: Symbol not defined: AX1文件名.ASM(15): error A2009: Symbol not defined: BRANCH1 50824 + 450280 Bytes symbol space free 0 Warning Errors (警告錯誤) 2 Severe Errors (嚴重錯誤)D:masm>上述有兩行錯誤信

8、息,錯誤信息格式是:源程序文件(行號): 錯誤信息代碼 : 錯誤信息說明若嚴重錯誤總數(shù)不為0,則.OBJ文件沒有生成,需回到編輯狀態(tài)下修改匯編源程序,并重新匯編,如此往復,直到無錯誤為止。(2).LST文件(列表文件).LST文件對調(diào)試程序有幫助,它是將源程序中各語句及其對應的目標代碼和符號表以清單方式列出,如果需要,在屏幕顯示的第二個提問的冒號后輸入文件名即可,如果不需要,直接按回車鍵。(3).CRF文件(交叉引用文件)交叉引用.CRF文件給出了源程序中定義的符號引用情況,按字母順序排列。.CRF文件不可顯示,須用CREF.EXE系統(tǒng)程序將.CRF文件轉換成為.REF文件后方可顯示輸出。若按

9、后一種格式輸入,系統(tǒng)會依次出現(xiàn)四個提示信息,比第一種格式多了一項源程序文件名的輸入。應答方式與第一種格式相同。3、連接目標程序 匯編后生成的.OBJ文件,其目標代碼中的所有地址都是浮動的偏移地址,機器不能直接運行。必須用連接程序(LINK.EXE)對其進行連接裝配定位,產(chǎn)生.EXE可執(zhí)行文件,方可運行。在系統(tǒng)提示符(D:masm>)下鍵入LINK <.obj的文件名> ,并回車,屏幕上出現(xiàn)以下提示信息: Microsoft (R) Overlay Linker Version 3.60Copyright (C) Microsoft Corp 1983-1987. All ri

10、ghts reserved.Run File <file>.EXE:缺省情況下,生成以源程序文件名(即方括號中的默認值)的可執(zhí)行文件。如果不修改可執(zhí)行文件的文件名,則直接鍵入回車;否則,鍵入可執(zhí)行文件的文件名,并回車,則生成的可執(zhí)行文件以該文件名為名字。屏幕顯示: List File NUL.MAP: Libraries .LIB:連續(xù)鍵入回車后,返回系統(tǒng)提示符。連接后,可生成兩種文件:.EXE和.MAP。(1).EXE文件(可執(zhí)行文件)若連接過程中無錯誤,則自動在當前工作盤生成.EXE文件。若有錯誤,則會給出錯誤信息提示,這時必須重新修改源程序,再匯編、連接。(2).MAP(連接

11、映像文件)是一個列表清單文件,一般不用生成。(3).LIB庫文件連接程序詢問是否使用某種庫文件,不需使用庫文件直接按回車鍵。(4)若要連接多個模塊目標程序,可用“+”把它們連接起來。在系統(tǒng)提示符下鍵入下列LINK命令并回車:D:MASM>LINK files1+files2+files3屏幕顯示同LINK一個模塊目標程序一樣。4、調(diào)試和運行程序經(jīng)過匯編、連接后生成的.EXE文件,可在DOS系統(tǒng)直接運行,只要鍵入可執(zhí)行文件的文件名,并回車即可。例如:D:MASM><文件名>DOS的COMMAND.COM模塊將該程序裝配到內(nèi)存,并設置和分配啟動地址。也可在DEBUG調(diào)試程序

12、下運行。如何用DEBUG程序來運行和調(diào)試程序將在DEBUG調(diào)試程序中詳細討論。5、DEBUG調(diào)試程序 DEBUG.EXE程序是專門為開發(fā)匯編語言程序而設計的一種調(diào)試工具,具有跟蹤程序執(zhí)行、觀察中間運行結果、顯示和修改寄存器或存儲單元內(nèi)容等多種功能。它能使程序設計人員或用戶觸及到機器內(nèi)部,因此可以說它是80X86CPU的心靈窗口,也是我們學習匯編語言必須掌握的調(diào)試工具。6、DEBUG程序使用在DOS系統(tǒng)提示符下鍵入命令并回車: D:masm>DEBUG 盤符:路徑文件名.EXE這時屏幕上出現(xiàn)DEBUG的提示符“-”,表示系統(tǒng)在DEBUG管理之下,此時可以用DEBUG進行程序調(diào)試。若所有選項

13、省略,僅把DEBUG裝入內(nèi)存,可對當前內(nèi)存中的內(nèi)容進行調(diào)試,或者再用N和L命令,從指定盤上裝入要調(diào)試的程序;若命令行中有文件名,則DOS系統(tǒng)把DEBUG程序調(diào)入內(nèi)存后,再由DEBUG將指定可執(zhí)行文件裝入內(nèi)存。7、DEBUG常用命令簡介(1)匯編命令 A格式:A 起始地址功能:將輸入源程序的指令匯編成目標代碼并從指定地址單元開始存放。若缺省起始地址,則從當前CS:100地址開始存放。A命令按行匯編,主要是用于小段程序的匯編或對目標程序的修改。(2)反匯編命令 U 格式1:U 起始地址 格式2:U 起始地址 結束地址 字節(jié)數(shù) 功能:格式1從指定起始地址處開始將32個字節(jié)的目標代碼轉換成匯編指令形式

14、,缺省起始地址,則從當前地址CS:IP開始。 格式2將指定范圍的內(nèi)存單元中的目標代碼轉換成匯編指令。(3)顯示、修改寄存器命令 R格式:R 寄存器名功能:若給出寄存器名,則顯示該寄存器的內(nèi)容并可進行修改。缺省寄存器名,則按以下格式顯示所有寄存器的內(nèi)容及當前值(不能修改)。例如:-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0B03 ES=0B03 SS=0B03 CS=0B03 IP=0100 NV UP EI PL NZ NA PO NC -R AX ;輸入命令 AX 0000 ;顯示AX的內(nèi)容 : ;

15、供修改,直接鍵入AX新值并回車;若不修改,則直接鍵入回車。 若對標志寄存器進行修改,在DEBUG提示符下鍵入R F,并回車。例如:-R F NV UP DI PL NZ NA PO NC 屏幕顯示如上信息,分別表示OF、DF、IF、SF、ZF、AF、PF、CF的狀態(tài)。不修改按回車鍵。要修改,則個別輸入一個或多個此標志的相反值,再按回車鍵。R命令只能顯示、修改16位寄存器。(4)顯示存儲單元命令 D格式1:D 起始地址格式2:D 起始地址 結束地址 字節(jié)數(shù)功能:格式1從起始地址開始按十六進制顯示80H個單元的內(nèi)容,每行16個單元,共8行,每行右邊顯示16個單元的ASCII碼,不可顯示的

16、ASCII碼則顯示“·”。格式2顯示指定范圍內(nèi)存儲單元的內(nèi)容,顯示方式與格式1一樣。如果不寫起始地址或地址范圍,則從當前地址開始按格式1顯示。例如,鍵入D 200并回車,屏幕顯示如下:-D 2000B03:0200 43 46 49 FE C4 8A 07 3C-20 74 01 AA 43 E2 BC C3 CFI.< t.C.0B03:0210 F6 46 04 02 75 43 8B D5-83 C2 05 57 B8 00 6C BB .F.uC.W.l.0B03:0220 40 00 33 C9 8B F2 BA 01-01 CD 21 5F 73 15 E8 8C

17、.3.!_s.0B03:0230 DB 3D 02 00 74 23 3D 03-00 74 1E 3D 05 00 74 19 .=.t#=.t.=.t.0B03:0240 E9 AB D8 8B D8 B8 00 44-CD 21 B4 3E CD 21 F6 C2 .D.!.>.!.0B03:0250 80 75 53 F6 46 04 04 74-4D 8B 56 05 80 FA 00 74 .uS.F.tM.V.t0B03:0260 05 80 FE 3A 74 02 B2 40-80 CA 20 80 EA 60 E8 3C .:t. .<0B03:0270 E4 7

18、3 06 E8 47 DB E9 75-D8 8B D5 83 C2 05 8A 7E .s.G.u.表示從DS:0200H開始顯示128個單元內(nèi)容,其中DS值不同的計算機環(huán)境其值不同。-D 100 120;表示顯示DS:0100-DS:0120單元的內(nèi)容說明:在DEBUG中,地址表示方式有如下形式: 段寄存器名:相對地址,如:DS:100段基值:偏移地址(相對地址),如:23A0:1500(5)修改存儲單元命令 E格式1:E 起始地址 內(nèi)容表格式2:E 地址功能:格式1按內(nèi)容表的內(nèi)容修改從起始地址開始的多個存儲單元內(nèi)容,即用內(nèi)容表指定的內(nèi)容來代替存儲單元當前內(nèi)容。例如:E DS:0100 &

19、#39;VAR' 12 34表示從DS:0100 為起始單元的連續(xù)五個字節(jié)單元內(nèi)容依次被修改為'V'、'A'、'R'、12H、34H。格式2是逐個修改指定地址單元的當前內(nèi)容。例如:E DS:0010156F:0010 41.5F其中156F:0010單元(注意:不同計算機環(huán)境DS值不一定是156F)原來的值是41H,5FH為輸入的修改值。若只修改一個單元內(nèi)容,這時按回車鍵即可;若還想繼續(xù)修改下一個單元內(nèi)容,則應按空格鍵,就顯示下一個單元內(nèi)容,需修改就鍵入新內(nèi)容,不修改再按空格跳過,如此重復直到修改完畢,按回車鍵返回DEBUG“-”提示符。

20、如果在修改過程中,將空格鍵換成按“-”鍵,則表示可以修改前一個單元內(nèi)容。(6)運行命令 G格式:G=起始地址 第一斷點地址 第二斷點地址功能:CPU從指定起始地址開始執(zhí)行,依次在第一、第二等斷點處中斷。若缺省起始地址,則從當前CS:IP指示地址開始執(zhí)行一條指令。最多可設置10個斷點。(7)跟蹤命令 T格式:T 起始地址 正整數(shù)功能:從指定地址開始執(zhí)行正整數(shù)條指令,若缺省正整數(shù),表示執(zhí)行一條指令,若兩項都缺省,表示從當前CS:IP指示地址開始執(zhí)行一條指令。(8)指定文件命令 N格式:N <文件名或擴展名>功能:指定即將調(diào)入內(nèi)存或從內(nèi)存寫入磁盤的文件名。該命令應該用在L命令和W命令之前

21、。(9)裝入命令 L格式1:L 起始地址 盤符號扇區(qū)號扇區(qū)數(shù)格式2:L 起始地址功能:格式1根據(jù)盤符號,將指定扇區(qū)的內(nèi)容裝入到指定起始地址的存儲區(qū)中。格式2將N命令指定的文件裝入到指定起始地址的存儲區(qū)中,若省略起始地址,則裝入到CS:100處或按原來文件定位約定裝入到相應位置。(10)寫磁盤命令 W格式1:W <起始地址> 驅動器號<起始扇區(qū)><扇區(qū)數(shù)>格式2:W 起始地址功能:格式1把指定地址開始的內(nèi)容數(shù)據(jù)寫到磁盤上指定扇區(qū)中。格式2將起始地址的BX×10000H+CX個字節(jié)內(nèi)容存放到由N命令指定的文件中。在格式2的W命令之前,除用N命令指定存盤

22、文件名外,還必須將要寫的字節(jié)數(shù)用R命令送入BX和CX中。(11)退出命令 Q格式:Q功能:退出DEBUG,返回到操作系統(tǒng)。1.2.2 其他Debug調(diào)試命令DEBUG調(diào)試的其他命令見表 1-1,請參考有關書籍。表1-1 DEBUG常用命令名稱含義命令格式A(Assemble)逐行匯編AaddressC(Compare)比較兩內(nèi)存塊C range addressD(Dump)顯示內(nèi)存單元(區(qū)域)內(nèi)容DaddressDrangeE(Enter)修改內(nèi)存單元(區(qū)域)內(nèi)容E address listF(Fill)填充內(nèi)存單元(區(qū)域)F range listG(GO)連續(xù)執(zhí)行程序G=address ad

23、dressH(Hexarthmetic)兩參數(shù)進行十六進制運算H Value ValueI(Input)從指定端口地址讀取并顯示一個字節(jié)值I port addressL(Load)裝入某個文件或特定磁盤扇區(qū)的內(nèi)容到內(nèi)存LaddressM(Move)將內(nèi)存塊內(nèi)容復制到另一個內(nèi)存塊M range rangeN(Name)指定要調(diào)試的可執(zhí)行文件參數(shù)Nd:pathfilename.exeO(Output)將字節(jié)值發(fā)送到輸出端口O port address byteQ(Quit)退出DEBUGQR(Register)顯示或修改一個或多個寄存器內(nèi)容Rregister nameS(Search)在某個地址范

24、圍搜索一個或多個字節(jié)值S range listT(Trace)單步多步跟蹤T or TaddressValueU(Unassmble)反匯編并顯示相應原語句Uaddress or UrangeW(Write)文件或數(shù)據(jù)寫入特定扇區(qū)Waddressdrive sector sector ?顯示幫助信息?第2章 80X86匯編語言實驗內(nèi)容1.實驗設備硬件:PC計算機一臺;軟件,匯編軟件2.實驗目的(1)熟悉匯編語言程序設計方法;(2)熟悉匯編程序調(diào)試過程;(3)掌握使用數(shù)據(jù)傳送、運算類、轉移等指令編程及調(diào)試方法。(4)掌握順序結構、分支結構、循環(huán)結構和子程序調(diào)用的編程方法。3.實驗及實驗報告要求(

25、1)編程、調(diào)試、運行、檢查結果,并記錄要求:對程序反復輸入幾組數(shù)據(jù),并運行程序,記錄結果。(2)實驗報告要求實驗報告中應包含實驗內(nèi)容、源程序、實驗步驟、運行結果、結果分析是否正確及存在的問題。2.1 系統(tǒng)認識實驗2.1.1 實驗目的 掌握微型計算機匯編軟件調(diào)試匯編源程序的基本操作。熟悉傳送類指令、簡單運算類指令來編寫匯編語言源程序,掌握調(diào)試過程及實驗結果分析。4.1.2 實驗內(nèi)容 1、從3500H內(nèi)存單元開始建立015共16個數(shù)據(jù)(建立的數(shù)據(jù)為00H,01H09H.0AH0FH)。并運行之,檢查記錄結果。(1)分析3500H為偏移地址,對應的段基址采用默認的DS當前值; 程序中,如果不涉及到堆

26、棧,則堆棧段可省略。(2)實驗程序DATA SEGMENT ORG 3500H ;設定起始偏移地址,如果沒有該語句,默認的偏移地址為0000HMEM1 DB 16 DUP(?)DATA ENDSCODE SEGMENT ;定義代碼段 ASSUME CS:CODE,DS:DATASTART: MOV AX, DATAMOV DS,AXMOV DI,3500H ;程序開始設數(shù)據(jù)區(qū)首址 MOV CX,0010H ;字節(jié)數(shù)送入CX中MOV AH, 00H ;SAHF ; 清標志寄存器指令MOV AL, 00HA1:MOV DI,AL ;寫入一字節(jié)INC DI ;修改地址指針I(yè)NC AL ;修改數(shù)據(jù)LO

27、OP A1;未填完轉移CODE ENDS ;代碼段結束 END START ;程序結束2、如果1-1題建立的數(shù)據(jù)為BCD碼表示的十進制數(shù)據(jù)(即建立的數(shù)據(jù)為00H,01H09H,10H15H),修改上述程序并調(diào)試運行,檢查記錄結果。提示:BCD運算,是二進制編碼的十進制運算,使用指令ADD和DAA或INC和DAA共同完成,僅能使用AL進行運算。例如: 15+28進行運算,編程如下:MOV AL,15H ;15H是15的BCD碼表示ADD AL,28H ;28H是28的BCD碼表示,這里完成15H+28H=3DH運算 DAA ;將AL中的結果3DH調(diào)整為BCD碼,結果為43H3、編程完成的求和運算

28、。調(diào)試運行程序,并記錄運算結果。4、將內(nèi)存3500H單元開始存放的09共10個字節(jié)數(shù)傳遞到3600H單元開始的數(shù)據(jù)區(qū)中(可分同一段內(nèi)傳送和段間專送)。提示:該程序應該編寫數(shù)據(jù)段,從3500H開始存放09共10個數(shù);從3600定義10個字節(jié)單元,準備接收數(shù)據(jù)。數(shù)據(jù)段定義如下:DATA SEGMENT ORG 3500HMEM1 DB 0,1,2,3,4,5,6,7,8,9 ORG 3600HMEM2 DB 10 DUP(?)DATA ENDS思考題:(1)如果上述數(shù)據(jù)段定義中沒有ORG語句,則從什么內(nèi)存地址開始存放數(shù)據(jù)?(2)如果采用字數(shù)據(jù)傳送,請修改程序,并調(diào)試運行程序,記錄運行結果。(3)如

29、果采用串傳送指令(MOVSB,MOVSW),請修改程序,并調(diào)試運行程序,記錄運行結果。提示:如果使用MOVSB,MOVSW指令,要將原始數(shù)據(jù)串的段基地址放入DS寄存器,接收數(shù)據(jù)的目的串段基地址放入ES寄存器,可以使DS與ES設置成同一個段基址(即邏輯段重疊);也可以設置成不同邏輯段,即數(shù)據(jù)段和附加數(shù)據(jù)段。4.1.3 實驗步驟以實驗內(nèi)容1為例實驗步驟如下。實驗內(nèi)容2、3、4請自行依照實驗步驟完成調(diào)試并記錄實驗結果。第1步 輸入源程序打開WINDOWS環(huán)境下的匯編開發(fā)環(huán)境,輸入源程序。在桌面上雙擊快捷方式圖標“Masm for Windows 集成實驗環(huán)境”。出現(xiàn)下面界面,其中右側是源程序模板,如

30、圖2-1:按提示輸入編寫好的源程序。圖2-1 匯編源程序模板圖2-1 說明:在右側窗口給出了段結構模板,根據(jù)模板輸入源程序。模板中的段名可以自己修改定義,沒有涉及到的段可省略不寫。輸入?yún)R編語言源程序后,保存程序(規(guī)定擴展名為.ASM),使用ALT+X返回集成軟件環(huán)境。輸入源程序后,如圖2-2所示。圖2-2 輸入源程序后界面第2步:匯編 編譯/匯編成目標文件,點擊運行菜單下“編譯成目標文件(OBJ)”,等待系統(tǒng)匯編,匯編成功后,匯編信息顯示于屏幕下面的窗口中,顯示編譯成功。如圖2-3所示。則可進行第3步。如果顯示錯誤提示信息,則返回第1步修改源程序后在匯編,直到無錯誤為止。圖2-3 編譯/匯編命

31、令第3步:連接連接生成可執(zhí)行文件。點擊運行菜單下“生成可執(zhí)行文件(EXE)”,等待系統(tǒng)對匯編生成的.obj文件進行連接,連接成功后,生成相應的可執(zhí)行文件(.EXE),信息顯示于屏幕下方的窗口上,如圖2-4所示。如果連接成功,顯示生成*.EXE文件成功,進行下一步DEBUG調(diào)試。否則,返回第1步,修改源程序,再匯編、連接,直到無錯誤信息為止。圖2-4 連接命令及連接成功后的信息顯示第4步:在DEBUG調(diào)試環(huán)境下進行程序的調(diào)試過程通過DEBUG調(diào)試可以檢查程序每一條指令及程序執(zhí)行結果,以便查錯和糾錯。單擊運行菜單下的“DEBUG調(diào)試”命令,則進入DEBUG調(diào)試環(huán)境,并將上述生成的可執(zhí)行文件自動裝入

32、內(nèi)存。如圖2-5所示。圖 2-5 debug 調(diào)試環(huán)境窗口(1)反匯編首先要確定你裝入的程序在內(nèi)存的位置,可通過反匯編來確定。反匯編是顯示裝入內(nèi)存的匯編語言程序及其機器指令在內(nèi)存的情況,在DEBUG命令提示符“-”下鍵入U并回車,操作過程如下。-U 回車 ;從當前IP指令指針開始反匯編。即剛裝入內(nèi)存的指令開始反匯編;或者-U 0000回車;從起始偏移地址0000H開始反匯編,即剛裝入內(nèi)存的指令開始反匯編。上述兩種格式的命令功能一樣,反匯編結果如圖2-6所示。-u0EB2:0000 B8610B MOV AX,0B610EB2:0003 8ED8 MOV DS,AX0EB2:0005 BF003

33、5 MOV DI,35000EB2:0008 B91000 MOV CX,00100EB2:000B B400 MOV AH,000EB2:000D 9E SAHF0EB2:000E B000 MOV AL,000EB2:0010 8805 MOV DI,AL0EB2:0012 47 INC DI0EB2:0013 FEC0 INC AL0EB2:0015 E2F9 LOOP 00100EB2:0017 B44C MOV AH,4C0EB2:0019 CD21 INT 210EB2:001B 67 DB 670EB2:001C 7261 JB 007F0EB2:001E 6D DB 6D0EB

34、2:001F 2E CS:0EB2:0020 0D0A0D OR AX,0D0A-圖2-6 反匯編結果圖2-6說明:v 鍵入U命令后,屏幕顯示剛裝入的匯編程序;v 當源程序較長時,再次鍵入 U并回車,繼續(xù)顯示后面的程序,直到屏幕上出現(xiàn)該調(diào)試程序的結尾語句,例如上述的INT 21,其后的語句不是本程序的;v 在反匯編出來的程序中,符號地址已經(jīng)用當前內(nèi)存的實際地址表示,段寄存器已經(jīng)裝入了具體的段基址;v 數(shù)據(jù)和地址全部用十六進制表示,省略H不顯示;v 第1、2列,為程序裝入內(nèi)存所在的物理地址,用邏輯地址形式表示,即 段基地址:偏移地址。注意:不同計算機的軟硬件環(huán)境不同,裝入內(nèi)存的物理地址可能會不同

35、;v 第3列,為匯編語言指令語句對應的機器代碼,4、5列為其助記符指令,但所有的符號都用實際地址或值表示;v 第110行為你所編寫的程序。注意:你自己程序的結束語句:1B3C:0017 B44C MOV AH,4C1B3C:0019 CD21 INT 21該指令之后的指令,為內(nèi)存駐留的其他內(nèi)容,與你的程序沒有關系。(2)運行程序 確定你的程序在內(nèi)存中的位置后,就可以運行程序了。運行程序可以用三種方式:單步運行、設斷點運行、連續(xù)運行等方式,具體操作如下。a.單步運行單步運行是每運行一條指令后顯示當前所有寄存器的內(nèi)容及下一條待執(zhí)行指令。在“-”提示符下鍵入T=0000并回車,表示從偏移地址0000

36、H開始執(zhí)行一條語句。屏幕顯示CPU所有寄存器的內(nèi)容,你僅查看與你程序有關寄存器的結果,在這里,第一條指令的結果為:AX=0B61H,屏幕顯示結果如圖2-7所示。繼續(xù)執(zhí)行下一條指令,在“-”提示符下鍵入 T 并回車,再執(zhí)行一條指令;反復鍵入T命令,就可一步一步地運行,直至程序最后一條語句為止。如圖2-8所示。-t=0000AX=0B61 BX=0000 CX=352B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B51 ES=0B51 SS=0B61 CS=0EB2 IP=0003 NV UP EI PL NZ NA PO NC0EB2:0003 8ED

37、8 MOV DS,AX-圖 2-7單步調(diào)試-t=0000AX=0B61 BX=0000 CX=352B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B51 ES=0B51 SS=0B61 CS=0EB2 IP=0003 NV UP EI PL NZ NA PO NC0EB2:0003 8ED8 MOV DS,AX-tAX=0B61 BX=0000 CX=352B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B61 ES=0B51 SS=0B61 CS=0EB2 IP=0005 NV UP EI PL NZ NA

38、 PO NC0EB2:0005 BF0035 MOV DI,3500-tAX=0B61 BX=0000 CX=352B DX=0000 SP=0000 BP=0000 SI=0000 DI=3500DS=0B61 ES=0B51 SS=0B61 CS=0EB2 IP=0008 NV UP EI PL NZ NA PO NC0EB2:0008 B91000 MOV CX,0010-tAX=0B61 BX=0000 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=3500DS=0B61 ES=0B51 SS=0B61 CS=0EB2 IP=000B NV UP

39、 EI PL NZ NA PO NC0EB2:000B B400 MOV AH,00-圖 2-8反復單步調(diào)試b連續(xù)運行在“-”提示符下鍵入G=0000V0017并回車(系統(tǒng)默認段基址CS情況下,可不寫段基址),該命令表示從偏移地址0000開始連續(xù)執(zhí)行到0017結束。屏幕顯示如圖2-9所示。 -g=0000 0017AX=0010 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=3510DS=0B61 ES=0B51 SS=0B61 CS=0EB2 IP=0017 NV UP EI PL NZ AC PO NC0EB2:0017 B44C M

40、OV AH,4C-圖 2-9連續(xù)執(zhí)行一段程序圖2-9顯示了執(zhí)行到0016H,停止在0017H時CPU各寄存器的值,最后一行顯示暫停執(zhí)行的語句。(3)內(nèi)存單元內(nèi)容顯示 程序結束后,使用D命令可以查看某內(nèi)存區(qū)域的內(nèi)容。在DEBUG系統(tǒng)提示符“-”下鍵入D DS:3500并回車可查看0B61 :3500H單元開始的內(nèi)存單元數(shù)據(jù)。其中0B61是DS的內(nèi)容,在命令中也可以直接輸入數(shù)據(jù)段基址值,3500是DI的內(nèi)容。內(nèi)存內(nèi)容顯示時,每行16個字節(jié),用16進制表示,前8個字節(jié)和后8個字節(jié)用“-”區(qū)分。圖 2-10所示,其中0B61:3500350F是本程序運行結果。-d ds:35000B61:3500 0

41、0 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F .0B61:3510 B8 61 0B 8E D8 BF 00 35-B9 10 00 B4 00 9E B0 00 .a.5.0B61:3520 88 05 47 FE C0 E2 F9 B4-4C CD 21 67 72 61 6D 2E .G.L.!gram.0B61:3530 0D 0A 0D 0A 47 4F 54 4F-20 6C 61 62 65 6C 0D 0A .GOTO label.0B61:3540 0D 0A 8A 20 20 6C 61 62-65 6C 20 20 20 5

42、3 70 65 . label Spe0B61:3550 63 69 66 69 65 73 20 61-20 74 65 78 74 20 73 74 cifies a text st0B61:3560 72 69 6E 67 20 75 73 65-64 20 69 6E 20 74 68 65 ring used in the0B61:3570 20 62 61 74 63 68 20 70-72 6F 67 72 61 6D 20 61 batch program a-圖 2-10 內(nèi)存單元顯示(4)內(nèi)存單元內(nèi)容的修改 若要修改內(nèi)存單元內(nèi)容,使用E命令??蛇M行如下操作,例如,將內(nèi)存35

43、003507單元的內(nèi)容修改為FFH,在DEBUG系統(tǒng)提示符“-”下鍵入E DS:3500并回車,如圖2-11所示。修改過程:首先顯示3500單元原來內(nèi)容00.,鍵入新內(nèi)容FF,按空格鍵顯示下一單元(3501單元)內(nèi)容00.,鍵入新內(nèi)容FF,如此往復。若要推出修改,按回車鍵。用D命令查看已修改內(nèi)存單元內(nèi)容,看看內(nèi)容是否已有變化。屏幕顯示如圖2-11所示。-d ds:35000B61:3500 00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F .0B61:3510 B8 61 0B 8E D8 BF 00 35-B9 10 00 B4 00 9E B0

44、 00 .a.5.0B61:3520 88 05 47 FE C0 E2 F9 B4-4C CD 21 67 72 61 6D 2E .G.L.!gram.0B61:3530 0D 0A 0D 0A 47 4F 54 4F-20 6C 61 62 65 6C 0D 0A .GOTO label.0B61:3540 0D 0A 8A 20 20 6C 61 62-65 6C 20 20 20 53 70 65 . label Spe0B61:3550 63 69 66 69 65 73 20 61-20 74 65 78 74 20 73 74 cifies a text st0B61:3560

45、 72 69 6E 67 20 75 73 65-64 20 69 6E 20 74 68 65 ring used in the0B61:3570 20 62 61 74 63 68 20 70-72 6F 67 72 61 6D 20 61 batch program a-e ds:35000B61:3500 00.FF 01.FF 02.FF 03.FF 04.FF 05.FF 06.FF 07.FF-d ds:35000B61:3500 FF FF FF FF FF FF FF FF-08 09 0A 0B 0C 0D 0E 0F .0B61:3510 B8 61 0B 8E D8 B

46、F 00 35-B9 10 00 B4 00 9E B0 00 .a.5.0B61:3520 88 05 47 FE C0 E2 F9 B4-4C CD 21 67 72 61 6D 2E .G.L.!gram.0B61:3530 0D 0A 0D 0A 47 4F 54 4F-20 6C 61 62 65 6C 0D 0A .GOTO label.0B61:3540 0D 0A 8A 20 20 6C 61 62-65 6C 20 20 20 53 70 65 . label Spe0B61:3550 63 69 66 69 65 73 20 61-20 74 65 78 74 20 73

47、74 cifies a text st0B61:3560 72 69 6E 67 20 75 73 65-64 20 69 6E 20 74 68 65 ring used in the0B61:3570 20 62 61 74 63 68 20 70-72 6F 67 72 61 6D 20 61 batch program a-圖 2-11 E命令修改內(nèi)存單元內(nèi)容(5)程序運行結束,請分析和記錄運行結果。2.2 順序程序設計實驗2.2.1 實驗目的 掌握匯編語言順序結構源程序的編寫,掌握調(diào)試過程及實驗結果分析。2.2.2 實驗內(nèi)容 1、自內(nèi)存TABLE開始連續(xù)16個單元中存放著015的平方

48、值(即平方表),查表求任意數(shù)X(0£ X £15)的平方值,并存入內(nèi)存RESULT單元。請編寫程序,調(diào)試運行程序并記錄結果。2、編程完成表達式計算 Z=3x+4y-4,其中x、y為字節(jié)單元,z為字單元。調(diào)試運行程序并記錄結果。(1)提示:如果用字節(jié)乘法指令,例如可定義數(shù)據(jù)段及乘法語句如下:DATA SEGMENTX DB 4Y DB 5Z DW ?DATA ENDS.MOV AL,XMOV BL,3MUL BL;結果為:AX=AL*BL,AX存放結果(2)如果x、y為字單元,z為雙字單元,,請修改程序,調(diào)試運行程序并記錄結果。3、現(xiàn)有兩個多字節(jié)壓縮BCD碼數(shù)98765432

49、19H和1234567891H,它們分別按低位字節(jié)在前高位字節(jié)在后存放在內(nèi)存A1和A2開始的單元中,分別計算它們的和與差,并將結果分別存放在內(nèi)存SUM和DEF開始的單元中。2.2.3 實驗步驟1、根據(jù)實驗內(nèi)容,編寫匯編語言源程序;2、上機調(diào)試和運行程序;3、分析并記錄運行結果。2.3 分支程序設計實驗2.3.1 實驗目的 掌握匯編語言分支結構源程序的編寫,掌握調(diào)試過程及實驗結果分析。2.3.2 實驗內(nèi)容 1、編寫程序,計算下面函數(shù)的值。調(diào)試運行程序并記錄運行結果。2、在在內(nèi)存DATA1開始連續(xù)100個單元中存放100位同學某門課的考試成績(0100),請編寫程序統(tǒng)計大于等于90,8089分,7

50、079分,6069分,小于60分的各分數(shù)段學生人數(shù),分別存放在內(nèi)存同一數(shù)據(jù)段從DATA2開始的5個單元中。調(diào)試運行程序并記錄運行結果。提示:先建一個數(shù)據(jù)段存放100位學生的考試成績,并預留5個單元用來存放各分數(shù)段學生人數(shù);取每位學生成績放入AL并依次與90、80、70、60進行比較。因是無符號數(shù),所以可用CF標志作為分支條件,相應指令為JC;根據(jù)每次比較確定成績所在范圍,用INC指令將存放相應結果單元的內(nèi)容加1;因為學生和成績都沒有超過一個字節(jié)所能表示的范圍,故所定義的變量均為字節(jié)類型;因每次只能處理一個學生的成績,所以要通過一個循環(huán)來處理100位學生的成績。2.3.3 實驗步驟1、根據(jù)實驗內(nèi)

51、容,編寫匯編語言源程序;2、上機調(diào)試和運行程序;3、分析并記錄運行結果。2.4 循環(huán)程序設計實驗2.4.1 實驗目的 掌握匯編語言循環(huán)結構源程序的編寫,掌握調(diào)試過程及實驗結果分析。2.4.2 實驗內(nèi)容 1、從內(nèi)存BUFFER單元開始存放若干個字節(jié)數(shù)據(jù),求其中負數(shù)的個數(shù)并存入MDAT單元中。請編寫程序,調(diào)試運行程序并記錄結果。2、從內(nèi)存BUFFER單元開始存放若干個字數(shù)據(jù),求出其中正數(shù)的個數(shù)并存入PDAT單元中。請編寫程序,調(diào)試運行程序并記錄結果。3、求一批無符號字節(jié)數(shù)的最小值,放入MDATA單元。請編寫程序,調(diào)試運行程序并記錄結果。4、求一批有符號字數(shù)據(jù)中的最大值和最小值,分別存入MDATA單

52、元和NDATA單元。請編寫程序,調(diào)試運行程序并記錄結果。2.4.3 實驗步驟1、根據(jù)實驗內(nèi)容,編寫匯編語言源程序;2、上機調(diào)試和運行程序;3、分析并記錄運行結果。2.5 子程序設計實驗2.5.1 實驗目的 掌握匯編語言主、子結構源程序的編寫,掌握調(diào)試過程及實驗結果分析。2.5.2 實驗內(nèi)容 1、某程序中需要對N個元素的數(shù)組求和。完成數(shù)組N個元素求和設計為屬性是NEAR的過程。且過程與主程序在同一代碼段。請編寫主子程序,調(diào)試運行程序并記錄運行結果。提示:主程序中將入口參數(shù)直接定義到一個數(shù)據(jù)段里,子程序從該數(shù)據(jù)段內(nèi)存單元讀取入口參數(shù),子程序執(zhí)行結果(返回參數(shù))直接寫入內(nèi)存單元。2.5.3 實驗步驟

53、1、根據(jù)實驗內(nèi)容,編寫匯編語言源程序;2、上機調(diào)試和運行程序;3、分析并記錄運行結果。2.6 字符串處理程序實驗2.6.1 實驗目的 掌握匯編語言字符串處理源程序的編寫,掌握調(diào)試過程及實驗結果分析。2.6.2 實驗內(nèi)容 1、已知從DS:2200H,ES:3200H單元起分別存放20個ASCII碼字符。找出這兩個字符串中第一個不同字符的位置(段內(nèi)偏地址),并放入DS:22A0H開始的連續(xù)兩個單元中。要求:(1)使用比較指令(CMP)實現(xiàn);(2)使用數(shù)據(jù)串比較指令(CMPSB)實現(xiàn)。請別寫程序,調(diào)試運行程序并記錄結果。2、在數(shù)據(jù)區(qū)2000H開始100字節(jié)范圍內(nèi),查找字符'A',若找到,則將偏移地址送入DX,沒有找到,則-1送DX。請

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論