版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、匯編語言上機(jī)實(shí)驗(yàn)指導(dǎo)書一、概述上機(jī)實(shí)驗(yàn)總學(xué)時(shí)為16學(xué)時(shí),其中綜合性實(shí)驗(yàn)為2學(xué)時(shí)。實(shí)驗(yàn)共有6項(xiàng)暫定為8次,每次2學(xué)時(shí)。1.實(shí)驗(yàn)輔導(dǎo)的主要內(nèi)容實(shí)驗(yàn)輔導(dǎo)的內(nèi)容包括每個(gè)實(shí)驗(yàn)的實(shí)驗(yàn)?zāi)康?;?shí)驗(yàn)內(nèi)容;對(duì)實(shí)驗(yàn)的算法及實(shí)驗(yàn)方法的必要說明;實(shí)驗(yàn)準(zhǔn)備;實(shí)驗(yàn)步驟;實(shí)驗(yàn)報(bào)告要求;實(shí)驗(yàn)程序及參考框圖。開始的實(shí)驗(yàn)介紹較細(xì),后面的實(shí)驗(yàn)簡要介紹。2.實(shí)驗(yàn)的軟硬件要求關(guān)于匯編語言程序設(shè)計(jì)的硬件要求不高,有IBM-PC/XT即可,但應(yīng)有彩色顯示器以便進(jìn)行圖形實(shí)驗(yàn)。軟件方面應(yīng)有版(包括LINK.EXE),與MS-DOS版本配套的DEBUG程序和EDIT.EXE編輯軟件(其它編輯軟件也可以)。3.加強(qiáng)實(shí)踐能力的培養(yǎng)實(shí)驗(yàn)?zāi)康牟还馐菫榱蓑?yàn)
2、證書本理論,更重要的是對(duì)實(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è)計(jì)的能力等。對(duì)某一問題用不同的程序?qū)崿F(xiàn)的能力,例如我們?yōu)槊總€(gè)實(shí)驗(yàn)提供了參考程序(或程序段),目的是讓每個(gè)實(shí)驗(yàn)者參照樣板程序?qū)?shí)驗(yàn)成功地實(shí)現(xiàn),在掌握其方法后,自己改變程序或自己編制程序加以實(shí)現(xiàn)。實(shí)驗(yàn)一 匯編語言運(yùn)行環(huán)境及方法、簡單程序設(shè)計(jì)(2學(xué)時(shí)、驗(yàn)證性)1.實(shí)驗(yàn)?zāi)康模?1) 熟悉匯編語言運(yùn)行環(huán)境和方法(2)了解如何使用匯編語言編制程序(3)
3、160;熟悉DEBUG有關(guān)命令的使用方法(4) 利用DEBUG掌握有關(guān)指令的功能(5) 利用DEBUG運(yùn)行簡單的程序段2.實(shí)驗(yàn)內(nèi)容(1)學(xué)會(huì)輸入、編輯匯編語言程序(2)學(xué)會(huì)對(duì)匯編語言程序進(jìn)行匯編、連接和運(yùn)行(3)進(jìn)入和退出DEBUG程序(4)學(xué)會(huì)DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。對(duì)于U命令、N命令、W命令等,也應(yīng)試一下。3.實(shí)驗(yàn)準(zhǔn)備(1)仔細(xì)閱讀有關(guān)匯編語言環(huán)境的內(nèi)容,事先準(zhǔn)備好使用的例子。(2)準(zhǔn)備好源程序清單、設(shè)計(jì)好調(diào)試步驟、測(cè)試方法、對(duì)運(yùn)行結(jié)果的分析。(3) 編寫一個(gè)程序:比較2個(gè)字符串所含的字符是否相同。若相同則顯示Match.,
4、否則顯示No match!;(1)仔細(xì)閱讀有關(guān)DEBUG命令的內(nèi)容,對(duì)有關(guān)命令,都要事先準(zhǔn)備好使用的例子。4.實(shí)驗(yàn)步驟(1)在DOS提示符下,進(jìn)入MASM目錄。(2)在MASM目錄下啟動(dòng)EDIT編輯程序,輸入源程序,并對(duì)其進(jìn)行匯編、連接和運(yùn)行。調(diào)用edit輸入、編輯源程序并保存在指定的目錄中;例:edit abc.asm用匯編程序masm對(duì)源程序匯編產(chǎn)生目標(biāo)文件obj。例:masm abc不斷修改錯(cuò)誤,直至匯編通過為止。用連接程序link產(chǎn)生執(zhí)行文件exe.例:link abc執(zhí)行程序可直接從DOS執(zhí)行程序,即在DOS環(huán)境中,輸入文件名即可。(3)詳細(xì)記錄每一步所用的命令,以及查看結(jié)果的方法和
5、具體結(jié)果。5.實(shí)驗(yàn)報(bào)告要求(1)源程序清單。(2) 如何啟動(dòng)和退出EDIT程序。(3) 如何對(duì)源程序進(jìn)行匯編及編輯。(4)如何啟動(dòng)和退出DEBUG程序。(5)整理每個(gè)DEBUG命令使用的方法,實(shí)際示例及執(zhí)行結(jié)果。(6)啟動(dòng)DEBUG后,要裝入某一個(gè).EXE文件,應(yīng)通過什么方法實(shí)現(xiàn)?實(shí)驗(yàn)二 循環(huán)程序、分支程序程序設(shè)計(jì)實(shí)驗(yàn)(4學(xué)時(shí)、驗(yàn)證性)1.實(shí)驗(yàn)?zāi)康模?1)掌握循環(huán)、分支程序的設(shè)計(jì)方法(2)進(jìn)一步熟悉利用DEBUG程序修改參數(shù)的方法,并檢查和驗(yàn)證結(jié)果的正確性。(3)學(xué)會(huì)針對(duì)不同的問題,選用不同的組織循環(huán)的方法。2.實(shí)驗(yàn)內(nèi)容(1)編寫一個(gè)程序S21,將內(nèi)存中一組有符號(hào)的字?jǐn)?shù)組按遞增的序列排序,并將
6、其中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上。(2)編寫一個(gè)程序S22,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示“c”;若是回車字符<CR>(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。3.實(shí)驗(yàn)準(zhǔn)備(1)編寫實(shí)驗(yàn)內(nèi)容要求的兩個(gè)程序。(2)寫出調(diào)試以上程序,即修改程序參數(shù),檢查結(jié)果的操作方法。(3)熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。4.實(shí)驗(yàn)步驟(1)用EDIT或其它編輯軟件,編寫.ASM源程序,例如S21.ASM及S22.ASM。(2)對(duì)其進(jìn)行匯編及連接,產(chǎn)生.EXE文件。(3)對(duì).EXE文件進(jìn)
7、行調(diào)試運(yùn)行。a.用DEBUG調(diào)試運(yùn)行,學(xué)會(huì)修改AL內(nèi)容的方法。b.對(duì)DSPKEY.EXE鍵入不同的字符,分別進(jìn)行調(diào)試。c.在MS-DOS下運(yùn)行這兩個(gè).EXE文件。5.實(shí)驗(yàn)報(bào)告要求(1)畫出兩個(gè)程序的流程圖,若要獨(dú)立編寫程序,應(yīng)列出相應(yīng)的程序清單。(2)說明本實(shí)驗(yàn)是如何利用DEBUG進(jìn)行調(diào)試的。實(shí)驗(yàn)三 子程序設(shè)計(jì)(4學(xué)時(shí)、驗(yàn)證性)實(shí)驗(yàn)3.1、本實(shí)驗(yàn)的目的在于讓同學(xué)們掌握同一模塊調(diào)用的方法。1.實(shí)驗(yàn)?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í)驗(yàn)內(nèi)容(1)編寫程序S31,將BUF開始的10個(gè)單元中的二
8、進(jìn)制數(shù)轉(zhuǎn)換成兩位十六進(jìn)制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序HEXASC實(shí)現(xiàn),在轉(zhuǎn)換過程中,通過子程序DISP實(shí)現(xiàn)顯示.(2)編寫一個(gè)主程序S32,從鍵盤接收若干個(gè)字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計(jì)字符串中字符b的個(gè)數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個(gè)數(shù).參數(shù)傳送采用堆棧實(shí)現(xiàn).主程序在子程序返回后,顯示字符”b”及其個(gè)數(shù)(設(shè)為一位十六進(jìn)制數(shù))。3實(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)容看到兩
9、個(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,串的長度N及待統(tǒng)計(jì)的字符“b”)順序壓如堆棧,在子程序調(diào)用后,通過BP指針對(duì)堆棧中的參數(shù)訪問,并將統(tǒng)計(jì)的結(jié)果通過堆棧返回。有關(guān)該方法的原理此處不再介紹。4實(shí)驗(yàn)準(zhǔn)備(1)預(yù)
10、習(xí)子程序設(shè)計(jì)的基本方法,根據(jù)實(shí)驗(yàn)內(nèi)容要求,畫出子程序及主程序的流程圖。(2)熟悉鍵盤鍵入字符串及用堆棧傳送參數(shù)的程序段編制方法。5實(shí)驗(yàn)步驟(1)編輯、匯編兩個(gè)源程序,生成相應(yīng)的可執(zhí)行文件(.EXE)(2)用DEBUG的R 命令,T 命令或G命令和D命令檢查遠(yuǎn)程調(diào)用及近程調(diào)用時(shí)堆棧的變化。特別是通過堆棧傳送的參數(shù)和子程序取出的參數(shù)是返回參數(shù)的詳細(xì)過程。(3)檢查程序執(zhí)行的結(jié)果是否正確。6實(shí)驗(yàn)報(bào)告要求 (1)分析遠(yuǎn)程調(diào)用與近程調(diào)用的區(qū)別,在用DEBUG有關(guān)命令觀察時(shí),執(zhí)行過程有何不同。(2)說明用堆棧傳送參數(shù)的過程及其具體方法。(3)分析實(shí)驗(yàn)結(jié)果及所遇到問題,并說明解決的方法。實(shí)驗(yàn)3.2、本程序的
11、目的在于使讀者掌握模塊間調(diào)用子程序的編寫方法.1.實(shí)驗(yàn)?zāi)康?(1) 了解多模塊程序設(shè)計(jì)方法。(2) 學(xué)會(huì)使用PUBLEC和EXTRN 偽指令解決模塊間的符號(hào)(如變量名,標(biāo)號(hào)等)通信問題。2. 實(shí)驗(yàn)內(nèi)容(1)編寫一個(gè)子程序,將主程序設(shè)定的內(nèi)存中字符串的小寫字母轉(zhuǎn)換成大寫字母并顯示出來.主程序S33用另一個(gè)模塊編寫。(2)編寫一個(gè)子程序,將主程序S34指定的字符所在的地址返回給主程序,字符串(字符串以$為結(jié)束標(biāo)志)與主程序在同一個(gè)模塊。3.實(shí)驗(yàn)準(zhǔn)備(1)仔細(xì)閱讀教材中有關(guān)模塊間通信的方法及模塊程序設(shè)計(jì)的方法。(2)弄清偽指令PUBLIC及EXTRN的功能及用法。4.實(shí)
12、驗(yàn)步驟(1)分別對(duì)實(shí)驗(yàn)1和實(shí)驗(yàn)2的主、子模塊進(jìn)行匯編,在連接時(shí),將它們裝配成一個(gè)以 .EXE為擴(kuò)展名的可執(zhí)行文件.觀察匯編及連接過程中有無錯(cuò)誤.(2)對(duì).EXE 文件進(jìn)行調(diào)試及運(yùn)行.(3)將實(shí)驗(yàn)1中的原字符串改為由鍵盤輸入,然后由子模塊將源串中的小寫字母轉(zhuǎn)換為大寫字母,并將源串與轉(zhuǎn)換后的兩個(gè)字串分兩行顯示出來(設(shè)鍵入字串長度小于80個(gè)字符).5.實(shí)驗(yàn)報(bào)告要求(1) 畫出相應(yīng)的程序流程圖。(2)扼要總結(jié)多模塊程序的特點(diǎn)和編寫方法。實(shí)驗(yàn)四 輸入/輸出實(shí)驗(yàn)(2學(xué)時(shí) 綜合性實(shí)驗(yàn))1 實(shí)驗(yàn)?zāi)康?1) 掌握輸入輸出程序設(shè)計(jì)的概念和方法。(2) 了解PC
13、機(jī)外圍芯片8255、8259的功能。(3)學(xué)習(xí)如何在PC機(jī)上編寫具有輸入輸出功能的程序,包括8255、8259芯片的使用方法。2 實(shí)驗(yàn)說明 本實(shí)驗(yàn)要求自行編寫一個(gè)鍵盤輸入處理程序,它可以完成鍵盤字符的讀入并進(jìn)行屏幕顯示,本實(shí)驗(yàn)要利用IBMPC系統(tǒng)的硬件結(jié)構(gòu),分別使用外圍芯片8255及8259。 在本例中,利用8255A的A端做數(shù)據(jù)輸入,對(duì)應(yīng)的端口地址為60H;利用B端口作控制端輸入,端口地址為61H。8255A的控制端口地址為63H 。本例的8259中斷控制器,其IRQ1端用于鍵盤中斷請(qǐng)求線。鍵盤通過它可以響CPU發(fā)出中斷請(qǐng)求。8259的I/O端口地址為21H,可以寫入中斷屏蔽字,以
14、對(duì)8個(gè)中斷源是否容許中斷進(jìn)行控制。在每次中斷結(jié)束時(shí),要通過I/O端口地址20H寫回一個(gè)中斷結(jié)束命令EOI ,使8259可以清除本次中斷。 因此本實(shí)驗(yàn)既屬于輸入輸出實(shí)驗(yàn),也屬于中斷實(shí)驗(yàn)。 有關(guān)說明將詳細(xì)地附在參考程序中。3實(shí)驗(yàn)內(nèi)容 利用pc機(jī)鍵盤,編寫一個(gè)讀入并顯示鍵盤輸入的演示程序。該程序只接受常規(guī)字符(包括回車鍵及退格鍵),對(duì)特殊功能鍵不進(jìn)行處理。在程序中設(shè)置這些特殊功能鍵對(duì)應(yīng)0編號(hào)即可,凡是檢測(cè)到鍵位編號(hào)為0值時(shí),均忽略對(duì)它們的處理。有鍵按下時(shí),送出的掃描碼的D7位為0時(shí),當(dāng)鍵抬起時(shí),掃描的碼D7位為1,以判定鍵是否被按下。4實(shí)驗(yàn)準(zhǔn)備(1) 預(yù)習(xí)輸入輸出程序設(shè)計(jì)的特點(diǎn)和方法。(2
15、) 仔細(xì)閱讀參考程序,弄清外圍芯片接口初始化的意義和方法。5實(shí)驗(yàn)步驟(1) 建立源文件,并通過匯編和連接,產(chǎn)生可執(zhí)行文件。(2) 運(yùn)行程序,觀察常規(guī)字符鍵及功能鍵按下時(shí)程序的反應(yīng),6實(shí)驗(yàn)報(bào)告要求(1) 給出程序框圖,包括主程序框圖、中斷處理程序框圖。(2)說明輸入輸出程序設(shè)計(jì)的特點(diǎn)。(3)討論:將SHIFT鍵及右SHIFT 鍵也進(jìn)行判別處理,它們的掃描碼為42及54。為記錄SHIFT鍵的按動(dòng)狀態(tài),可設(shè)一個(gè)標(biāo)志單元KBFLAG,右SHIFT按下,KBFLAG的D0位置1,左SHIFT按下,KBFLAG的D1位置1,放下左右的SHIFT鍵,KBFL
16、AG的相應(yīng)恢復(fù)為0。當(dāng)程序工作時(shí),應(yīng)能顯示上檔鍵的字符。實(shí)驗(yàn)五 字符處理程序?qū)嶒?yàn)1. 實(shí)驗(yàn)?zāi)康?1)熟悉串操作指令的功能與應(yīng)用(2)掌握串操作指令的尋址方式及使用方法,編寫常用的字符串處理程序。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ǔ)。3. 實(shí)驗(yàn)準(zhǔn)備(1)熟悉字符處理的方法和字符處理程序的設(shè)計(jì);(2)認(rèn)真預(yù)習(xí)有關(guān)串操作的指令極其尋址方式的特點(diǎn),能夠正確使用串操作指令,并準(zhǔn)備好數(shù)據(jù)。(3)按正常的方法將刪除字符程序編成子程序,規(guī)定子程序的入口和
17、出口參數(shù)。4實(shí)驗(yàn)步驟(1)用1號(hào)系統(tǒng)調(diào)用從鍵盤鍵入一個(gè)字符串,然后統(tǒng)計(jì)其中小寫字母的個(gè)數(shù)。程序每次執(zhí)行,都能得到不同的結(jié)果。(2)編寫一個(gè)在同一個(gè)字符串中刪除字符,并將其余字符向前遞補(bǔ)的程序。5實(shí)驗(yàn)報(bào)告要求(1)對(duì)照參考程序,畫出程序流程圖。(2)總結(jié)字符串處理的編程方法,提出改進(jìn)和完善此類程序的設(shè)計(jì)方案。實(shí)驗(yàn)六BIOS和DOS中斷調(diào)用應(yīng)用程序設(shè)計(jì)1. 實(shí)驗(yàn)?zāi)康?(1)了解 DOS、BIOS調(diào)用的基本功能、調(diào)用參數(shù)、返回參數(shù)。以及數(shù)據(jù)定義 掌握中斷通信程序的設(shè)計(jì)方法。(2)掌握如何利用掃描碼進(jìn)行功能控制。2. 實(shí)驗(yàn)內(nèi)容編寫一個(gè)可以進(jìn)行光標(biāo)左右移動(dòng)和插入字符的簡單字
18、處理程序。3.實(shí)驗(yàn)準(zhǔn)備(1) 復(fù)習(xí)相關(guān)內(nèi)容(2)了解鍵盤的掃描碼、ASCII碼及其顯示字符(如果存在可顯示字符形式)之間的對(duì)應(yīng)關(guān)系。4. 實(shí)驗(yàn)步驟(1) 建立源文件,匯編、連接產(chǎn)生可執(zhí)行文件。(2) 運(yùn)行程序,使得可以輸入字符和光標(biāo)左右移動(dòng)及字符的插入。5. 實(shí)驗(yàn)報(bào)告要求(1) 由參考程序,畫出簡單字處理程序框圖。(2) 討論如何實(shí)現(xiàn)光標(biāo)的上下移動(dòng)和字符的刪除。源程序清單實(shí)驗(yàn)2(1)編寫一個(gè)程序S21,將內(nèi)存中一組有符號(hào)的字?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)編寫一個(gè)程序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í)驗(yàn)3.1(1)編寫程序S31,將BUF開始的10個(gè)字節(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)編寫一個(gè)主程序S32,從鍵盤接收若干個(gè)字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計(jì)字符串中字符b的個(gè)數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個(gè)數(shù).參數(shù)傳送采用堆棧實(shí)現(xiàn).主程序在子程序返回后,顯示字符”b”及其個(gè)數(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)計(jì)個(gè)數(shù)在AL中,個(gè)數(shù)不能超過一位16進(jìn)制數(shù)MOVDL,ALANDDL, 0FHCMPDL,9JBENEXTADDDL,7 NEXT:ADDDL,30HMOVAH,2INT21H ;顯示統(tǒng)計(jì)個(gè)數(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í)驗(yàn)3.2(1)編寫一個(gè)子程序,將主程序設(shè)定的內(nèi)存中字符串的小寫字母轉(zhuǎn)換成大寫字母并顯示出來.主程序S33用另一個(gè)模塊編寫。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ǔ)一個(gè)$ 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)編寫一個(gè)子程序,將主程序S34指定的字符所在的地址返回給主程序,字符串與主程序在同一個(gè)模塊。;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í)驗(yàn)4S4利用pc機(jī)鍵盤,編寫一個(gè)讀入并顯示鍵盤輸入的演示程序。該程序只接受常規(guī)字符(包括回車鍵及退格鍵),對(duì)特殊功能鍵不進(jìn)行處理。在程序中設(shè)置這些特殊功能鍵對(duì)應(yīng)0編號(hào)即可,凡是檢測(cè)到鍵位編號(hào)為0值時(shí),均忽略對(duì)它們的處理。有鍵按下時(shí),送出的掃描碼的D7位為0時(shí),當(dāng)鍵抬起時(shí),掃描的碼D7位為1,以判定鍵是否被按下。PUBLIC SCANTAB,BUFFER,BUFPT1,BUFPT2 ,KBFLAGSTACK1 SEGMENTDB 256 DUP(?)STACK1 ENDSDATA SEGMEN
34、TBUFFERDB 16 DUP(0) ;定義10個(gè)字節(jié)的鍵盤緩沖區(qū)BUFPT1DW 0 ;指向鍵盤緩沖區(qū)的起點(diǎn),頭取BUFPT2DW 0 ;指向鍵盤緩沖區(qū)的終點(diǎn),尾存;注意當(dāng)BUFPT1=BUFPT2時(shí),表明緩沖區(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)試時(shí)可能產(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è)計(jì)的中斷服務(wù)程序,寫自行設(shè)計(jì)的中斷處理程序入口偏移量到矢量表中CLI ;關(guān)中斷,以防引起混亂MOVAX,3509H ;取類
36、型9的中斷向量INT21HMOVOLDCS9,ESMOVOLDIP9,BXPUSHDSLEADX,KBINTMOVAX,SEG KBINTMOVDS,AXMOVAX,2509H ;設(shè)置類型9的中斷向量INT21HPOPDSINAL,21HANDAL,0FDH ;允許定時(shí)器和鍵盤中斷的控制字送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ū)為空,且沒有按鍵時(shí)循環(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)信號(hào)INAL,60H ;讀8255A 口,即鍵盤掃描碼PUSHAXINAL,61H ;為置確認(rèn)信號(hào)ORAL,80H ;置鍵盤確認(rèn)信號(hào)OUT61H,AL ;置PB7位并送鍵盤ANDAL,7FH ;恢復(fù)鍵盤確認(rèn)信號(hào),亦即選通信號(hào)OUT61H,AL;將接收的掃描碼譯為ASCII碼POPAXTESTAL ,80H ;檢查是否按下?最高位為0或?yàn)?,分別表示鍵是按下還是放開JNZKBINT2 ;鍵抬起放棄本次輸入MOVBX ,OFFSET SCANTABXLAT ;查表找對(duì)應(yīng)ASCII碼CMPAL,0 ;是有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 麋鹿課件完美教學(xué)課件
- 消防應(yīng)急體系
- 3.1.1 鐵及其性質(zhì) 課件高一上學(xué)期化學(xué)(人教版2019必修第一冊(cè))
- 外匯期貨課件教學(xué)課件
- 池塘邊的小鴨教案反思
- 過生日說課稿
- 2025商場(chǎng)地產(chǎn)蛇年新春國潮年貨節(jié)(蛇年行大集主題)活動(dòng)策劃方案-47P
- 智慧人工智能:開拓人工智能創(chuàng)新應(yīng)用的方案
- 新能源汽車二手房交易合同模板
- 眼鏡制造合作合同
- 2024年山東省公務(wù)員考試《行測(cè)》真題及答案解析
- JGJ/T235-2011建筑外墻防水工程技術(shù)規(guī)程
- (正式版)HG∕T 21633-2024 玻璃鋼管和管件選用規(guī)定
- 2024年網(wǎng)上大學(xué)智能云服務(wù)交付工程師認(rèn)證考試題庫800題(含答案)
- 農(nóng)產(chǎn)品電子商務(wù)智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- MOOC 電工學(xué)(電氣工程學(xué)概論)-天津大學(xué) 中國大學(xué)慕課答案
- 特種設(shè)備使用單位日管控、周排查、月調(diào)度示范表
- 初中語文測(cè)試質(zhì)量分析表(模板)
- 低壓配電室巡檢記錄表
- 華師版八年級(jí)上冊(cè)數(shù)學(xué) 【說課稿】13.2.4 邊邊邊.doc
- 機(jī)械課程設(shè)計(jì)ZDD(答辯高分通過)
評(píng)論
0/150
提交評(píng)論