匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書_第1頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書_第2頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書_第3頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書_第4頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

..匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書前言匯編語(yǔ)言是計(jì)算機(jī)專業(yè)的一門重要的專業(yè)基礎(chǔ)課,主要介紹匯編語(yǔ)言程序設(shè)計(jì)的基本原理和方法。匯編語(yǔ)言是一門理論性和實(shí)踐性較強(qiáng)的課程,輔助課堂教學(xué)的實(shí)驗(yàn)有助于幫助學(xué)生理解匯編語(yǔ)言的基本原理,鍛煉學(xué)生的動(dòng)手能力,提高學(xué)生的綜合應(yīng)用知識(shí)的能力。本實(shí)驗(yàn)指導(dǎo)書按照匯編語(yǔ)言程序設(shè)計(jì)的教學(xué)大綱要求編寫。依據(jù)循序漸進(jìn)、由淺入深的規(guī)律,通過(guò)實(shí)例復(fù)習(xí)鞏固所學(xué)知識(shí),借助實(shí)例開展匯編語(yǔ)言程序設(shè)計(jì)。通過(guò)這種既具有構(gòu)造性又具有創(chuàng)造性的學(xué)習(xí)活動(dòng),更便于初學(xué)者的理解和掌握,通過(guò)上機(jī)實(shí)驗(yàn),并在實(shí)驗(yàn)后完成實(shí)驗(yàn)報(bào)告,又能進(jìn)一步加深和拓寬所學(xué)知識(shí)。為了幫助老師和學(xué)生開展實(shí)驗(yàn),我們特編了這本實(shí)驗(yàn)指導(dǎo)書,希望能對(duì)我校的《匯編語(yǔ)言》教學(xué)工作有所幫助。本實(shí)驗(yàn)指導(dǎo)書所有實(shí)例均在PC機(jī)上調(diào)試通過(guò)。目錄TOC\o"1-1"\h\z實(shí)驗(yàn)1利用DEBUG調(diào)試匯編語(yǔ)言程序段3實(shí)驗(yàn)2匯編語(yǔ)言程序上機(jī)過(guò)程10實(shí)驗(yàn)3分支程序?qū)嶒?yàn)12實(shí)驗(yàn)4循環(huán)程序?qū)嶒?yàn)15實(shí)驗(yàn)5子程序?qū)嶒?yàn)16實(shí)驗(yàn)6

字符處理程序?qū)嶒?yàn)20實(shí)驗(yàn)7排序程序設(shè)計(jì)24實(shí)驗(yàn)8計(jì)算機(jī)鋼琴程序26實(shí)驗(yàn)9鍵盤和窗口程序28實(shí)驗(yàn)10磁盤文件操作程序31實(shí)驗(yàn)1利用DEBUG調(diào)試匯編語(yǔ)言程序段一.實(shí)驗(yàn)?zāi)康?.熟悉DEBUG有關(guān)命令的使用方法;2.利用DEBUG掌握有關(guān)指令的功能;3.利用DEBUG運(yùn)行簡(jiǎn)單的程序段。二.實(shí)驗(yàn)內(nèi)容1.進(jìn)入和退出DEBUG程序;1>開始—運(yùn)行,輸入cmd,點(diǎn)確定進(jìn)入命令窗口2>在命令窗口中輸入dubug進(jìn)入debug程序3>進(jìn)入debug窗口后,輸入q命令退出debug2.學(xué)會(huì)DEBUG中的1D命令〔顯示內(nèi)存數(shù)據(jù)D段地址:偏移地址例1:-D100;顯示DS段,0100開始的128個(gè)字節(jié)內(nèi)容說(shuō)明:指定要顯示其內(nèi)容的內(nèi)存區(qū)域的起始和結(jié)束地址,或起始地址和長(zhǎng)度。

DSEGREG[起始地址][L長(zhǎng)度];顯示SEGREG段中<缺省內(nèi)默認(rèn)為DS>,以[起始地址]<缺省內(nèi)為當(dāng)前的偏移地址>,開始的[L長(zhǎng)度]<缺省內(nèi)默認(rèn)為128>個(gè)字節(jié)的內(nèi)容.DSEGREG[段地址:偏移地址];顯示SEGREG段中<缺省內(nèi)默認(rèn)為DS>,[段地址:偏移地址]開始的[L長(zhǎng)度]<缺省內(nèi)默認(rèn)為128>個(gè)字節(jié)內(nèi)容

-D

;默認(rèn)段寄存器為DS,當(dāng)前偏移地址<剛進(jìn)入debug程序偏移地址為0100H>-DDS:100;顯示DS段,0100H開始的128個(gè)字節(jié)內(nèi)容-DCS:200;顯示CS段,0200H開始的128個(gè)字節(jié)內(nèi)容

-D200:100;顯示DS段,0200:0100H開始的128個(gè)字節(jié)內(nèi)容

-D200;顯示DS段,0200H開始的128個(gè)字節(jié)內(nèi)容

-D100L10;顯示DS段,100H開始的100H個(gè)字節(jié)內(nèi)容2E命令〔修改指定內(nèi)存例1:-E1004142434448474645-D100,L08結(jié)果:08F1:01004142434448474645例2:-E100:08F1:01007642:42是操作員鍵入此命令是將原100號(hào)內(nèi)存內(nèi)容76修改為42,用D命令可察看。①E地址

;從指定地址開始,修改〔或連續(xù)修改存儲(chǔ)單元內(nèi)容。DEBUG首先顯示指定單元內(nèi)容,如要修改,可輸入新數(shù)據(jù);空格鍵顯示下一個(gè)單元內(nèi)容并可修改,減號(hào)鍵顯示上一個(gè)單元內(nèi)容并可修改;如不修改,可直接按空格鍵或減號(hào)鍵;回車鍵結(jié)束命令。

②E地址數(shù)據(jù)表;從指定的地址開始用數(shù)據(jù)表給定的數(shù)據(jù)修改存儲(chǔ)單元。

-EDS:100F3‘AB’8D;把DS段中0100H開始的四個(gè)字節(jié)修改為F3‘AB’<A和B的ASCII碼>8D也可以按下面的方式實(shí)現(xiàn)3R命令〔顯示當(dāng)前寄存器的內(nèi)容顯示修改寄存器命令R

R;★顯示所有寄存器和標(biāo)志位狀態(tài);

★顯示當(dāng)前CS:IP指向的指令。

顯示標(biāo)志時(shí)使用的符號(hào):

標(biāo)志

標(biāo)志=1

標(biāo)志=0

OF

OV

NV

DF

DN

UP

IF

EI

DI

SF

NG

PL

ZF

ZR

NZ

AF

AC

NA

PF

PE

PO

CF

CY

NC4T命令〔設(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=100

5;從當(dāng)前0100H開始執(zhí)行5條指令5A命令〔將指令直接匯編成機(jī)器碼輸入到內(nèi)存中。匯編命令A(yù)

A[地址];從指定的地址開始輸入符號(hào)指令;如省略地址,則接著上一個(gè)A命令的最后一個(gè)單元開始;若第一次使用A命令省略地址,則從當(dāng)前CS:IP開始〔通常是CS:100。

注釋:①在DEBUG下編寫簡(jiǎn)單程序即使用A命令。

②每條指令后要按回車。

③不輸入指令按回車,或按Ctrl+C結(jié)束匯編。

④支持所有8086符號(hào)硬指令,偽指令只支持DB、DW,不支持各類符號(hào)名。使用A命令在0100H開始輸入指令movax,10inccxmovbl,al單步執(zhí)行上述指令6G命令等的使用〔執(zhí)行A命中輸入的匯編指令運(yùn)行程序命令G

①G;從CS:IP指向的指令開始執(zhí)行程序,直到程序結(jié)束或遇到INT3。

②G=地址;從指定地址開始執(zhí)行程序,直到程序結(jié)束或遇到INT3。

③G斷點(diǎn)1[,斷點(diǎn)2,…斷點(diǎn)10];從CS:IP指向的指令開始執(zhí)行程序,直到遇到斷點(diǎn)。

④G=地址

斷點(diǎn)1[,斷點(diǎn)2,…斷點(diǎn)10]

-G;從CS:IP指向的指令開始執(zhí)行程序。

-G=100;從指定地址開始執(zhí)行程序。-G=100105110120使用A命令在0100H開始輸入指令movax,10inccxmovbl,alint3然后使用g命令執(zhí)行上面的例子設(shè)斷點(diǎn)在100H處然后用T命令單步執(zhí)行3.用DEBUG,驗(yàn)證乘法、除法、加法、減法、帶進(jìn)位加、帶借位減、堆棧操作指令、串操作指令的功能。三.實(shí)驗(yàn)要求1.仔細(xì)閱讀有關(guān)DEBUG命令的內(nèi)容,對(duì)有關(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)步驟1.在DOS提示符下,進(jìn)入DEBUG程序;2.在DOS目錄下啟動(dòng)DEBUG;3.詳細(xì)記錄每一步所用的命令,以及查看結(jié)果的方法和具體結(jié)果。六.實(shí)驗(yàn)報(bào)告要求1.如何啟動(dòng)和退出DEBUG程序;2.整理每個(gè)DEBUG命令使用的方法,實(shí)際示例及執(zhí)行結(jié)果。實(shí)驗(yàn)2匯編語(yǔ)言程序上機(jī)過(guò)程一.實(shí)驗(yàn)?zāi)康氖炀氄莆諈R編語(yǔ)言程序的編輯、調(diào)試和運(yùn)行的過(guò)程和方法。了解匯編語(yǔ)言程序的匯編、運(yùn)行環(huán)境。二.實(shí)驗(yàn)內(nèi)容1.掌握常用的編輯工具軟件〔如WORD、EDIT、MASM和LINK的使用;2.偽指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;3.利用的INT21H的1號(hào)功能實(shí)現(xiàn)鍵盤輸入的方法;三.實(shí)驗(yàn)要求1.仔細(xì)閱讀有關(guān)偽指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的內(nèi)容;2.了解利用的INT21H的1號(hào)功能實(shí)現(xiàn)鍵盤輸入的方法,了解.EXE文件和.COM文件的區(qū)別及用INT21H4C號(hào)功能返回系統(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)步驟程序:data segmentmessage db'Thisisasampleprogramofkeyboardanddisply'db0dh,0ah,'Pleasestrikethekey!',0dh,0ah,'$'data endsstack segment parastack'stack'db50dup<?>stack endscode segmentassume cs:code,ds:data,ss:stackstart: movax,datamovds,axmovdx,offsetmessagemovah,9int21h;顯示'Thisisasampleprogramofkeyboardanddisply'again: movah,1int21h;等待鍵盤輸入,保存至ALcmpal,1bh;1bh字符ESC的ASCIIjeexitcmpal,61h;61h字符a的ASCIIjc<>nd;小于〔CF=1有借位轉(zhuǎn)向ND原樣顯示cmpal,7ah;jand;大于轉(zhuǎn)向ND原樣顯示andal,11011111b;轉(zhuǎn)化為大寫字母subal,20hnd: movdl,almovah,2int21hjmpagainexit: movah,4chint21hcode endsendstart實(shí)驗(yàn)步驟:1.用用文字編輯工具〔記事本或EDIT將源程序輸入,其擴(kuò)展名為.ASM。2.用MASM對(duì)源文件進(jìn)行匯編,產(chǎn)生.OBJ文件和.LST文件。若匯編時(shí)提示有錯(cuò),用文字編輯工具修改源程序后重新匯編,直至通過(guò)。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)告要求匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。實(shí)驗(yàn)3分支程序?qū)嶒?yàn)一.實(shí)驗(yàn)?zāi)康恼莆辗种С绦虻脑O(shè)計(jì)方法;掌握利用DEBUG修改參數(shù)、檢查結(jié)果的方法;熟悉匯編語(yǔ)言源程序的編輯、匯編、連接及調(diào)試過(guò)程。二.實(shí)驗(yàn)內(nèi)容1.編寫一個(gè)程序,顯示AL寄存器中的兩位十六進(jìn)制數(shù)2.編寫一個(gè)程序,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示"c";若是回車字符<CR><其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)境五.實(shí)驗(yàn)步驟1.用EDIT或其它編輯軟件,編寫.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。2.對(duì)其進(jìn)行匯編及連接,產(chǎn)生.EXE文件。3.對(duì).EXE文件進(jìn)行調(diào)試運(yùn)行?!?用DEBUG調(diào)試運(yùn)行,學(xué)會(huì)修改AL內(nèi)容的方法;〔2對(duì)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.說(shuō)明本實(shí)驗(yàn)是如何利用DEBUG進(jìn)行調(diào)試的。七.思考題編寫顯示AX中四位十六進(jìn)制數(shù)程序,畫出程序的流程圖。實(shí)驗(yàn)參考程序清單<1>

顯示AL中兩位十六進(jìn)制數(shù)程序:;DISPHEX.ASMCODESEGMENTASSUMECS:CODESTART:MOVAL,3EHMOVBL,ALMOVDL,ALMOVCL,4SHRDL,CLCMPDL,9ENEXT1ADDDL,7NEXT1:ADDDL,30HMOVAH,2INT21H;顯示高位ASCII碼MOVDL,BLANDDL,0FHCMPDL,9ENEXT2ADDDL,7NEXT2:ADDDL,30HMOVAH,2INT21H;顯示低位ASCII碼MOVAH,4CHINT21HCODEENDS;返回DOSENDSTART<2>

顯示鍵入字符程序;DISPKEY.ASMCODESEGEMENTASSUMECS:CODESTART:MOVAH,1INT21H;等待鍵入字符,送ALCMPAL,0DH;是否是回車符?JZDONE;是則轉(zhuǎn)DONE退出程序CMPAL,’0’NEXTCMPAL,’9’JACHARUPMOVDL,ALMOVAH,2INT21HJMPSTARTCHARUP:CMPAL,41HNEXTCMPAL,5AHJACHRDNDISPC:MOVDL,’C’MOVAH,2INT21HNEXT:JMPSTARTCHRDN:CMPAL,61HNEXTCMPAL,7AHJANEXTJMPDISPCDONE:MOVAH,4CHINT21HCODE:ENDSENDSTART實(shí)驗(yàn)4循環(huán)程序?qū)嶒?yàn)一.實(shí)驗(yàn)?zāi)康?.掌握循環(huán)程序的設(shè)計(jì)方法;2.學(xué)會(huì)針對(duì)不同的問題,選用不同的組織循環(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";若是回車字符<CR><其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)境五.實(shí)驗(yàn)步驟1.用EDIT或其它編輯軟件,編寫.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM;2.對(duì)其進(jìn)行匯編及連接,產(chǎn)生.EXE文件;3.對(duì).EXE文件進(jìn)行調(diào)試運(yùn)行?!?用DEBUG調(diào)試運(yùn)行,學(xué)會(huì)修改AL內(nèi)容的方法;〔2對(duì)DSPKEY.EXE鍵入不同的字符,分別進(jìn)行調(diào)試;〔3在MS-DOS下運(yùn)行這兩個(gè).EXE文件。六.實(shí)驗(yàn)報(bào)告要求畫出兩個(gè)程序的流程圖,若要獨(dú)立編寫程序,應(yīng)列出相應(yīng)的程序清單。七.思考題編寫一循環(huán)程序,測(cè)量一字符串長(zhǎng)度,并用16進(jìn)制數(shù)顯示之。實(shí)驗(yàn)5子程序?qū)嶒?yàn)一.實(shí)驗(yàn)?zāi)康?.掌握主程序與子程序之間的調(diào)用關(guān)系及調(diào)用方法;2.掌握子程序調(diào)用過(guò)程中近程調(diào)用與遠(yuǎn)程調(diào)用的區(qū)別;3.掌握通過(guò)堆棧轉(zhuǎn)送參數(shù)的方法。二.實(shí)驗(yàn)內(nèi)容1.將BUF開始的10個(gè)單元中的二進(jìn)制數(shù)轉(zhuǎn)換成兩位十六進(jìn)制數(shù)的ASCII碼,在屏幕上顯示出來(lái)。要求碼型轉(zhuǎn)換通過(guò)子程序HEXAC實(shí)現(xiàn),在轉(zhuǎn)換過(guò)程中,通過(guò)子程序DISP實(shí)現(xiàn)顯示。2.編寫一個(gè)主程序,從鍵盤接收若干個(gè)字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計(jì)字符串中字符’b’的個(gè)數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長(zhǎng)度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)過(guò)程中可以從堆棧的內(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)用后,堆棧中保留了返回地址的段地址及段內(nèi)偏移量。3.第二個(gè)程序中,主程序與子程序之間參數(shù)的傳送是由堆棧實(shí)現(xiàn)的。一段是將參數(shù)〔此處是串首址TABLE,串的長(zhǎng)度N及待統(tǒng)計(jì)的字符"b"順序壓如堆棧,在子程序調(diào)用后,通過(guò)BP指針對(duì)堆棧中的參數(shù)訪問,并將統(tǒng)計(jì)的結(jié)果通過(guò)堆棧返回。有關(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í)行文件〔.EXE2.用DEBUG的R命令,T命令或G命令和D命令檢查遠(yuǎn)程調(diào)用及近程調(diào)用時(shí)堆棧的變化。特別是通過(guò)堆棧傳送的參數(shù)和子程序取出的參數(shù)是返回參數(shù)的詳細(xì)過(guò)程。3.檢查程序執(zhí)行的結(jié)果是否正確。六.實(shí)驗(yàn)報(bào)告要求1.說(shuō)明用堆棧傳送參數(shù)的過(guò)程及其具體方法。2.分析實(shí)驗(yàn)結(jié)果及所遇到問題,并說(shuō)明解決的方法。七.思考題分析遠(yuǎn)程調(diào)用與近程調(diào)用的區(qū)別,在用DEBUG有關(guān)命令觀察時(shí),執(zhí)行過(guò)程有何不同。參考程序清單1.碼型轉(zhuǎn)換程序清單:;CONV.ASNDATASEGMENTBUFDB0ABH,0CDH,0DEH,01H,02H,03HDB3AH,4BH,5CH,6FHDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,10LEABX,BUFAGAIN:MOVAL,[BX]CALLHEXASCINCBXLOOPAGAINMOVAH,4CHINT21HHEXASCPROCNEARMOVDL,ALPUSHCXMOVCL,4SHRDL,CLPOPCXCALLDISP;顯示高位HEX數(shù)MOVDL,ALANDDL,0FHCALLDISPRETHEXASCENDPDISPPROPCMPDL,9ENEXTADDDL,7NEXT:ADDDL,30HMOVAH,2INT21H;顯示RETDISPENDPCODEENDSENDSTART2.統(tǒng)計(jì)并顯示某鍵入字符的個(gè)數(shù)的程序:;COUNTER.ASMDATASEGMENTCHARDB‘b’BUFDB50H,?,50HDUP<?>DATAENDSMCODESEGMENTASSUMECS:MCODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,BUFMOVAH,9INT21HLEASIBUFMOVCL,[SI+1]MOVCH,0;CX中為字符串長(zhǎng)度INCSIINCSI;SI指向串首址TABLEMOVAL,CHARMOVAH,0;AX中為待查字符PUSHSIPUSHCXPUSHAX;參數(shù)送堆棧CALLCHECKPOPAX:統(tǒng)計(jì)個(gè)數(shù)在AL中MOVDL,CHARMOVAH,2INT21HMOVDL,ALANDDL,0FHCMPDL,9ENEXTADDDL,7NEXT:ADDDL,30HMOVAH,2INT21H;顯示統(tǒng)計(jì)個(gè)數(shù)MOVAH,4CHINT21HMCODEENDSSCODESEGMENTASSUMECS:SCODECHECKPROCFARPUSHBPMOVBP,SPMOVSI,[BP+10]MOVCX,[BP+8]MOVAX,[BP+6]XORAH,AHAGAIN:CMPAL.[SI]JNENEXT1INCAHNEXT1:INCSILOOPAGAINMOVAL,AHMOV[BP+10],AXPOPBPRET4CHECKENDPENDSTART實(shí)驗(yàn)6

字符處理程序?qū)嶒?yàn)一.實(shí)驗(yàn)?zāi)康?.熟悉串操作指令的功能與應(yīng)用;2.掌握串操作指令的尋址方式及使用方法,編寫常用的字符串處理程序。二.實(shí)驗(yàn)內(nèi)容1.字符串統(tǒng)計(jì)。自STRN開始的存儲(chǔ)區(qū)中,有一個(gè)字符串,統(tǒng)計(jì)其中含有小寫字母的個(gè)數(shù),將統(tǒng)計(jì)結(jié)果以兩位十進(jìn)制數(shù)顯示在屏幕上。2.在給定的字符串中,刪除重復(fù)的字符,其余的字符向前遞補(bǔ)。三.實(shí)驗(yàn)要求1.認(rèn)真預(yù)習(xí)有關(guān)串操作的指令極其尋址方式的特點(diǎn),能夠正確使用串操作指令,并準(zhǔn)備好數(shù)據(jù)。2.按正常的方法將刪除字符程序編成子程序,規(guī)定子程序的入口和出口參數(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.用1號(hào)系統(tǒng)調(diào)用從鍵盤鍵入一個(gè)字符串,然后統(tǒng)計(jì)其中小寫字母的個(gè)數(shù)。程序每次執(zhí)行,都能得到不同的結(jié)果。2.刪除字符串中重復(fù)字符,要求編寫一個(gè)在同一個(gè)字符串中刪除字符,并將其余字符向前遞補(bǔ)的程序。六.實(shí)驗(yàn)報(bào)告要求1、對(duì)照參考程序,畫出程序流程圖。2、總結(jié)字符串處理的編程方法,提出改進(jìn)和完善此類程序的設(shè)計(jì)方案。七.思考題編寫程序,在一個(gè)字符串中查找匹配字符。參考程序清單1.統(tǒng)計(jì)小寫字母?jìng)€(gè)數(shù)的程序清單:;COUNTDC.ASMDATA

SEGMENTSTRN

DB80DUP<?>DATA

ENDSCODE

SEGMENT

ASSUMECS:CODE,DS:DATASTART:MOV

AX,DATAMOV

DS,AXLEA

DI,STANMOV

CL,0AGAIN:MOV

AH,1

INT

21HCMP

AL,0DHJZ

DONEMOV

[DI],ALINC

DIINC

DLJMP

AGAINDONE:LEA

SI,STRNMOV

CH,0MOV

BL,0CLDCYCLE:LODSB

CMP

AL,61HCMP

AL,7AHJA

NEXTINC

BLNEXT:LOOP

CYCLEMOV

AL,BLMOV

AH,0MOV

CL,10DIV

CL

;十位數(shù)在AL中,個(gè)位數(shù)在AH中XCHG

AH,AL

;以下顯示兩位十進(jìn)制數(shù)

MOV

DL,AHOR

DL,30HINT

21HMOV

DL,ALOR

DL,30HMOV

AH,2INT

21HMOV

DL,ALOR

DL,30HINT

21HMOV

DL,ALOR

DL,30HINT

21HMOV

AH,4CHINT

21HCODEENDSENDSTART2.刪除字符串中重復(fù)字符的源程序清單:;DELD.ASMDATA

SEGMENTSTAN

DB80DUP<?>LEN

DB?DATA

ENDSCODE

SEGMENTASSUMECS:CODE,DS:DATA,ES:DATA

ATART:MOV

AX,DATAMOV

DS,AXMOV

ES,AXLEA

SI,STRNMOV

CL,0AGAIN:MOV

AH,1INT21HCMP

AL,0DHJZ

DONEMOV

[SI],ALINC

SIINC

CLJMP

AGAINDONE:MOV

CH,0MOV

LEN,[CL]REPEAT:PUSHSIPUSHCX

;CX為內(nèi)循環(huán)記數(shù)PUSHCX

;DX為外循環(huán)記數(shù)POP

DXDECCX

JE

NEXT1

;是最后一個(gè)字符,不再查找重復(fù)字符MOVAL,[SI]CMPAL,0JENEXT1COMP:

INCSI

CMPAL,[SI]JNEGOON

;為非重復(fù)字符MOVBUTEPTR[SI],0GOON:

LOOPCOMP

;查出與該字符重復(fù)的所有字符,并用0替換NEXT1:

POPDXPOPSIDECDX`JNZREPEAT

;對(duì)所有重復(fù)字符都進(jìn)行查找LEASI,STRN

;刪除重復(fù)字符MOVCL,LENMOVCH,0CYCLE:MOV

AL,[SI]

CMP

AL,0

;是重復(fù)字符嗎?

JNZ

NEXT

;不是,查找下一個(gè)字符

DEC

CX

;遞補(bǔ)字串長(zhǎng)度送CX

JZ

DONE

;若是最后字符不遞補(bǔ)

CALL

DELE

;刪除該空字符并遞補(bǔ)

DEC

SI

;對(duì)遞補(bǔ)子串從頭處理

NEXT:INC

SI

LOOP

CYCLE

MOV

AH,4CH

INT

21H

DELE

PROC

PUSH

SI

PUSH

CX

CLD

MOV

DI,SI

;空字符處為目的首址

INC

SI

;下一個(gè)地址為源串首址

REP

MOVSB

POP

CX

POP

SI

RETDELE

ENDP

CODE

ENDS

END

START實(shí)驗(yàn)7排序程序設(shè)計(jì)一.實(shí)驗(yàn)?zāi)康恼莆諗?shù)據(jù)排序的一些常用算法,了解數(shù)列的有序、無(wú)序、升序和降序的概念。二.實(shí)驗(yàn)內(nèi)容使用"冒泡排序"法,將內(nèi)存中10個(gè)數(shù)據(jù)由小到大排序〔每個(gè)數(shù)為16位二進(jìn)制;三.實(shí)驗(yàn)要求1.復(fù)習(xí)排序的幾個(gè)基本算法;2.準(zhǔn)備數(shù)據(jù),按選擇好的算法編寫源程序。數(shù)據(jù)以DW定義和鍵盤輸入兩種方法提供。四.實(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.將編寫好的源程序輸入,建立源程序文件且存盤;2.匯編、連接和運(yùn)行此程序;3.運(yùn)行成功后,將程序的數(shù)據(jù)區(qū)建立方式改為鍵盤輸入,由小到大排序改為由大到小排序,修改后重新調(diào)試、運(yùn)行;4.記錄并分析排序的效率。六.實(shí)驗(yàn)報(bào)告要求1.對(duì)照參考程序,畫出程序流程圖。2.說(shuō)明所使用算法,是否為最優(yōu)算法,與你知道的其它算法比較,指出它們的差別。七.思考題如果要求顯示排序結(jié)果,程序應(yīng)如何修改?參考程序清單、code segmentorg 100hassume cs:code,ds:codemain: jmp startarray dw 1234h,5673h,7fffh,8000h,0dffhdw 0ab5h,0369h,005fh,5634h,9069hcount equ $-arraystart: mov cx,countshr cx,1dec cxmov bl,-1again: mov dx,cxand bl,blje exitxor bl,blxor si,siagain1:mov ax,array[si]cmp ax,array[si+2]jle nchgxchg array[si+2],axmov array[si],axmov bl,-1nchg: inc siinc sidec dxjnz again1loop againexit: int 20hcodeendsend main實(shí)驗(yàn)8計(jì)算機(jī)鋼琴程序一.實(shí)驗(yàn)?zāi)康?.掌握利用PC機(jī)揚(yáng)聲器發(fā)出不同頻率聲音的方法;2.學(xué)習(xí)利用系統(tǒng)功能調(diào)用從鍵盤上讀取字符的方法。二.實(shí)驗(yàn)內(nèi)容編寫程序,使PC機(jī)成為一架可彈奏的"鋼琴"。當(dāng)按下數(shù)字鍵1-8時(shí),依次發(fā)出1,2,3,4,5,6,7,I八個(gè)音調(diào)。當(dāng)按下CTRL-C,則退出"鋼琴"狀態(tài)。三.實(shí)驗(yàn)要求1.了解PC機(jī)發(fā)音的原理;2.編寫發(fā)音程序。PC機(jī)揚(yáng)聲器電路圖如下:揚(yáng)聲器放大器與門61H端口第1位8253定時(shí)器261H端口第0位計(jì)數(shù)值〔地址42H控制字〔先送低位,再送高位〔地址43H揚(yáng)聲器放大器與門8253定時(shí)器2計(jì)數(shù)值〔地址42H控制字〔先送低位,再送高位〔地址43H通過(guò)給8253定時(shí)器裝入不同的計(jì)數(shù)值,可以使其輸出不同頻率的波形。當(dāng)與門打開后,經(jīng)過(guò)放大器的放大作用,便可驅(qū)動(dòng)揚(yáng)聲器發(fā)出不同頻率的音調(diào)。要使音調(diào)的聲音持續(xù)一端時(shí)間,只要插入一端延時(shí)程序之后,再將揚(yáng)聲器切斷<關(guān)閉與門>。另外,要使計(jì)算機(jī)成為可彈奏的鋼琴,需要使用系統(tǒng)調(diào)用的01H功能以接收鍵入字符,并且要建立一張表,使鍵入字符與頻率構(gòu)成一個(gè)對(duì)應(yīng)關(guān)系。鍵入字符12345678音符12345678頻率值5245886606987848809881048四.實(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.將編寫好的源程序輸入,建立源程序文件且存盤;2.匯編、連接和運(yùn)行此程序;3.運(yùn)行成功后,改變常數(shù)或頻率值,看看聲音的變化。六.實(shí)驗(yàn)報(bào)告要求1.實(shí)驗(yàn)記錄和體會(huì)。2.自編程序。七.思考題如果要演奏高音、低音,程序應(yīng)如何修改?程序框圖如下:設(shè)置8253計(jì)數(shù)器2的工作模式INT21H的01H號(hào)功能接收鍵入字符Y裝入計(jì)數(shù)初值是CTRL-C?N結(jié)束鍵入字符值轉(zhuǎn)化為查表偏移量送BX打開與門常數(shù)120000H被除數(shù)送〔DX,AX延遲一段時(shí)間查表得頻率值作為除數(shù)關(guān)閉與門相除結(jié)果作為計(jì)數(shù)初值送BX設(shè)置8253計(jì)數(shù)器2的工作模式INT21H的01H號(hào)功能接收鍵入字符Y裝入計(jì)數(shù)初值是CTRL-C?N結(jié)束鍵入字符值轉(zhuǎn)化為查表偏移量送BX打開與門常數(shù)120000H被除數(shù)送〔DX,AX延遲一段時(shí)間查表得頻率值作為除數(shù)關(guān)閉與門相除結(jié)果作為計(jì)數(shù)初值送BX實(shí)驗(yàn)9鍵盤和窗口程序一.實(shí)驗(yàn)?zāi)康?.掌握利用INT16H2號(hào)功能調(diào)用實(shí)行鍵盤輸入的方法;2.熟悉鍵盤的掃描碼和ASCII碼的關(guān)系;3.掌握利用INT10H功能調(diào)用實(shí)現(xiàn)窗口功能的方法。二.實(shí)驗(yàn)內(nèi)容1.編寫鍵盤輸入程序;2.編寫設(shè)置屏幕窗口程序。三.實(shí)驗(yàn)要求1.復(fù)習(xí)INT16H2號(hào)功能調(diào)用;2.閱讀鍵盤的掃描碼和ASCII碼的關(guān)系的內(nèi)容;3.復(fù)習(xí)INT10H功能。四.實(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.將鍵盤輸入程序輸入,建立源程序文件且存盤;2.匯編、連接、運(yùn)行此程序,觀察并記錄各個(gè)鍵的掃描碼,ASCII碼及對(duì)應(yīng)字符。匯編、連接和運(yùn)行此程序;3.將窗口程序輸入,建立源程序文件且存盤;4.匯編、連接、運(yùn)行此程序,觀察按不同鍵所產(chǎn)生的效果。六.實(shí)驗(yàn)報(bào)告要求1.對(duì)照參考程序,畫出程序流程圖。2.記錄程序運(yùn)行結(jié)果。七.思考題窗口程序所產(chǎn)生的窗口效果有何缺陷?試修改之。參考程序清單:1.鍵盤輸入程序PRO_NAM SEGMENTASSUME CS:PRO_NAMORG 100HAGAIN: MOV AH,0INT 16HMOV BX,AXCALL BINIHEXMOV AH,2MOV dl,20hINT 21HMOV DL,BLMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HJMP AGAININT 20HBINIHEX PROC NEARMOV CH,4ROTATE: MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AHJL PRINTADD AL,7PRINT: MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTATERETBINIHEX ENDPPRO_NAM ENDSEND AGAIN2.窗口程序code segmentassume cs:code,ss:codeorg 100hstart: mov ax,600hmov cx,0mov dx,184fhmov bh,7int 10hpos: mov ah,2mov dx,101ehmov bh,0int 10hmov cx,20get: mov ah,1int 21hcmp al,1bhjz exitloop getmov ax,601hmov cx,81ehmov dx,1031hmov bh,7int 10hjmp posexit: int 20hcode endsend start實(shí)驗(yàn)10磁盤文件操作程序一.實(shí)驗(yàn)?zāi)康?.掌握利用FCB進(jìn)行磁盤文件讀寫的方法;2.掌握利用HANDLE進(jìn)行磁盤文件讀寫的方法;3.INT21H的0FH、10H、14H、15H、16H、1AH號(hào)功能調(diào)用;4.INT21H的3CH、3DH、3FH、40H號(hào)功能調(diào)用。二.實(shí)驗(yàn)內(nèi)容1.編寫文本文件內(nèi)容顯示程序;2.編寫磁盤文件拷貝程序。三.實(shí)驗(yàn)要求1.復(fù)習(xí)INT21H0FH、10H、14H、15H、16H、1AH、3CH、3DH、3FH、40H號(hào)功能調(diào)用2.閱讀有關(guān)磁盤文件的FCB、HANDLE的內(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.將文本文件內(nèi)容顯示程序輸入,建立源程序文件且存盤;2.輸入,匯編,連接此程序,用DEBUG將目的程序帶參數(shù)調(diào)入,用D命令觀看并記錄PSP中的FCB內(nèi)容。3.將磁盤文件拷貝程序輸入,建立源程序文件且存盤;4.匯編、連接、運(yùn)行此程序,觀察按不同鍵所產(chǎn)生的效果。六.實(shí)驗(yàn)報(bào)告要求1.對(duì)照參考程序,畫出程序流程圖;2.實(shí)驗(yàn)中產(chǎn)生的問題及體會(huì);3.實(shí)驗(yàn)記錄。七.思考題按COPYAAABBB格式要求改寫此程序,取消人機(jī)對(duì)話,源文件和目的文件名由命令行輸入。參考程序清單:1.文本文件內(nèi)容顯示程序:stack segment stackdb 100hdup<?>stack endsdata segmentfcb db 36dup<0>count db 0char db 0dta db 0errmsg db 'fileaccesserror'data endscode segmentmain proc farassume cs:code,ss:stackstart: push dssub ax,axpush axmov ax,datamov es,axassume es:datamov si,5chmov di,offsetfcbmov cx,12cldrep movsbmov ds,axassume ds:datamov dx,offsetdtamov ah,1ahint 21hmov dx,offsetfcbmov ah,0fhint 21hcmp al,0jnz errormov wordptrfcb+0ch,0mov wordptrfcb+0eh,1mov fcb+20h,0again: lea dx,fcbmov ah,14hint 21hcmp al,0jnz errormov al,dtacmp al,1ahjz eofcmp al,9jz tabcall dispcharinc charcmp dta,0ahjnz againmov char,0inc countcmp count,24jnz againmov ah,0int 16hmov count,0jmp againtab: mov al,'

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論