PC匯編語言實(shí)驗(yàn)報(bào)告_第1頁
PC匯編語言實(shí)驗(yàn)報(bào)告_第2頁
PC匯編語言實(shí)驗(yàn)報(bào)告_第3頁
PC匯編語言實(shí)驗(yàn)報(bào)告_第4頁
PC匯編語言實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)課程: IBM-PC匯編語言程序設(shè)計(jì) 學(xué)生姓名: 學(xué) 號: 專業(yè)班級: 2011年12月15日匯編語言實(shí)驗(yàn)指導(dǎo)前 言匯編語言是計(jì)算機(jī)專業(yè)的一門重要的專業(yè)基礎(chǔ)課,主要介紹匯編語言程序設(shè)計(jì)的基本原理和方法。匯編語言是一門理論性和實(shí)踐性較強(qiáng)的課程,輔助課堂教學(xué)的實(shí)驗(yàn)有助于幫助學(xué)生理解匯編語言的基本原理,鍛煉學(xué)生的動手能力,提高學(xué)生的綜合應(yīng)用知識的能力。本實(shí)驗(yàn)指導(dǎo)按照匯編語言程序設(shè)計(jì)的教學(xué)大綱要求編寫。依據(jù)循序漸進(jìn)、由淺入深的規(guī)律,通過實(shí)例復(fù)習(xí)鞏固所學(xué)知識,借助實(shí)例開展匯編語言程序設(shè)計(jì)。通過這種既具有構(gòu)造性又具有創(chuàng)造性的學(xué)習(xí)活動,更便于初學(xué)者的理解和掌握,通過上機(jī)實(shí)驗(yàn),并在實(shí)驗(yàn)后完成

2、實(shí)驗(yàn)報(bào)告,又能進(jìn)一步加深和拓寬所學(xué)知識。為了幫助老師和學(xué)生開展實(shí)驗(yàn),我們特編了這本實(shí)驗(yàn)指導(dǎo),希望能對我校的匯編語言教學(xué)工作有所幫助。本實(shí)驗(yàn)指導(dǎo)所有實(shí)例均在PC機(jī)上調(diào)試通過。目錄(1)利用DEBUG調(diào)試匯編語言程序段(2)初級程序的編寫與調(diào)試實(shí)驗(yàn)(一)(3)初級程序的編寫與調(diào)試實(shí)驗(yàn)(二)(4)匯編語言程序上機(jī)過程(5)分支程序?qū)嶒?yàn)(6)循環(huán)程序?qū)嶒?yàn)(7)子程序?qū)嶒?yàn)實(shí)驗(yàn)1 利用DEBUG調(diào)試匯編語言程序段一實(shí)驗(yàn)?zāi)康?熟悉DEBUG有關(guān)命令的使用方法;2利用DEBUG掌握有關(guān)指令的功能;3利用DEBUG運(yùn)行簡單的程序段。二實(shí)驗(yàn)內(nèi)容1進(jìn)入和退出DEBUG程序;1)開始運(yùn)行,輸入cmd,點(diǎn)確定進(jìn)入命令窗

3、口2)在命令窗口中輸入dubug進(jìn)入debug程序3)進(jìn)入debug窗口后,輸入q命令退出debug2學(xué)會DEBUG中的1)D命令(顯示內(nèi)存數(shù)據(jù)D 段地址:偏移地址)例1:-D100 ;顯示DS段, 0100開始的128個(gè)字節(jié)內(nèi)容 說明: 指定要顯示其內(nèi)容的內(nèi)存區(qū)域的起始和結(jié)束地址,或起始地址和長度。 D SEGREG起始地址 L 長度;顯示SEGREG段中(缺省內(nèi)默認(rèn)為DS), 以起始地址 (缺省內(nèi)為當(dāng)前的偏移地址),開始的L 長度 (缺省內(nèi)默認(rèn)為128)個(gè)字節(jié)的內(nèi)容. D SEGREG段地址:偏移地址 ;顯示SEGREG段中(缺省內(nèi)默認(rèn)為DS), 段地址:偏移地址 開始的L 長度 (缺省內(nèi)

4、默認(rèn)為128)個(gè)字節(jié)內(nèi)容D;默認(rèn)段寄存器為DS,當(dāng)前偏移地址(剛進(jìn)入debug程序偏移地址為0100H)D DS:100 ;顯示DS段, 0100H開始的128個(gè)字節(jié)內(nèi)容D CS:200 ;顯示CS段, 0200H開始的128個(gè)字節(jié)內(nèi)容D 200:100 ;顯示DS段, 0200:0100H開始的128個(gè)字節(jié)內(nèi)容D 200 ;顯示DS段, 0200H開始的128個(gè)字節(jié)內(nèi)容D 100 L 10 ;顯示DS段, 100H開始的100H個(gè)字節(jié)內(nèi)容2)E命令(修改指定內(nèi)存)例1:-E100 41 42 43 44 48 47 46 45 -D 100,L08 結(jié)果:08F1:0100 41 42 43

5、 44 48 47 46 45例2: -E 100: 08F1:0100 76 42 :42是操作員鍵入此命令是將原100號內(nèi)存內(nèi)容76修改為42,用D命令可察看。 E 地址;從指定地址開始,修改(或連續(xù)修改)存儲單元內(nèi)容。DEBUG首先顯示指定單元內(nèi)容,如要修改,可輸入新數(shù)據(jù);空格鍵顯示下一個(gè)單元內(nèi)容并可修改,減號鍵顯示上一個(gè)單元內(nèi)容并可修改;如不修改,可直接按空格鍵或減號鍵;回車鍵結(jié)束命令。 E 地址 數(shù)據(jù)表;從指定的地址開始用數(shù)據(jù)表給定的數(shù)據(jù)修改存儲單元。E DS:100 F3 AB 8D ; 把DS段中0100H開始的四個(gè)字節(jié)修改為F3 AB(A和B的ASCII碼) 8D也可以按下面的

6、方式實(shí)現(xiàn)3)R命令(顯示當(dāng)前寄存器的內(nèi)容)顯示修改寄存器命令RR;顯示所有寄存器和標(biāo)志位狀態(tài);顯示當(dāng)前CS:IP指向的指令。顯示標(biāo)志時(shí)使用的符號:標(biāo)志標(biāo)志=1標(biāo)志=0 OFOVNV DFDNUP IFEIDI SFNGPL ZFZRNZ AFACNA PFPEPO CFCYNC4)T命令(設(shè)置陷井,單步執(zhí)行) T;從當(dāng)前IP開始執(zhí)行一條指令。 T 數(shù)值;從當(dāng)前IP開始執(zhí)行多條指令, 數(shù)值:執(zhí)行的指令條數(shù)。 T =地址;從給定的地址執(zhí)行一條指令 T =地址數(shù)值;從給定的地址執(zhí)行多條指令, 數(shù)值:執(zhí)行的指令條數(shù).T ; 從當(dāng)前IP開始執(zhí)行一條指令T5 ; 從當(dāng)前IP開始執(zhí)行5條指令T=1005 ;

7、 從當(dāng)前0100H開始執(zhí)行5條指令5)A命令(將指令直接匯編成機(jī)器碼輸入到內(nèi)存中。)匯編命令A(yù)A 地址;從指定的地址開始輸入符號指令;如省略地址,則接著上一個(gè)A命令的最后一個(gè)單元開始;若第一次使用A命令省略地址,則從當(dāng)前CS:IP開始(通常是CS:100)。注釋:在DEBUG下編寫簡單程序即使用A命令。每條指令后要按回車。不輸入指令按回車,或按Ctrl+C結(jié)束匯編。支持所有8086符號硬指令,偽指令只支持DB、DW,不支持各類符號名。使用A命令在0100H開始輸入指令mov ax, 10 inc cx mov bl, al單步執(zhí)行上述指令6)G命令等的使用(執(zhí)行A命中輸入的匯編指令)運(yùn)行程序命

8、令G G;從CS:IP指向的指令開始執(zhí)行程序,直到程序結(jié)束或遇到INT 3。 G=地址;從指定地址開始執(zhí)行程序,直到程序結(jié)束或遇到INT 3。 G 斷點(diǎn)1,斷點(diǎn)2,斷點(diǎn)10;從CS:IP指向的指令開始執(zhí)行程序,直到遇到斷點(diǎn)。G=地址斷點(diǎn)1,斷點(diǎn)2,斷點(diǎn)10G ;從CS:IP指向的指令開始執(zhí)行程序。G=100 ;從指定地址開始執(zhí)行程序。G=100 105 110 120使用A命令在0100H開始輸入指令mov ax, 10 inc cx mov bl, al int 3然后使用g命令執(zhí)行上面的例子設(shè)斷點(diǎn)在100H處然后用T命令單步執(zhí)行3.用DEBUG,驗(yàn)證乘法、除法、加法、減法、帶進(jìn)位加、帶借位

9、減、堆棧操作指令、串操作指令的功能。三實(shí)驗(yàn)要求仔細(xì)閱讀有關(guān)DEBUG命令的內(nèi)容,對有關(guān)命令,要求事先準(zhǔn)備好使用的例子;四實(shí)驗(yàn)環(huán)境PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)MASM.EXE,LINK.EXE,DEBUG.COM或宏匯編集成環(huán)境五實(shí)驗(yàn)步驟用DEBUG驗(yàn)證乘法、除法、加法、減法帶進(jìn)位加、帶借位減、堆棧操作指令、串操作指令的功能:1. 驗(yàn)證加法和帶進(jìn)位加,使用A命令,在DEBUG中鍵入以下代碼:mov ax,f111mov bx,f222mov cx,2mov dx,3add ax,bxadc cx,dx使用G命令查看結(jié)果2. 驗(yàn)證減法和帶借位減法,使用A命令,在DEBUG中鍵

10、入以下代碼:mov ax,2mov bx,3mov cx,5mov dx,2sub ax,bxsbb cx,dx使用G命令查看結(jié)果3. 驗(yàn)證乘法和除法,使用A命令,在DEBUG中鍵入以下代碼:乘法:mov al,b4mov bl,11mul bl使用G命令查看結(jié)果除法:mov ax,400mov bl,b4div bl使用G命令查看結(jié)果4. 驗(yàn)證堆棧操作指令,使用A命令,在DEBUG中鍵入以下代碼:mov ax,1111push axmov ax,2222使用G命令查看結(jié)果后在使用A命令,在DEBUG中鍵入以下代碼:pop ax使用G命令查看結(jié)果5. 驗(yàn)證串操作指令,使用A命令,在DEBUG中

11、鍵入以下代碼:org 1000db hellomov si,1000mov di,1500mov cx,5cldrep movsb使用G命令查看結(jié)果六實(shí)驗(yàn)報(bào)告要求1如何啟動和退出DEBUG程序;2整理每個(gè)DEBUG命令使用的方法,實(shí)際示例及執(zhí)行結(jié)果。七思考題啟動DEBUG后,要裝入某一個(gè).EXE文件,應(yīng)通過什么方法實(shí)現(xiàn)?答:進(jìn)入DOS,輸入DEBUG xxx.exe,其中xxx為文件名。實(shí)驗(yàn)2 初級程序的編寫與調(diào)試實(shí)驗(yàn)(一)一實(shí)驗(yàn)?zāi)康?進(jìn)一步熟悉DEBUG命令;2掌握數(shù)據(jù)在內(nèi)存中的存放方式和內(nèi)存操作數(shù)的幾種尋址方式,段寄存器和物理地址計(jì)算; 3熟悉數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯指令、數(shù)據(jù)串傳

12、送程序和數(shù)據(jù)串傳送指令MOVS、STOS及重復(fù)前輟REP;4掌握簡單的匯編語言程序編寫與調(diào)試。二實(shí)驗(yàn)內(nèi)容1 內(nèi)存操作數(shù)及各種尋址方式使用;2 求累加和程序;3 多字節(jié)加法程序;4 數(shù)據(jù)串搬家程序;5 段寄存器概念及字符串傳送指令練習(xí)。三實(shí)驗(yàn)要求1仔細(xì)閱讀有關(guān)DEBUG命令的內(nèi)容,對有關(guān)命令,要求事先準(zhǔn)備好使用的例子;2閱讀數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯指令、數(shù)據(jù)串傳送程序和數(shù)據(jù)串傳送指令MOVS、STOS及重復(fù)前輟REP的內(nèi)容;3用DEBUG的有關(guān)命令調(diào)試本實(shí)驗(yàn)中的求累加和程序、多字節(jié)加法程序、數(shù)據(jù)串搬家程序段。四實(shí)驗(yàn)環(huán)境PC微機(jī);DOS操作系統(tǒng)或 Windows 操作系統(tǒng);MASM.EXE

13、,LINK.EXE,DEBUG.COM或宏匯編集成環(huán)境。五實(shí)驗(yàn)步驟1內(nèi)存操作數(shù)及各種尋址方式使用MOVAX,1234 MOV1000,AXMOVBX,1002MOVBYTE PTRBX,20MOVDL,39INCBXMOVBX,DLDECDLMOVSI,3MOVBX+SI,DLMOVBX+SI+1,DLMOVWORD PTRBX+SI+2,2846步驟: (1) 用A命令鍵入上述程序,并用T命令逐條運(yùn)行。(2) 每運(yùn)行一條有關(guān)內(nèi)存操作數(shù)的指令,要用D命令檢查并記錄有關(guān)內(nèi)存單元的內(nèi)容并注明是什么尋址方式。注意D命令顯示結(jié)果中右邊的ASCII字符及雙字節(jié)數(shù)存放法。 2求累加和程序:程序:MOVBX

14、,1000MOVCX,10SUBAX,AXLOP: ADDAL,BXADC AH,0INCBXJ:LOOPLOPINT3步驟:(1)用A命令將程序鍵入到100H開始的內(nèi)存中,在鍵入時(shí)記下標(biāo)號LOP和J的實(shí)際地址,在鍵入LOOP指令時(shí)LOP用實(shí)際地址值代替;(2)用命令N AA 將此程序命名為文件AA(文件名可任取);(3)用R命令將BX:CX改為程序長度值(即最后一條指令后面的地址減去開始地址;(4)用命令W 100將此程序存到AA命名的磁盤文件中;(5)用命令Q退出DEBUG;(6)用命令DEBUG AA再次調(diào)入DEBUG和文件AA,可用U命令檢查調(diào)入程序;若調(diào)入DEBUG時(shí)忘了加AA文件名

15、,可用N命令和L命令將文件調(diào)入;(7)用E命令在內(nèi)存地址1000H處鍵入16個(gè)數(shù)字;(8)用命令G=100 J(J用實(shí)際地址代替),使程序運(yùn)行并停在斷點(diǎn)J上,檢查AX,BX的值是否符合你的預(yù)計(jì)值;(9)用T命令運(yùn)行一步,觀察程序方向(IP值)和CX值是否與你的估計(jì)一樣,若不一樣,檢查程序是否有錯(cuò);(10)重復(fù)G、J與T,再檢查AX是否正確;(11)用G命令使程序運(yùn)行到結(jié)束,檢查AX值是否正確。3多字節(jié)加法程序程序:MOVDI,1000MOVCX,8MOVSI,2000CLCLOP: MOVAL,SIADCDI,ALINCSIINCDILOOPLOPINT20步驟:(1) 用命令鍵入此程序(2)

16、 用E命令在1000H開始處鍵入一個(gè)8字節(jié)被加數(shù),在2000H開始處鍵入一個(gè)8字節(jié)加數(shù),均為低字節(jié)在前面。分步計(jì)算并得到結(jié)果,如下圖所示:4數(shù)據(jù)串搬家程序(1)用A命令鍵入下列程序:MOVSI,1000MOVDI,2000MOVCX,0FLOP:MOVAL,SIMOVDI,ALINCSIINCDILOOPLOPINT20(2)用A命令DB偽指令在1000H鍵入下列字符串:IBM_PC COMPUTER(3)用G命令運(yùn)行此程序,并用D命令檢查目的地址處的字符與源串a(chǎn)是否一致。5段寄存器概念及字符串傳送指令練習(xí)(1) 用A命令鍵入下列程序:MOVSI,0MOVDI,0MOVAX,1000MOVDS

17、,AXMOVAX,1500MOVES,AXMOVCX,0FCLDREPMOVSBINT20(2) 用A命令DB偽指令在1000:0000處鍵入字符串IBM_PC COMPUTER,并用D命檢查之(3) 用D命令檢查0F00:1000處內(nèi)容,看是否一樣。為什么?(4) 用G命令運(yùn)行此程序,檢查目的地址1500:0000處內(nèi)容。并記下DS與ES值。(5) 修改此程序,使ES與DS為同一值,以減少一條指令,而源物理地址和目的物理地址(是多少?)仍和原來一樣。 6自編程序用16位減法指令編一個(gè)32位(4字節(jié))數(shù)減法程序,兩個(gè)源數(shù)及結(jié)果存放地址同多字節(jié)加法程序,調(diào)試并做記錄。六實(shí)驗(yàn)報(bào)告要求1各項(xiàng)實(shí)驗(yàn)記錄

18、;2要求你修改的程序的清單(修改后)和調(diào)試記錄;3自編程序原稿及調(diào)試后修正稿,寫出原稿錯(cuò)在那里。七思考題1MOVBYTE PTRBX,20 MOVWORD PTRBX+SI+2,2846上述指令中BYTE PTR及WORD PTR偽操作不加行不行?試一試。2用G命令運(yùn)行多字節(jié)加法程序,并用D命令檢查其結(jié)果(存放在哪里?),是否正確?3將多字節(jié)加法程序中的INT 20H指令改為INT 3,有何區(qū)別?若這條指令不加,行不行?試一試。4數(shù)據(jù)串搬家程序中的目的地址改為1002H,再運(yùn)行此程序,看能不能把1000H開始的字符串搬到1002H開始的地方去?修改程序以做到這一點(diǎn)。MOVSI,100EMOVD

19、I,1010MOVCX,0FLOP:MOVAL,SIMOVDI,ALDECSIDECDILOOPLOPINT20或者DB IBM_PC COMPUTERMOV SI,100EMOV DI,1010MOV AX,137E MOV ES, AXMOV CX,0FSTDREP MOVSINT 20實(shí)驗(yàn)3 初級程序的編寫與調(diào)試實(shí)驗(yàn)(二)一實(shí)驗(yàn)?zāi)康?掌握無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令;2掌握利用DOS功能調(diào)用INT21H的2號和9號功能進(jìn)行屏幕顯示的方法;3掌握直接向視頻RAM送ASCII碼進(jìn)行屏幕顯示的方法;4掌握屏幕字符顯示程序編寫與調(diào)試。二實(shí)驗(yàn)內(nèi)容1 字符、字符串的屏幕顯示;2 直接向VRAM送AS

20、CII碼顯示字符;3 用字符搜索法確定字符串長度;4 16進(jìn)制數(shù)化ASCII碼的一般方法(顯示內(nèi)存內(nèi)容)。三實(shí)驗(yàn)要求1 仔細(xì)閱讀有關(guān)無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令的內(nèi)容;2 閱讀利用DOS功能調(diào)用INT21H的2號和9號功能進(jìn)行屏幕顯示的內(nèi)容;3閱讀實(shí)驗(yàn)指導(dǎo)書中的字符串屏幕顯示程序、字符屏幕顯示程序、直接向VRAM送ASCII碼顯示字符程序、用字符搜索法確定字符串長度程序、16進(jìn)制數(shù)化ASCII碼的一般方法的程序段,調(diào)試上述程序。四實(shí)驗(yàn)環(huán)境PC微機(jī);DOS操作系統(tǒng)或 Windows 操作系統(tǒng);MASMEXE,LINKEXE,DEBUGCOM或宏匯編集成環(huán)境。五實(shí)驗(yàn)步驟1利用INT 21 0AH號

21、功能調(diào)用顯示字符串。(1)用A命令在100H處鍵入下列程序:MOVAH, 9MOVDX,110INT21INT20(2)用A命令在110H處鍵入下列字符串的ASCII碼:DBThis is a sample!$(3)用N命令和W命令將此程序(包括數(shù)據(jù)區(qū))存入文件名為AACcOM的磁盤文件中。(存入前BX:CX必須置為文件長度值)。(4)用Q命令退出DEBUG。(5)在DOS命令下打AA,運(yùn)行此程序,即在屏幕上顯示This is a sample!字符串,若不出現(xiàn),用DEBUG檢查程序有無錯(cuò)誤。2利用INT 21H 2號功能顯示字符(1)用A命令在100H處鍵入下列程序:XORDL,DLMOV

22、CX,100LOP: MOVAH,2INT21INCDLPUSH CXMOVCX,8DELY: PUSHCXMOVCX,0J: LOOP JPOPCXLOOP DELYPOPCXLOOP LOPINT20(2)用G命令運(yùn)行程序,即在屏幕上依次緩慢的顯示256個(gè)ASCII字符。仔細(xì)觀察每個(gè)字符,和IBM-PC ASCII碼表對照,看07H-0DH處控制字符顯示結(jié)果與表上有何不同?(3)按CTRL+BREAK退出此程序,若一次不行可多做幾次。3直接向VRAM送ASCII碼顯示字符(1)用A命令在100H處鍵入下列程序MOVAX,B000MOVDS,AXXORAL,ALXORBX,BXMOVCX,1

23、00LOP:MOVBX,ALINCBXINCALPUSHCXMOVCX,8DELY:PUSHCXMOVCX,0J: LOOPJPOPCXLOOPDELYPOPCXLOOPLOPINT20(2)用N命令和W命令將此程序存入BB.COM文件中。(一定要先存入!)(3)用G命令運(yùn)行此程序,仔細(xì)觀察每一個(gè)ASCII碼顯示結(jié)果,并和字符表及上一道程序運(yùn)行情況進(jìn)行對照,其控制字符區(qū)(07-0DH)顯示結(jié)果和INT 21H 2號功能調(diào)用有何不同?控制字符在該程序中沒有顯示,在上一個(gè)程序中顯示為笑臉4用字符搜索法確定字符串長度(1)用A命令在100H開始的內(nèi)存處鍵入下列程序JMPSTARTDBThis is

24、the program to measureDBthe length of a string!$START: MOVBX,102MOVAL,24XORCL,CLLOP: CMPAL,BXJZEXITINCBXINCCLJMPLOPEXIT: INT3(2)用G命令運(yùn)行此程序,并檢查CL的統(tǒng)計(jì)長度是否與你自己統(tǒng)計(jì)的實(shí)際長度是否一樣?CL的統(tǒng)計(jì)長度與實(shí)際長度相等,均為35H5用字符搜索法確定字符串長度 (1)用A命令在100H處鍵入下列程序:MOVSI,0MOVBL,10LOP: MOVDL,SIMOVCL,4SHRDL,CLCMPDL,0AJCJ1ADDDL,7J1: ADDDL,30MOVAH

25、,2INT21MOVDL,SIANDDL,0FCMPDL,0AJCJ2ADDDL,7J2: ADDDL,30MOVAH,2INT21MOVDL,20MOVAH,2INT21INCSIDECBLJNZLOPINT20(2)用N,W命令將此程序用CCCOM文件名存入磁盤。(3)用Q命令退出DEBUG。(4)在DOS命令狀態(tài)下直接運(yùn)行CCCOM命令文件,應(yīng)在屏幕上顯示出內(nèi)存從0000H開始的16個(gè)字節(jié)的內(nèi)容,若有錯(cuò)誤,用DEBUG檢查之。(5)自編程序:修改上面程序,使除以16進(jìn)制數(shù)形式顯示內(nèi)存內(nèi)容外,還能在其右邊顯示該16進(jìn)制碼所對應(yīng)的ASCII字符,07-0D的控制字符用代替。答:在DOS下輸入

26、DEBUG CC.COM打開程序,從最后一條指令I(lǐng)NT 20(包括該指令)開始修改,修改方法如下:MOVCX,10MOV SI,0J3:MOV DI,SIMOV AH,2CMP DL,0DJBEJ5J4:INT 21INCSIDEC CXJNZJ3INT 20J5:CMP DL,07JNBJ4MOV DL,2EJMP J4六實(shí)驗(yàn)報(bào)告要求 1、各項(xiàng)實(shí)驗(yàn)記錄及觀察體會。2、自編程序草稿及調(diào)試結(jié)果。七思考題利用INT 21H 顯示和直接向VRAM送ASCII碼顯示方法在顯示結(jié)果上有什么不同?答:利用INT 21H顯示時(shí),07H-0DH的控制符會用笑臉之類的符號顯示;直接向VRAM送ACSII碼時(shí),0

27、7H-0DH的控制符不顯示。實(shí)驗(yàn)4 匯編語言程序上機(jī)過程一實(shí)驗(yàn)?zāi)康氖炀氄莆諈R編語言程序的編輯、調(diào)試和運(yùn)行的過程和方法。了解匯編語言程序的匯編、運(yùn)行環(huán)境。 二實(shí)驗(yàn)內(nèi)容1掌握常用的編輯工具軟件(如WORD、EDIT)、MASM和LINK的使用;2偽指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;3利用的INT 21H的1號功能實(shí)現(xiàn)鍵盤輸入的方法;三實(shí)驗(yàn)要求1仔細(xì)閱讀有關(guān)偽指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的內(nèi)容;2了解利用的INT 21H的1號功能實(shí)現(xiàn)鍵盤輸入的方法,了解.EXE文件和.COM文件的區(qū)別及用INT 21H 4C號功

28、能返回系統(tǒng)的方法;3閱讀下面程序段。四實(shí)驗(yàn)環(huán)境PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)MASM。EXE,LINK。EXE,DEBUG。COM或宏匯編集成環(huán)境五實(shí)驗(yàn)步驟程序:datasegmentmessagedbThis is a sample program of keyboard and displydb0dh,0ah,Please strike the key!,0dh,0ah,$dataendsstacksegmentpara stack stackdb50 dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stacksta

29、rt:movax,datamovds,axmovdx,offset messagemovah,9int21h ;顯示This is a sample program of keyboard and displyagain:movah,1int21h ;等待鍵盤輸入,保存至ALcmpal,1bh ;1bh 字符ESC的ASCIIjeexitcmpal,61h ;61h字符a的ASCIIjc(jb)nd ;小于(CF=1有借位)轉(zhuǎn)向ND原樣顯示cmpal,7ah ;jand ;大于轉(zhuǎn)向ND原樣顯示andal,b ;轉(zhuǎn)化為大寫字母 sub al,20hnd:movdl,almovah,2int21h

30、jmpagainexit:movah,4chint21hcodeendsendstart實(shí)驗(yàn)步驟:1 用用文字編輯工具(記事本或EDIT)將源程序輸入,其擴(kuò)展名為ASM。2 用MASM對源文件進(jìn)行匯編,產(chǎn)生OBJ文件和LST文件。若匯編時(shí)提示有錯(cuò),用文字編輯工具修改源程序后重新匯編,直至通過。3 用TYPE命令顯示1產(chǎn)生的LST文件。4 用LINK將OBJ文件連接成可執(zhí)行的EXE文件。5 在DOS狀態(tài)下運(yùn)行LINK產(chǎn)生的EXE文件。即在屏幕上顯示標(biāo)題并提示你按鍵。每按一鍵在屏幕上顯示二個(gè)相同的字符,但小寫字母被改成大寫。按ESC鍵可返回DOS。若未出現(xiàn)預(yù)期結(jié)果,用DEBUG檢查程序。六實(shí)驗(yàn)報(bào)告

31、要求匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。答:匯編的程序的標(biāo)點(diǎn)符號用得不對,在進(jìn)行匯編時(shí)會出現(xiàn)很多錯(cuò)誤。 只能重新輸入過,不能進(jìn)行復(fù)制、粘貼。七思考題1若在源程序中把INT 21H的H省去,會產(chǎn)生什么現(xiàn)象?修改后代碼的IO.ASM編譯連接均沒有出現(xiàn)什么問題,一切正常,但是最后運(yùn)行IO.EXE時(shí)造成無法輸入輸出,也無法退出返回到DOS狀態(tài)。2.把 INT 21H 4CH號功能改為 INT 20H,行不行?再更改之后,io的編譯連接、輸入輸出等都正常,但是在按下ESC退出時(shí)會出現(xiàn)上述對話框錯(cuò)誤。實(shí)驗(yàn)5 分支程序?qū)嶒?yàn)一實(shí)驗(yàn)?zāi)康? 掌握分支程序的設(shè)計(jì)方法;2 掌握利用DEBUG修改參數(shù)、檢查

32、結(jié)果的方法;3 熟悉匯編語言源程序的編輯、匯編、連接及調(diào)試過程。二實(shí)驗(yàn)內(nèi)容1編寫一個(gè)程序,顯示AL寄存器中的兩位十六進(jìn)制數(shù)2編寫一個(gè)程序,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示“c”;若是回車字符(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。三實(shí)驗(yàn)要求1編寫實(shí)驗(yàn)內(nèi)容要求的兩個(gè)程序;2寫出調(diào)試以上程序,即修改程序參數(shù),檢查結(jié)果的操作方法;3熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。四實(shí)驗(yàn)環(huán)境PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)MASM.EXE,LINK.EXE,DEBUG.COM或宏匯編集成環(huán)境五

33、實(shí)驗(yàn)步驟1 用EDIT或其它編輯軟件,編寫.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。2對其進(jìn)行匯編及連接,產(chǎn)生.EXE文件。3對.EXE文件進(jìn)行調(diào)試運(yùn)行。(1)用DEBUG調(diào)試運(yùn)行,學(xué)會修改AL內(nèi)容的方法;(2)對DSPKEY.EXE鍵入不同的字符,分別進(jìn)行調(diào)試;(3)在MS-DOS下運(yùn)行這兩個(gè).EXE文件。六實(shí)驗(yàn)報(bào)告要求1畫出兩個(gè)程序的流程圖,若要獨(dú)立編寫程序,應(yīng)列出相應(yīng)的程序清單。2說明本實(shí)驗(yàn)是如何利用DEBUG進(jìn)行調(diào)試的。七思考題 編寫顯示AX中四位十六進(jìn)制數(shù)程序,畫出程序的流程圖。實(shí)驗(yàn)參考程序清單(1) 顯示AL中兩位十六進(jìn)制數(shù)程序:;DISPHEX.ASMCOD

34、E SEGMENT ASSUME CS:CODESTART:MOV AL,3EH MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE NEXT1 ADD DL,7NEXT1:ADD DL,30H MOV AH,2 INT 21H ;顯示高位ASCII碼 MOV DL,BL AND DL,0FH CMP DL,9 JBE NEXT2 ADD DL,7NEXT2:ADD DL,30H MOV AH,2 INT 21H ;顯示低位ASCII碼 MOV AH,4CH INT 21HCODE ENDS ;返回DOS END START(2) 顯示鍵入字

35、符程序;DISPKEY.ASMCODE SEGMENT ASSUME CS:CODESTART: MOV AH,1 INT 21H ;等待鍵入字符,送AL CMP AL,0DH ;是否是回車符? JZ DONE ;是則轉(zhuǎn)DONE退出程序 CMP AL,0 JB NEXT CMP AL,9 JA CHARUP MOV DL,AL MOV AH,2 INT 21H JMP STARTCHARUP:CMP AL,41H JB NEXT CMP AL,5AH JA CHRDNDISPC: MOV DL,C MOV AH,2 INT 21HNEXT: JMP STARTCHRDN:CMP AL,61H

36、JB NEXT CMP AL,7AH JA NEXT JMP DISPCDONE: MOV AH,4CH INT 21HCODE ENDS END START實(shí)驗(yàn)6 循環(huán)程序?qū)嶒?yàn)一實(shí)驗(yàn)?zāi)康?掌握循環(huán)程序的設(shè)計(jì)方法;2學(xué)會針對不同的問題,選用不同的組織循環(huán)的方法;3進(jìn)一步熟悉利用DEBUG程序修改參數(shù)的方法,并檢查和驗(yàn)證結(jié)果的正確性。二實(shí)驗(yàn)內(nèi)容1編寫一個(gè)程序,顯示BX寄存器中的兩位十六進(jìn)制數(shù);2編寫一個(gè)程序,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示“c”;若是回車字符(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。三實(shí)驗(yàn)要

37、求1編寫實(shí)驗(yàn)內(nèi)容要求的兩個(gè)程序;2寫出調(diào)試以上程序,即修改程序參數(shù),檢查結(jié)果的操作方法;3熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。四實(shí)驗(yàn)環(huán)境PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)MASM.EXE,LINK.EXE,DEBUG.COM或宏匯編集成環(huán)境五實(shí)驗(yàn)步驟1用EDIT或其它編輯軟件,編寫.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM;2對其進(jìn)行匯編及連接,產(chǎn)生.EXE文件;3對.EXE文件進(jìn)行調(diào)試運(yùn)行。(1)用DEBUG調(diào)試運(yùn)行,學(xué)會修改BL內(nèi)容的方法;(2)對DSPKEY.EXE鍵入不同的字符,分別進(jìn)行調(diào)試;(3)在MS-DOS下運(yùn)行這兩個(gè).EXE文件

38、。六實(shí)驗(yàn)報(bào)告要求畫出兩個(gè)程序的流程圖,若要獨(dú)立編寫程序,應(yīng)列出相應(yīng)的程序清單。七思考題編寫一循環(huán)程序,測量一字符串長度,并用16進(jìn)制數(shù)顯示之。實(shí)驗(yàn)7 子程序?qū)嶒?yàn)一實(shí)驗(yàn)?zāi)康?掌握主程序與子程序之間的調(diào)用關(guān)系及調(diào)用方法;2掌握子程序調(diào)用過程中近程調(diào)用與遠(yuǎn)程調(diào)用的區(qū)別;3掌握通過堆棧轉(zhuǎn)送參數(shù)的方法。二實(shí)驗(yàn)內(nèi)容1將BUF開始的10個(gè)單元中的二進(jìn)制數(shù)轉(zhuǎn)換成兩位十六進(jìn)制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序HEXAC實(shí)現(xiàn),在轉(zhuǎn)換過程中,通過子程序DISP實(shí)現(xiàn)顯示。2編寫一個(gè)主程序,從鍵盤接收若干個(gè)字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計(jì)字符串中字符b的個(gè)數(shù).子程序的參數(shù)是字符串的首地址

39、TABLE,字符串長度N及字符”b”.子程序返回字符b”的個(gè)數(shù).參數(shù)傳送采用堆棧實(shí)現(xiàn).主程序在子程序返回后,顯示字符”b”及其個(gè)數(shù)(設(shè)為一位十六進(jìn)制數(shù))。三實(shí)驗(yàn)要求1第一個(gè)實(shí)驗(yàn)程序用子程序的近程調(diào)用實(shí)現(xiàn)。由于在調(diào)用HEXASC子程序時(shí),子程序又調(diào)用了DISP子程序,這叫子程序的嵌套調(diào)用。實(shí)驗(yàn)過程中可以從堆棧的內(nèi)容看到兩個(gè)子程序的返回地址值。由于是近調(diào)用,地址值只包括返回地址的段內(nèi)偏移量。在每個(gè)子程序的執(zhí)行中,檢查CS值是不變的。2第二個(gè)程序是利用遠(yuǎn)調(diào)用的方法調(diào)用子程序的。在遠(yuǎn)調(diào)用情況下,主程序與子程序處在不同的邏輯代碼段中,可在子程序執(zhí)行中查看CS值,它與主程序中的CS值是不同的。子程序調(diào)用后

40、,堆棧中保留了返回地址的段地址及段內(nèi)偏移量。3第二個(gè)程序中,主程序與子程序之間參數(shù)的傳送是由堆棧實(shí)現(xiàn)的。一段是將參數(shù)(此處是串首址TABLE,串的長度N及待統(tǒng)計(jì)的字符“b”)順序壓如堆棧,在子程序調(diào)用后,通過BP指針對堆棧中的參數(shù)訪問,并將統(tǒng)計(jì)的結(jié)果通過堆棧返回。有關(guān)該方法的原理此處不再介紹。4預(yù)習(xí)子程序設(shè)計(jì)的基本方法,根據(jù)實(shí)驗(yàn)內(nèi)容要求,畫出子程序及主程序的流程圖; 熟悉鍵盤鍵入字符串及用堆棧傳送參數(shù)的程序段編制方法。四實(shí)驗(yàn)環(huán)境PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)MASM.EXE,LINK.EXE,DEBUG.COM或宏匯編集成環(huán)境五實(shí)驗(yàn)步驟1編輯、匯編兩個(gè)源程序,生成相應(yīng)的可執(zhí)行文件(.EXE)2用DEBUG的R命令,T命令或G命令和D命令檢查遠(yuǎn)程調(diào)用及近程調(diào)用時(shí)堆棧的變化。特別是通過堆棧傳送的參數(shù)和子程序取出的參數(shù)

溫馨提示

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

最新文檔

評論

0/150

提交評論