8086匯編語言程序設(shè)計實(shí)驗指導(dǎo)書_第1頁
8086匯編語言程序設(shè)計實(shí)驗指導(dǎo)書_第2頁
8086匯編語言程序設(shè)計實(shí)驗指導(dǎo)書_第3頁
8086匯編語言程序設(shè)計實(shí)驗指導(dǎo)書_第4頁
8086匯編語言程序設(shè)計實(shí)驗指導(dǎo)書_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、匯編語言上機(jī)實(shí)驗指導(dǎo)書一、概述上機(jī)實(shí)驗總學(xué)時為16學(xué)時,其中綜合性實(shí)驗為2學(xué)時。實(shí)驗共有6項暫定為8次,每次2學(xué)時。1.實(shí)驗輔導(dǎo)的主要內(nèi)容實(shí)驗輔導(dǎo)的內(nèi)容包括每個實(shí)驗的實(shí)驗?zāi)康?;?shí)驗內(nèi)容;對實(shí)驗的算法及實(shí)驗方法的必要說明;實(shí)驗準(zhǔn)備;實(shí)驗步驟;實(shí)驗報告要求;實(shí)驗程序及參考框圖。開始的實(shí)驗介紹較細(xì),后面的實(shí)驗簡要介紹。2.實(shí)驗的軟硬件要求關(guān)于匯編語言程序設(shè)計的硬件要求不高,有IBM-PC/XT即可,但應(yīng)有彩色顯示器以便進(jìn)行圖形實(shí)驗。軟件方面應(yīng)有版(包括LINK.EXE),與MS-DOS版本配套的DEBUG程序和EDIT.EXE編輯軟件(其它編輯軟件也可以)。3.加強(qiáng)實(shí)踐能力的培養(yǎng)實(shí)驗?zāi)康牟还馐菫榱蓑?/p>

2、證書本理論,更重要的是對實(shí)踐能力的培養(yǎng)。其中包括:實(shí)際調(diào)試程序的能力,例如修改程序參數(shù)的能力,查看結(jié)果的能力,設(shè)置斷點(diǎn)調(diào)試運(yùn)行的能力等;開發(fā)匯編語言應(yīng)用程序的能力,例如應(yīng)用有關(guān)匯編軟件的能力,進(jìn)行系統(tǒng)調(diào)用和BIOS功能調(diào)用的能力,進(jìn)行模塊程序設(shè)計的能力等。對某一問題用不同的程序?qū)崿F(xiàn)的能力,例如我們?yōu)槊總€實(shí)驗提供了參考程序(或程序段),目的是讓每個實(shí)驗者參照樣板程序?qū)?shí)驗成功地實(shí)現(xiàn),在掌握其方法后,自己改變程序或自己編制程序加以實(shí)現(xiàn)。實(shí)驗一 匯編語言運(yùn)行環(huán)境及方法、簡單程序設(shè)計(2學(xué)時、驗證性)1.實(shí)驗?zāi)康模?1) 熟悉匯編語言運(yùn)行環(huán)境和方法(2)了解如何使用匯編語言編制程序(3)&#

3、160;熟悉DEBUG有關(guān)命令的使用方法(4) 利用DEBUG掌握有關(guān)指令的功能(5) 利用DEBUG運(yùn)行簡單的程序段2.實(shí)驗內(nèi)容(1)學(xué)會輸入、編輯匯編語言程序(2)學(xué)會對匯編語言程序進(jìn)行匯編、連接和運(yùn)行(3)進(jìn)入和退出DEBUG程序(4)學(xué)會DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。對于U命令、N命令、W命令等,也應(yīng)試一下。3.實(shí)驗準(zhǔn)備(1)仔細(xì)閱讀有關(guān)匯編語言環(huán)境的內(nèi)容,事先準(zhǔn)備好使用的例子。(2)準(zhǔn)備好源程序清單、設(shè)計好調(diào)試步驟、測試方法、對運(yùn)行結(jié)果的分析。(3) 編寫一個程序:比較2個字符串所含的字符是否相同。若相同則顯示Match.,

4、否則顯示No match!;(1)仔細(xì)閱讀有關(guān)DEBUG命令的內(nèi)容,對有關(guān)命令,都要事先準(zhǔn)備好使用的例子。4.實(shí)驗步驟(1)在DOS提示符下,進(jìn)入MASM目錄。(2)在MASM目錄下啟動EDIT編輯程序,輸入源程序,并對其進(jìn)行匯編、連接和運(yùn)行。調(diào)用edit輸入、編輯源程序并保存在指定的目錄中;例:edit abc.asm用匯編程序masm對源程序匯編產(chǎn)生目標(biāo)文件obj。例:masm abc不斷修改錯誤,直至匯編通過為止。用連接程序link產(chǎn)生執(zhí)行文件exe.例:link abc執(zhí)行程序可直接從DOS執(zhí)行程序,即在DOS環(huán)境中,輸入文件名即可。(3)詳細(xì)記錄每一步所用的命令,以及查看結(jié)果的方法和

5、具體結(jié)果。5.實(shí)驗報告要求(1)源程序清單。(2) 如何啟動和退出EDIT程序。(3) 如何對源程序進(jìn)行匯編及編輯。(4)如何啟動和退出DEBUG程序。(5)整理每個DEBUG命令使用的方法,實(shí)際示例及執(zhí)行結(jié)果。(6)啟動DEBUG后,要裝入某一個.EXE文件,應(yīng)通過什么方法實(shí)現(xiàn)?實(shí)驗二 循環(huán)程序、分支程序程序設(shè)計實(shí)驗(4學(xué)時、驗證性)1.實(shí)驗?zāi)康模?1)掌握循環(huán)、分支程序的設(shè)計方法(2)進(jìn)一步熟悉利用DEBUG程序修改參數(shù)的方法,并檢查和驗證結(jié)果的正確性。(3)學(xué)會針對不同的問題,選用不同的組織循環(huán)的方法。2.實(shí)驗內(nèi)容(1)編寫一個程序S21,將內(nèi)存中一組有符號的字?jǐn)?shù)組按遞增的序列排序,并將

6、其中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上。(2)編寫一個程序S22,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示“c”;若是回車字符<CR>(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。3.實(shí)驗準(zhǔn)備(1)編寫實(shí)驗內(nèi)容要求的兩個程序。(2)寫出調(diào)試以上程序,即修改程序參數(shù),檢查結(jié)果的操作方法。(3)熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。4.實(shí)驗步驟(1)用EDIT或其它編輯軟件,編寫.ASM源程序,例如S21.ASM及S22.ASM。(2)對其進(jìn)行匯編及連接,產(chǎn)生.EXE文件。(3)對.EXE文件進(jìn)

7、行調(diào)試運(yùn)行。a.用DEBUG調(diào)試運(yùn)行,學(xué)會修改AL內(nèi)容的方法。b.對DSPKEY.EXE鍵入不同的字符,分別進(jìn)行調(diào)試。c.在MS-DOS下運(yùn)行這兩個.EXE文件。5.實(shí)驗報告要求(1)畫出兩個程序的流程圖,若要獨(dú)立編寫程序,應(yīng)列出相應(yīng)的程序清單。(2)說明本實(shí)驗是如何利用DEBUG進(jìn)行調(diào)試的。實(shí)驗三 子程序設(shè)計(4學(xué)時、驗證性)實(shí)驗3.1、本實(shí)驗的目的在于讓同學(xué)們掌握同一模塊調(diào)用的方法。1.實(shí)驗?zāi)康?1)掌握主程序與子程序之間的調(diào)用關(guān)系及調(diào)用方法。(2)掌握子程序調(diào)用過程中近程調(diào)用與遠(yuǎn)程調(diào)用的區(qū)別。(3)掌握通過堆棧轉(zhuǎn)送參數(shù)的方法。2實(shí)驗內(nèi)容(1)編寫程序S31,將BUF開始的10個單元中的二

8、進(jìn)制數(shù)轉(zhuǎn)換成兩位十六進(jìn)制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序HEXASC實(shí)現(xiàn),在轉(zhuǎn)換過程中,通過子程序DISP實(shí)現(xiàn)顯示.(2)編寫一個主程序S32,從鍵盤接收若干個字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計字符串中字符b的個數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個數(shù).參數(shù)傳送采用堆棧實(shí)現(xiàn).主程序在子程序返回后,顯示字符”b”及其個數(shù)(設(shè)為一位十六進(jìn)制數(shù))。3實(shí)驗說明(1)第一個實(shí)驗程序用子程序的近程調(diào)用實(shí)現(xiàn)。由于在調(diào)用HEXASC子程序時,子程序又調(diào)用了DISP子程序,這叫子程序的嵌套調(diào)用。實(shí)驗過程中可以從堆棧的內(nèi)容看到兩

9、個子程序的返回地址值。由于是近調(diào)用,地址值只包括返回地址的段內(nèi)偏移量。在每個子程序的執(zhí)行中,檢查CS值是不變的。(2)第二個程序是利用遠(yuǎn)調(diào)用的方法調(diào)用子程序的。在遠(yuǎn)調(diào)用情況下,主程序與子程序處在不同的邏輯代碼段中,可在子程序執(zhí)行中查看CS值,它與主程序中的CS值是不同的。子程序調(diào)用后,堆棧中保留了返回地址的段地址及段內(nèi)偏移量。(3)第二個程序中,主程序與子程序之間參數(shù)的傳送是由堆棧實(shí)現(xiàn)的。一段是將參數(shù)(此處是串首址TABLE,串的長度N及待統(tǒng)計的字符“b”)順序壓如堆棧,在子程序調(diào)用后,通過BP指針對堆棧中的參數(shù)訪問,并將統(tǒng)計的結(jié)果通過堆棧返回。有關(guān)該方法的原理此處不再介紹。4實(shí)驗準(zhǔn)備(1)預(yù)

10、習(xí)子程序設(shè)計的基本方法,根據(jù)實(shí)驗內(nèi)容要求,畫出子程序及主程序的流程圖。(2)熟悉鍵盤鍵入字符串及用堆棧傳送參數(shù)的程序段編制方法。5實(shí)驗步驟(1)編輯、匯編兩個源程序,生成相應(yīng)的可執(zhí)行文件(.EXE)(2)用DEBUG的R 命令,T 命令或G命令和D命令檢查遠(yuǎn)程調(diào)用及近程調(diào)用時堆棧的變化。特別是通過堆棧傳送的參數(shù)和子程序取出的參數(shù)是返回參數(shù)的詳細(xì)過程。(3)檢查程序執(zhí)行的結(jié)果是否正確。6實(shí)驗報告要求 (1)分析遠(yuǎn)程調(diào)用與近程調(diào)用的區(qū)別,在用DEBUG有關(guān)命令觀察時,執(zhí)行過程有何不同。(2)說明用堆棧傳送參數(shù)的過程及其具體方法。(3)分析實(shí)驗結(jié)果及所遇到問題,并說明解決的方法。實(shí)驗3.2、本程序的

11、目的在于使讀者掌握模塊間調(diào)用子程序的編寫方法.1.實(shí)驗?zāi)康?(1) 了解多模塊程序設(shè)計方法。(2) 學(xué)會使用PUBLEC和EXTRN 偽指令解決模塊間的符號(如變量名,標(biāo)號等)通信問題。2. 實(shí)驗內(nèi)容(1)編寫一個子程序,將主程序設(shè)定的內(nèi)存中字符串的小寫字母轉(zhuǎn)換成大寫字母并顯示出來.主程序S33用另一個模塊編寫。(2)編寫一個子程序,將主程序S34指定的字符所在的地址返回給主程序,字符串(字符串以$為結(jié)束標(biāo)志)與主程序在同一個模塊。3.實(shí)驗準(zhǔn)備(1)仔細(xì)閱讀教材中有關(guān)模塊間通信的方法及模塊程序設(shè)計的方法。(2)弄清偽指令PUBLIC及EXTRN的功能及用法。4.實(shí)

12、驗步驟(1)分別對實(shí)驗1和實(shí)驗2的主、子模塊進(jìn)行匯編,在連接時,將它們裝配成一個以 .EXE為擴(kuò)展名的可執(zhí)行文件.觀察匯編及連接過程中有無錯誤.(2)對.EXE 文件進(jìn)行調(diào)試及運(yùn)行.(3)將實(shí)驗1中的原字符串改為由鍵盤輸入,然后由子模塊將源串中的小寫字母轉(zhuǎn)換為大寫字母,并將源串與轉(zhuǎn)換后的兩個字串分兩行顯示出來(設(shè)鍵入字串長度小于80個字符).5.實(shí)驗報告要求(1) 畫出相應(yīng)的程序流程圖。(2)扼要總結(jié)多模塊程序的特點(diǎn)和編寫方法。實(shí)驗四   輸入/輸出實(shí)驗(2學(xué)時 綜合性實(shí)驗)1 實(shí)驗?zāi)康?1) 掌握輸入輸出程序設(shè)計的概念和方法。(2) 了解PC

13、機(jī)外圍芯片8255、8259的功能。(3)學(xué)習(xí)如何在PC機(jī)上編寫具有輸入輸出功能的程序,包括8255、8259芯片的使用方法。2 實(shí)驗說明 本實(shí)驗要求自行編寫一個鍵盤輸入處理程序,它可以完成鍵盤字符的讀入并進(jìn)行屏幕顯示,本實(shí)驗要利用IBMPC系統(tǒng)的硬件結(jié)構(gòu),分別使用外圍芯片8255及8259。 在本例中,利用8255A的A端做數(shù)據(jù)輸入,對應(yīng)的端口地址為60H;利用B端口作控制端輸入,端口地址為61H。8255A的控制端口地址為63H 。本例的8259中斷控制器,其IRQ1端用于鍵盤中斷請求線。鍵盤通過它可以響CPU發(fā)出中斷請求。8259的I/O端口地址為21H,可以寫入中斷屏蔽字,以

14、對8個中斷源是否容許中斷進(jìn)行控制。在每次中斷結(jié)束時,要通過I/O端口地址20H寫回一個中斷結(jié)束命令EOI ,使8259可以清除本次中斷。 因此本實(shí)驗既屬于輸入輸出實(shí)驗,也屬于中斷實(shí)驗。 有關(guān)說明將詳細(xì)地附在參考程序中。3實(shí)驗內(nèi)容 利用pc機(jī)鍵盤,編寫一個讀入并顯示鍵盤輸入的演示程序。該程序只接受常規(guī)字符(包括回車鍵及退格鍵),對特殊功能鍵不進(jìn)行處理。在程序中設(shè)置這些特殊功能鍵對應(yīng)0編號即可,凡是檢測到鍵位編號為0值時,均忽略對它們的處理。有鍵按下時,送出的掃描碼的D7位為0時,當(dāng)鍵抬起時,掃描的碼D7位為1,以判定鍵是否被按下。4實(shí)驗準(zhǔn)備(1) 預(yù)習(xí)輸入輸出程序設(shè)計的特點(diǎn)和方法。(2

15、) 仔細(xì)閱讀參考程序,弄清外圍芯片接口初始化的意義和方法。5實(shí)驗步驟(1) 建立源文件,并通過匯編和連接,產(chǎn)生可執(zhí)行文件。(2) 運(yùn)行程序,觀察常規(guī)字符鍵及功能鍵按下時程序的反應(yīng),6實(shí)驗報告要求(1) 給出程序框圖,包括主程序框圖、中斷處理程序框圖。(2)說明輸入輸出程序設(shè)計的特點(diǎn)。(3)討論:將SHIFT鍵及右SHIFT 鍵也進(jìn)行判別處理,它們的掃描碼為42及54。為記錄SHIFT鍵的按動狀態(tài),可設(shè)一個標(biāo)志單元KBFLAG,右SHIFT按下,KBFLAG的D0位置1,左SHIFT按下,KBFLAG的D1位置1,放下左右的SHIFT鍵,KBFL

16、AG的相應(yīng)恢復(fù)為0。當(dāng)程序工作時,應(yīng)能顯示上檔鍵的字符。實(shí)驗五 字符處理程序?qū)嶒?. 實(shí)驗?zāi)康?1)熟悉串操作指令的功能與應(yīng)用(2)掌握串操作指令的尋址方式及使用方法,編寫常用的字符串處理程序。2實(shí)驗內(nèi)容(1) 字符串統(tǒng)計。自STRN開始的存儲區(qū)中,有一個字符串,統(tǒng)計其中含有小寫字母的個數(shù),將統(tǒng)計結(jié)果以兩位十進(jìn)制數(shù)顯示在屏幕上。(2)在給定的字符串中,刪除重復(fù)的字符,其余的字符向前遞補(bǔ)。3. 實(shí)驗準(zhǔn)備(1)熟悉字符處理的方法和字符處理程序的設(shè)計;(2)認(rèn)真預(yù)習(xí)有關(guān)串操作的指令極其尋址方式的特點(diǎn),能夠正確使用串操作指令,并準(zhǔn)備好數(shù)據(jù)。(3)按正常的方法將刪除字符程序編成子程序,規(guī)定子程序的入口和

17、出口參數(shù)。4實(shí)驗步驟(1)用1號系統(tǒng)調(diào)用從鍵盤鍵入一個字符串,然后統(tǒng)計其中小寫字母的個數(shù)。程序每次執(zhí)行,都能得到不同的結(jié)果。(2)編寫一個在同一個字符串中刪除字符,并將其余字符向前遞補(bǔ)的程序。5實(shí)驗報告要求(1)對照參考程序,畫出程序流程圖。(2)總結(jié)字符串處理的編程方法,提出改進(jìn)和完善此類程序的設(shè)計方案。實(shí)驗六BIOS和DOS中斷調(diào)用應(yīng)用程序設(shè)計1. 實(shí)驗?zāi)康?(1)了解 DOS、BIOS調(diào)用的基本功能、調(diào)用參數(shù)、返回參數(shù)。以及數(shù)據(jù)定義 掌握中斷通信程序的設(shè)計方法。(2)掌握如何利用掃描碼進(jìn)行功能控制。2. 實(shí)驗內(nèi)容編寫一個可以進(jìn)行光標(biāo)左右移動和插入字符的簡單字

18、處理程序。3.實(shí)驗準(zhǔn)備(1) 復(fù)習(xí)相關(guān)內(nèi)容(2)了解鍵盤的掃描碼、ASCII碼及其顯示字符(如果存在可顯示字符形式)之間的對應(yīng)關(guān)系。4. 實(shí)驗步驟(1) 建立源文件,匯編、連接產(chǎn)生可執(zhí)行文件。(2) 運(yùn)行程序,使得可以輸入字符和光標(biāo)左右移動及字符的插入。5. 實(shí)驗報告要求(1) 由參考程序,畫出簡單字處理程序框圖。(2) 討論如何實(shí)現(xiàn)光標(biāo)的上下移動和字符的刪除。源程序清單實(shí)驗2(1)編寫一個程序S21,將內(nèi)存中一組有符號的字?jǐn)?shù)組按遞增的序列排序,并將其中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上。;S21.ASM DSEG SEGMENT

19、 X DW 234H,32FH,90DH,123EH,-78EH,0ACFH,-234H,98H,-23DFH COUNT DW 9DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGMAIN PROC FARSTART: PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV CX,COUNTLAB0: MOV BX,1 DEC CX JZ LAB3 PUSH CX LEA DI,XLAB1: MOV AX,DI CMP AX,DI+2 JLE LAB2 XOR BX,BX XCHG AX,DI+2 MOV

20、DI,AXLAB2: ADD DI,2 LOOP LAB1 POP CX CMP BX,0 JZ LAB0LAB3: LEA DI,X MOV CX,COUNTLAB4: PUSH CX MOV CH,4 MOV BX,DILAB5: MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH CMP DL,9 JBE LAB6 ADD DL,7LAB6: ADD DL,30H MOV AH,2 INT 21H DEC CH JNZ LAB5 MOV DL,20H MOV AH,2 INT 21H ADD DI,2 POP CX LOOP LAB4 MOV DL,0DH M

21、OV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H LEA DI,X MOV CX,COUNTLAB7: MOV BX,DI PUSH CX MOV CX,16LAB8: XOR DL,DL ROL BX,1 RCL DL,1 ADD DL,30H MOV AH,2 INT 21H LOOP LAB8 MOV DL,'B' MOV AH,2 INT 21H MOV DL,' ' MOV AH,2 INT 21H ADD DI,2 POP CX LOOP LAB7 RETMAIN ENDPCSEG ENDSEND START其中

22、斜體字部分為以二進(jìn)制輸出。(2)編寫一個程序S22,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示“c”;若是回車字符<CR>(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。;S22.ASM CODE SEGMENT ASSUME CS:CODE START: MOVAH,1 INT21H ;等待鍵入字符,送AL CMPAL,0DH ;是否是回車符? JZDONE ;是則轉(zhuǎn)DONE退出程序 CMPAL,'0' JBNEXT CMPAL,'9' JACHARUP MOVDL,AL MO

23、VAH,2 INT21H JMPSTART CHARUP: CMPAL,41H JBNEXT CMPAL,5AH JACHRDN DISPC: MOVDL,'c' MOVAH,2 INT21H NEXT: JMPSTART CHRDN: CMPAL,61H JBNEXT CMPAL,7AH JANEXT JMPDISPC DONE: MOVAH,4CH INT21H CODE ENDS END START實(shí)驗3.1(1)編寫程序S31,將BUF開始的10個字節(jié)單元中的二進(jìn)制數(shù)轉(zhuǎn)換成兩位十六進(jìn)制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序HEXASC實(shí)現(xiàn),在轉(zhuǎn)換過程

24、中,通過子程序DISP實(shí)現(xiàn)顯示。;S31.ASMDATA SEGMENT BUFDB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FHDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV CX,10LEABX,BUF AGAIN:MOV AL, BXCALLHEXASCINCBXLOOP AGAINMOV AH,4CHINT21H HEXASC PROC NEARPUSH AXMOV DL,ALPUSHCXMOV CL,4SHRDL,CLPOPCXCALL

25、DISP ;顯示高位HEX數(shù)POPAXMOV DL,ALAND DL,0FHCALL DISPRET HEXASC ENDPDISP PROCCMP DL,9JBE NEXTADD DL,7 NEXT: ADD DL,30HMOV AH,2INT 21H ;顯示RETDISP ENDPCODE ENDS END START(2)編寫一個主程序S32,從鍵盤接收若干個字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計字符串中字符b的個數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個數(shù).參數(shù)傳送采用堆棧實(shí)現(xiàn).主程序在子程序返回后,顯示字符”b”及其個數(shù)(設(shè)為一位十

26、六進(jìn)制數(shù))。DATA SEGMENTCHAR DB 'b' BUF DB 50H, ?,50H DUP(?)CRLF DB 0DH,0AH,'$'DATA ENDS MCODE SEGMENT ASSUME CS:MCODE, DS:DATA START:MOVAX,DATAMOVDS,AXLEADX,BUFMOVAH,0AHINT21HLEADX,CRLFMOVAH,9INT21HLEASI,BUFMOVCL, SI+1MOVCH, 0 ;CX中為字符串長度INCSIINCSI ;SI指向串首址TABLEMOVAL,CHARMOVAH,0 ;AX中為待查字符P

27、USHSIPUSHCXPUSHAX ; 參數(shù)送堆棧CALLFAR PTR CHECKMOVDL,CHARMOVAH,2INT21HPOPAX ;統(tǒng)計個數(shù)在AL中,個數(shù)不能超過一位16進(jìn)制數(shù)MOVDL,ALANDDL, 0FHCMPDL,9JBENEXTADDDL,7 NEXT:ADDDL,30HMOVAH,2INT21H ;顯示統(tǒng)計個數(shù)MOVAH,4CHINT21H MCODE ENDS SCODE SEGMENT ASSUME CS:SCODE CHECK PROC FARPUSHBPMOVBP,SPMOVSI,BP+10MOVCX, BP+8MOVAX, BP+6XORAH, AH AGA

28、IN:CMPAL,SIJNENEXT1INCAH NEXT1: INCSILOOPAGAINMOVAL, AHMOVBP+10,AXPOPBPRET4 CHECK ENDP SCODE ENDS END START實(shí)驗3.2(1)編寫一個子程序,將主程序設(shè)定的內(nèi)存中字符串的小寫字母轉(zhuǎn)換成大寫字母并顯示出來.主程序S33用另一個模塊編寫。EXTRN DNTOUP:FAR PUBLIC STRING1,STRING2 DATA SEGMENT STRING1 DB 'thIs is A book','$' STRING2 DB 80 DUP(?) DATA ENDS

29、 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX CALL FAR PTR DNTOUP MOV AH,4CH INT 21H CODE ENDS END START;DNTOUP.SM為子模塊的文件名 PUBLIC DNTOUP EXTRN STRING1:BYTE,STRING2:BYTE CODE SEGMENT DNTOUP PROC FAR ASSUME CS:CODE MOVBX,0 CYCLE: MOVAL,STRING1BX CMPAL,24H ;是否是STRING1結(jié)尾 JZDONE ;是&q

30、uot;$",轉(zhuǎn)DONE CMPAL,61H ;是小寫字母嗎? JBNEXT ;不是轉(zhuǎn)NEXT CMPAL,7AH JANEXT SUBAL, 20H ;轉(zhuǎn)為大寫字母 NEXT: MOVSTRING2BX,AL INCBX JMPCYCLE DONE: MOVAL,'$' MOVSTRING2BX,AL ;補(bǔ)一個$ MOVDL,0DH MOVAH, 2 INT21H MOVDL,0AH INT21H ;顯示回車換行 LEADX, STRING1 MOVAH,9 INT21H ;顯示源串內(nèi)容 MOVDL,0AH MOVAH,2 INT21H ;回車換行 MOVDX,OF

31、FSET STRING2 MOVAH,9 INT21H ;顯示轉(zhuǎn)換后的大寫串 RET DNTOUP ENDP CODE ENDS END DNTOUP(2)編寫一個子程序,將主程序S34指定的字符所在的地址返回給主程序,字符串與主程序在同一個模塊。;S34.ASM為主模塊程序名 EXTRN FINDC:FAR PUBLIC STRN DATA SEGMENT STRN DB 'LINK DISPLAY SUBROUTING$' ADDR DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOV

32、DS,AX MOVAH,1 INT21H CALLFAR PTR FINDC MOVADDR, DI MOVAH,4CH INT21H CODE ENDS END START;FINDC.ASM為子模塊程序名 PUBLIC FINDC EXTRN STRN:BYTE CODE SEGMENT ASSUME CS:CODE FINDC PROC FAR START: LEADI,STRN AGAIN:CMPBYTE PTRDI,'$' JZDONE CMPAL,DI JNZNEXT DONE1:RET NEXT:INCDI JMPAGAIN DONE:MOVDI,0FFFFH ;

33、找不到返回0FFFFH JMPDONE1 FINDC ENDP CODE ENDS END START實(shí)驗4S4利用pc機(jī)鍵盤,編寫一個讀入并顯示鍵盤輸入的演示程序。該程序只接受常規(guī)字符(包括回車鍵及退格鍵),對特殊功能鍵不進(jìn)行處理。在程序中設(shè)置這些特殊功能鍵對應(yīng)0編號即可,凡是檢測到鍵位編號為0值時,均忽略對它們的處理。有鍵按下時,送出的掃描碼的D7位為0時,當(dāng)鍵抬起時,掃描的碼D7位為1,以判定鍵是否被按下。PUBLIC SCANTAB,BUFFER,BUFPT1,BUFPT2 ,KBFLAGSTACK1 SEGMENTDB 256 DUP(?)STACK1 ENDSDATA SEGMEN

34、TBUFFERDB 16 DUP(0) ;定義10個字節(jié)的鍵盤緩沖區(qū)BUFPT1DW 0 ;指向鍵盤緩沖區(qū)的起點(diǎn),頭取BUFPT2DW 0 ;指向鍵盤緩沖區(qū)的終點(diǎn),尾存;注意當(dāng)BUFPT1=BUFPT2時,表明緩沖區(qū)空KBFLAGDB 0PROMPTDB '-kbd_io program begin -',0DH,0AH,'$'SCANTABDB 0,0,'1234567890-=',8,0 DB 'QWERTYUIOP',0,0DB 'ASDFGHJKL',3BH,27H,0DHDB 'ZXCVBNM,.

35、/',0DB 20H,0,0,0,0,0,0,0,0,0,0,0,0,0;由于不同鍵盤按鍵及分布各不相同,因此在調(diào)試時可能產(chǎn)生按鍵和顯示有差異 DB '789-456+1230.'EVEN OLDIP9 DW ? OLDCS9 DW ? DATA ENDS EXTRN KBINT: FAR ;外部引用說明 CODE SEGMENT ;主程序段 ASSUME CS:CODE ,DS:DATA START:MOVAX,DATAMOVDS,AX;建立自行設(shè)計的中斷服務(wù)程序,寫自行設(shè)計的中斷處理程序入口偏移量到矢量表中CLI ;關(guān)中斷,以防引起混亂MOVAX,3509H ;取類

36、型9的中斷向量INT21HMOVOLDCS9,ESMOVOLDIP9,BXPUSHDSLEADX,KBINTMOVAX,SEG KBINTMOVDS,AXMOVAX,2509H ;設(shè)置類型9的中斷向量INT21HPOPDSINAL,21HANDAL,0FDH ;允許定時器和鍵盤中斷的控制字送8259OUT21H,ALLEADX,PROMPT ;在屏幕上顯示-kbd_io program begin -MOVAH,9 INT21H STI ;開中斷;程序功能:讀鍵盤并顯示字符 FOREVER: CALL KBGET ;讀緩沖區(qū)字符 TESTKBFLAG,80H ;如果輸入任意功能鍵,則使KBFL

37、AG=80,退出 JNZENDINT PUSHAX CALLDISPCHAR ;顯示接收字符 POPAX CMPAL,'A' JZENDINT ;輸入A結(jié)束程序 CMPAL,0DH ;是回車符嗎? JNZFOREVER ;不是再接收 MOVAL,0AH CALLDISPCHAR ;是,換行 JMPFOREVER ;接收下一行字符 ENDINT:MOVDX ,OLDIP9 MOVAX ,OLDCS9 MOVDS,AX MOVAH,25H MOVAL,9 INT21H MOVAH,4CH INT21H;KBGET1取緩沖區(qū)字符->(返回) KBGET PROC NEAR PU

38、SHBX CLI MOVBX,BUFPT1 CMPBX,BUFPT2 JNZKBGET2 ;緩沖區(qū)不空,轉(zhuǎn)KBGET2,取字符 CMPKBFLAG,0 JNZKBGET3 STI ;開中斷 POPBX JMPKBGET ;當(dāng)輸入緩沖區(qū)為空,且沒有按鍵時循環(huán)等待 ; 取緩沖區(qū)字符 KBGET2:MOVAL,BUFFER+BX ;取緩沖區(qū)字符 INCBX ; 首指針加1 CMPBX,16 ;到緩沖區(qū)尾嗎? JCKBGET3 ; 未到,轉(zhuǎn),KBGET3 MOVBX,0 ;到,指向緩沖區(qū)首 KBGET3:MOVBUFPT1,BX ;保護(hù)首指針 POPBX ;恢復(fù)BX寄存器 RET KBGET ENDP

39、 ;CHAR字符顯示子程序 DISPCHAR PROC NEAR PUSHBX MOVBX,0 MOVAH,0EH INT10H POPBX RET DISPCHAR ENDP CODE ENDS END START;S41;KBINT鍵盤中斷處理程序EXTRN SCANTAB:BYTE,BUFFER:BYTE,KBFLAG:BYTE,BUFPT1:WORD,BUFPT2:WORDCSEG SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CSEGPUBLIC KBINTKBINT PROC FARPUSHBXPUSHAX;讀鍵盤數(shù)據(jù),并發(fā)確認(rèn)信號INAL,60H ;讀8255A 口,即鍵盤掃描碼PUSHAXINAL,61H ;為置確認(rèn)信號ORAL,80H ;置鍵盤確認(rèn)信號OUT61H,AL ;置PB7位并送鍵盤ANDAL,7FH ;恢復(fù)鍵盤確認(rèn)信號,亦即選通信號OUT61H,AL;將接收的掃描碼譯為ASCII碼POPAXTESTAL ,80H ;檢查是否按下?最高位為0或為1,分別表示鍵是按下還是放開JNZKBINT2 ;鍵抬起放棄本次輸入MOVBX ,OFFSET SCANTABXLAT ;查表找對應(yīng)ASCII碼CMPAL,0 ;是有

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論