




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、匯編語言上機實驗指導書一、概述上機實驗總學時為16學時,其中綜合性實驗為2學時。實驗共有6項暫定為8次,每次2學時。1.實驗輔導的主要內(nèi)容實驗輔導的內(nèi)容包括每個實驗的實驗?zāi)康?;實驗?nèi)容;對實驗的算法及實驗方法的必要說明;實驗準備;實驗步驟;實驗報告要求;實驗程序及參考框圖。開始的實驗介紹較細,后面的實驗簡要介紹。2.實驗的軟硬件要求關(guān)于匯編語言程序設(shè)計的硬件要求不高,有IBM-PC/XT即可,但應(yīng)有彩色顯示器以便進行圖形實驗。軟件方面應(yīng)有版(包括LINK.EXE),與MS-DOS版本配套的DEBUG程序和EDIT.EXE編輯軟件(其它編輯軟件也可以)。3.加強實踐能力的培養(yǎng)實驗?zāi)康牟还馐菫榱蓑?/p>
2、證書本理論,更重要的是對實踐能力的培養(yǎng)。其中包括:實際調(diào)試程序的能力,例如修改程序參數(shù)的能力,查看結(jié)果的能力,設(shè)置斷點調(diào)試運行的能力等;開發(fā)匯編語言應(yīng)用程序的能力,例如應(yīng)用有關(guān)匯編軟件的能力,進行系統(tǒng)調(diào)用和BIOS功能調(diào)用的能力,進行模塊程序設(shè)計的能力等。對某一問題用不同的程序?qū)崿F(xiàn)的能力,例如我們?yōu)槊總€實驗提供了參考程序(或程序段),目的是讓每個實驗者參照樣板程序?qū)嶒灣晒Φ貙崿F(xiàn),在掌握其方法后,自己改變程序或自己編制程序加以實現(xiàn)。實驗一 匯編語言運行環(huán)境及方法、簡單程序設(shè)計(2學時、驗證性)1.實驗?zāi)康模?1) 熟悉匯編語言運行環(huán)境和方法(2)了解如何使用匯編語言編制程序(3)
3、160;熟悉DEBUG有關(guān)命令的使用方法(4) 利用DEBUG掌握有關(guān)指令的功能(5) 利用DEBUG運行簡單的程序段2.實驗內(nèi)容(1)學會輸入、編輯匯編語言程序(2)學會對匯編語言程序進行匯編、連接和運行(3)進入和退出DEBUG程序(4)學會DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。對于U命令、N命令、W命令等,也應(yīng)試一下。3.實驗準備(1)仔細閱讀有關(guān)匯編語言環(huán)境的內(nèi)容,事先準備好使用的例子。(2)準備好源程序清單、設(shè)計好調(diào)試步驟、測試方法、對運行結(jié)果的分析。(3) 編寫一個程序:比較2個字符串所含的字符是否相同。若相同則顯示Match.,
4、否則顯示No match!;(1)仔細閱讀有關(guān)DEBUG命令的內(nèi)容,對有關(guān)命令,都要事先準備好使用的例子。4.實驗步驟(1)在DOS提示符下,進入MASM目錄。(2)在MASM目錄下啟動EDIT編輯程序,輸入源程序,并對其進行匯編、連接和運行。調(diào)用edit輸入、編輯源程序并保存在指定的目錄中;例:edit abc.asm用匯編程序masm對源程序匯編產(chǎn)生目標文件obj。例:masm abc不斷修改錯誤,直至匯編通過為止。用連接程序link產(chǎn)生執(zhí)行文件exe.例:link abc執(zhí)行程序可直接從DOS執(zhí)行程序,即在DOS環(huán)境中,輸入文件名即可。(3)詳細記錄每一步所用的命令,以及查看結(jié)果的方法和
5、具體結(jié)果。5.實驗報告要求(1)源程序清單。(2) 如何啟動和退出EDIT程序。(3) 如何對源程序進行匯編及編輯。(4)如何啟動和退出DEBUG程序。(5)整理每個DEBUG命令使用的方法,實際示例及執(zhí)行結(jié)果。(6)啟動DEBUG后,要裝入某一個.EXE文件,應(yīng)通過什么方法實現(xiàn)?實驗二 循環(huán)程序、分支程序程序設(shè)計實驗(4學時、驗證性)1.實驗?zāi)康模?1)掌握循環(huán)、分支程序的設(shè)計方法(2)進一步熟悉利用DEBUG程序修改參數(shù)的方法,并檢查和驗證結(jié)果的正確性。(3)學會針對不同的問題,選用不同的組織循環(huán)的方法。2.實驗內(nèi)容(1)編寫一個程序S21,將內(nèi)存中一組有符號的字數(shù)組按遞增的序列排序,并將
6、其中的二進制數(shù)以十六進制的形式顯示在屏幕上。(2)編寫一個程序S22,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示“c”;若是回車字符<CR>(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。3.實驗準備(1)編寫實驗內(nèi)容要求的兩個程序。(2)寫出調(diào)試以上程序,即修改程序參數(shù),檢查結(jié)果的操作方法。(3)熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。4.實驗步驟(1)用EDIT或其它編輯軟件,編寫.ASM源程序,例如S21.ASM及S22.ASM。(2)對其進行匯編及連接,產(chǎn)生.EXE文件。(3)對.EXE文件進
7、行調(diào)試運行。a.用DEBUG調(diào)試運行,學會修改AL內(nèi)容的方法。b.對DSPKEY.EXE鍵入不同的字符,分別進行調(diào)試。c.在MS-DOS下運行這兩個.EXE文件。5.實驗報告要求(1)畫出兩個程序的流程圖,若要獨立編寫程序,應(yīng)列出相應(yīng)的程序清單。(2)說明本實驗是如何利用DEBUG進行調(diào)試的。實驗三 子程序設(shè)計(4學時、驗證性)實驗3.1、本實驗的目的在于讓同學們掌握同一模塊調(diào)用的方法。1.實驗?zāi)康?1)掌握主程序與子程序之間的調(diào)用關(guān)系及調(diào)用方法。(2)掌握子程序調(diào)用過程中近程調(diào)用與遠程調(diào)用的區(qū)別。(3)掌握通過堆棧轉(zhuǎn)送參數(shù)的方法。2實驗內(nèi)容(1)編寫程序S31,將BUF開始的10個單元中的二
8、進制數(shù)轉(zhuǎn)換成兩位十六進制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序HEXASC實現(xiàn),在轉(zhuǎn)換過程中,通過子程序DISP實現(xiàn)顯示.(2)編寫一個主程序S32,從鍵盤接收若干個字符,然后用遠調(diào)用的方法,調(diào)用子程序統(tǒng)計字符串中字符b的個數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個數(shù).參數(shù)傳送采用堆棧實現(xiàn).主程序在子程序返回后,顯示字符”b”及其個數(shù)(設(shè)為一位十六進制數(shù))。3實驗說明(1)第一個實驗程序用子程序的近程調(diào)用實現(xiàn)。由于在調(diào)用HEXASC子程序時,子程序又調(diào)用了DISP子程序,這叫子程序的嵌套調(diào)用。實驗過程中可以從堆棧的內(nèi)容看到兩
9、個子程序的返回地址值。由于是近調(diào)用,地址值只包括返回地址的段內(nèi)偏移量。在每個子程序的執(zhí)行中,檢查CS值是不變的。(2)第二個程序是利用遠調(diào)用的方法調(diào)用子程序的。在遠調(diào)用情況下,主程序與子程序處在不同的邏輯代碼段中,可在子程序執(zhí)行中查看CS值,它與主程序中的CS值是不同的。子程序調(diào)用后,堆棧中保留了返回地址的段地址及段內(nèi)偏移量。(3)第二個程序中,主程序與子程序之間參數(shù)的傳送是由堆棧實現(xiàn)的。一段是將參數(shù)(此處是串首址TABLE,串的長度N及待統(tǒng)計的字符“b”)順序壓如堆棧,在子程序調(diào)用后,通過BP指針對堆棧中的參數(shù)訪問,并將統(tǒng)計的結(jié)果通過堆棧返回。有關(guān)該方法的原理此處不再介紹。4實驗準備(1)預
10、習子程序設(shè)計的基本方法,根據(jù)實驗內(nèi)容要求,畫出子程序及主程序的流程圖。(2)熟悉鍵盤鍵入字符串及用堆棧傳送參數(shù)的程序段編制方法。5實驗步驟(1)編輯、匯編兩個源程序,生成相應(yīng)的可執(zhí)行文件(.EXE)(2)用DEBUG的R 命令,T 命令或G命令和D命令檢查遠程調(diào)用及近程調(diào)用時堆棧的變化。特別是通過堆棧傳送的參數(shù)和子程序取出的參數(shù)是返回參數(shù)的詳細過程。(3)檢查程序執(zhí)行的結(jié)果是否正確。6實驗報告要求 (1)分析遠程調(diào)用與近程調(diào)用的區(qū)別,在用DEBUG有關(guān)命令觀察時,執(zhí)行過程有何不同。(2)說明用堆棧傳送參數(shù)的過程及其具體方法。(3)分析實驗結(jié)果及所遇到問題,并說明解決的方法。實驗3.2、本程序的
11、目的在于使讀者掌握模塊間調(diào)用子程序的編寫方法.1.實驗?zāi)康?(1) 了解多模塊程序設(shè)計方法。(2) 學會使用PUBLEC和EXTRN 偽指令解決模塊間的符號(如變量名,標號等)通信問題。2. 實驗內(nèi)容(1)編寫一個子程序,將主程序設(shè)定的內(nèi)存中字符串的小寫字母轉(zhuǎn)換成大寫字母并顯示出來.主程序S33用另一個模塊編寫。(2)編寫一個子程序,將主程序S34指定的字符所在的地址返回給主程序,字符串(字符串以$為結(jié)束標志)與主程序在同一個模塊。3.實驗準備(1)仔細閱讀教材中有關(guān)模塊間通信的方法及模塊程序設(shè)計的方法。(2)弄清偽指令PUBLIC及EXTRN的功能及用法。4.實
12、驗步驟(1)分別對實驗1和實驗2的主、子模塊進行匯編,在連接時,將它們裝配成一個以 .EXE為擴展名的可執(zhí)行文件.觀察匯編及連接過程中有無錯誤.(2)對.EXE 文件進行調(diào)試及運行.(3)將實驗1中的原字符串改為由鍵盤輸入,然后由子模塊將源串中的小寫字母轉(zhuǎn)換為大寫字母,并將源串與轉(zhuǎn)換后的兩個字串分兩行顯示出來(設(shè)鍵入字串長度小于80個字符).5.實驗報告要求(1) 畫出相應(yīng)的程序流程圖。(2)扼要總結(jié)多模塊程序的特點和編寫方法。實驗四 輸入/輸出實驗(2學時 綜合性實驗)1 實驗?zāi)康?1) 掌握輸入輸出程序設(shè)計的概念和方法。(2) 了解PC
13、機外圍芯片8255、8259的功能。(3)學習如何在PC機上編寫具有輸入輸出功能的程序,包括8255、8259芯片的使用方法。2 實驗說明 本實驗要求自行編寫一個鍵盤輸入處理程序,它可以完成鍵盤字符的讀入并進行屏幕顯示,本實驗要利用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個中斷源是否容許中斷進行控制。在每次中斷結(jié)束時,要通過I/O端口地址20H寫回一個中斷結(jié)束命令EOI ,使8259可以清除本次中斷。 因此本實驗既屬于輸入輸出實驗,也屬于中斷實驗。 有關(guān)說明將詳細地附在參考程序中。3實驗內(nèi)容 利用pc機鍵盤,編寫一個讀入并顯示鍵盤輸入的演示程序。該程序只接受常規(guī)字符(包括回車鍵及退格鍵),對特殊功能鍵不進行處理。在程序中設(shè)置這些特殊功能鍵對應(yīng)0編號即可,凡是檢測到鍵位編號為0值時,均忽略對它們的處理。有鍵按下時,送出的掃描碼的D7位為0時,當鍵抬起時,掃描的碼D7位為1,以判定鍵是否被按下。4實驗準備(1) 預習輸入輸出程序設(shè)計的特點和方法。(2
15、) 仔細閱讀參考程序,弄清外圍芯片接口初始化的意義和方法。5實驗步驟(1) 建立源文件,并通過匯編和連接,產(chǎn)生可執(zhí)行文件。(2) 運行程序,觀察常規(guī)字符鍵及功能鍵按下時程序的反應(yīng),6實驗報告要求(1) 給出程序框圖,包括主程序框圖、中斷處理程序框圖。(2)說明輸入輸出程序設(shè)計的特點。(3)討論:將SHIFT鍵及右SHIFT 鍵也進行判別處理,它們的掃描碼為42及54。為記錄SHIFT鍵的按動狀態(tài),可設(shè)一個標志單元KBFLAG,右SHIFT按下,KBFLAG的D0位置1,左SHIFT按下,KBFLAG的D1位置1,放下左右的SHIFT鍵,KBFL
16、AG的相應(yīng)恢復為0。當程序工作時,應(yīng)能顯示上檔鍵的字符。實驗五 字符處理程序?qū)嶒?. 實驗?zāi)康?1)熟悉串操作指令的功能與應(yīng)用(2)掌握串操作指令的尋址方式及使用方法,編寫常用的字符串處理程序。2實驗內(nèi)容(1) 字符串統(tǒng)計。自STRN開始的存儲區(qū)中,有一個字符串,統(tǒng)計其中含有小寫字母的個數(shù),將統(tǒng)計結(jié)果以兩位十進制數(shù)顯示在屏幕上。(2)在給定的字符串中,刪除重復的字符,其余的字符向前遞補。3. 實驗準備(1)熟悉字符處理的方法和字符處理程序的設(shè)計;(2)認真預習有關(guān)串操作的指令極其尋址方式的特點,能夠正確使用串操作指令,并準備好數(shù)據(jù)。(3)按正常的方法將刪除字符程序編成子程序,規(guī)定子程序的入口和
17、出口參數(shù)。4實驗步驟(1)用1號系統(tǒng)調(diào)用從鍵盤鍵入一個字符串,然后統(tǒng)計其中小寫字母的個數(shù)。程序每次執(zhí)行,都能得到不同的結(jié)果。(2)編寫一個在同一個字符串中刪除字符,并將其余字符向前遞補的程序。5實驗報告要求(1)對照參考程序,畫出程序流程圖。(2)總結(jié)字符串處理的編程方法,提出改進和完善此類程序的設(shè)計方案。實驗六BIOS和DOS中斷調(diào)用應(yīng)用程序設(shè)計1. 實驗?zāi)康?(1)了解 DOS、BIOS調(diào)用的基本功能、調(diào)用參數(shù)、返回參數(shù)。以及數(shù)據(jù)定義 掌握中斷通信程序的設(shè)計方法。(2)掌握如何利用掃描碼進行功能控制。2. 實驗內(nèi)容編寫一個可以進行光標左右移動和插入字符的簡單字
18、處理程序。3.實驗準備(1) 復習相關(guān)內(nèi)容(2)了解鍵盤的掃描碼、ASCII碼及其顯示字符(如果存在可顯示字符形式)之間的對應(yīng)關(guān)系。4. 實驗步驟(1) 建立源文件,匯編、連接產(chǎn)生可執(zhí)行文件。(2) 運行程序,使得可以輸入字符和光標左右移動及字符的插入。5. 實驗報告要求(1) 由參考程序,畫出簡單字處理程序框圖。(2) 討論如何實現(xiàn)光標的上下移動和字符的刪除。源程序清單實驗2(1)編寫一個程序S21,將內(nèi)存中一組有符號的字數(shù)組按遞增的序列排序,并將其中的二進制數(shù)以十六進制的形式顯示在屏幕上。;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、斜體字部分為以二進制輸出。(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實驗3.1(1)編寫程序S31,將BUF開始的10個字節(jié)單元中的二進制數(shù)轉(zhuǎn)換成兩位十六進制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序HEXASC實現(xiàn),在轉(zhuǎn)換過程
24、中,通過子程序DISP實現(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,從鍵盤接收若干個字符,然后用遠調(diào)用的方法,調(diào)用子程序統(tǒng)計字符串中字符b的個數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個數(shù).參數(shù)傳送采用堆棧實現(xiàn).主程序在子程序返回后,顯示字符”b”及其個數(shù)(設(shè)為一位十
26、六進制數(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進制數(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實驗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 ;補一個$ 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實驗4S4利用pc機鍵盤,編寫一個讀入并顯示鍵盤輸入的演示程序。該程序只接受常規(guī)字符(包括回車鍵及退格鍵),對特殊功能鍵不進行處理。在程序中設(shè)置這些特殊功能鍵對應(yīng)0編號即可,凡是檢測到鍵位編號為0值時,均忽略對它們的處理。有鍵按下時,送出的掃描碼的D7位為0時,當鍵抬起時,掃描的碼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ū)的起點,頭取BUFPT2DW 0 ;指向鍵盤緩沖區(qū)的終點,尾存;注意當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 ;當輸入緩沖區(qū)為空,且沒有按鍵時循環(huán)等待 ; 取緩沖區(qū)字符 KBGET2:MOVAL,BUFFER+BX ;取緩沖區(qū)字符 INCBX ; 首指針加1 CMPBX,16 ;到緩沖區(qū)尾嗎? JCKBGET3 ; 未到,轉(zhuǎn),KBGET3 MOVBX,0 ;到,指向緩沖區(qū)首 KBGET3:MOVBUFPT1,BX ;保護首指針 POPBX ;恢復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ā)確認信號INAL,60H ;讀8255A 口,即鍵盤掃描碼PUSHAXINAL,61H ;為置確認信號ORAL,80H ;置鍵盤確認信號OUT61H,AL ;置PB7位并送鍵盤ANDAL,7FH ;恢復鍵盤確認信號,亦即選通信號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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/TR 23652:2024 EN Nanotechnologies - Considerations for radioisotope labelling methods of nanomaterials for performance evaluation
- 【正版授權(quán)】 ISO 4064-1:2024 EN Water meters for cold potable water and hot water - Part 1: Metrological and technical requirements
- 包露與配偶2025年度離婚經(jīng)濟補償及贍養(yǎng)費協(xié)議
- 2025年度太陽能光伏發(fā)電系統(tǒng)設(shè)計與施工總承包協(xié)議
- 2025年度環(huán)境安全監(jiān)測與治理服務(wù)合同協(xié)議
- 班級體育活動的組織與安排計劃
- 庫存分析對倉庫決策的支持計劃
- 急診呼吸機使用規(guī)范與管理計劃
- 提高團隊創(chuàng)新力的工作總結(jié)計劃
- 2025年建筑鋁擠壓材項目建議書
- 人教版PEP五年級英語下冊單詞表與單詞字帖 手寫體可打印
- 第七節(jié)碎石路基施工方案
- 三年級數(shù)學興趣班綱要及教案
- 記者行業(yè)現(xiàn)狀分析及發(fā)展趨勢
- 如果歷史是一群喵
- 抖音房產(chǎn)直播敏感詞匯表
- 2024屆山東省青島市市北區(qū)八年級物理第二學期期末質(zhì)量檢測試題含解析
- 2024年漯河食品職業(yè)學院單招職業(yè)適應(yīng)性測試題庫附答案
- 廣東省深圳市2023年中考英語試題(含答案與解析)
- 《看看我們的地球》
- 2022-2023年人教版九年級化學(上冊)期末試題及答案(完整)
評論
0/150
提交評論