![8086(匯編)語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書_第1頁](http://file4.renrendoc.com/view/82299c820a92d5edb97138dcdd065339/82299c820a92d5edb97138dcdd0653391.gif)
![8086(匯編)語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書_第2頁](http://file4.renrendoc.com/view/82299c820a92d5edb97138dcdd065339/82299c820a92d5edb97138dcdd0653392.gif)
![8086(匯編)語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書_第3頁](http://file4.renrendoc.com/view/82299c820a92d5edb97138dcdd065339/82299c820a92d5edb97138dcdd0653393.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
word完美格式word完美格式精心整理學(xué)習(xí)幫手精心整理學(xué)習(xí)幫手匯編語言上機(jī)實(shí)驗(yàn)指導(dǎo)書一、概述1626821.實(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)簡(jiǎn)要介紹。2.實(shí)驗(yàn)的軟硬件要求關(guān)于匯編語言程序設(shè)計(jì)的硬件要求不高,有IBM-PC/XT即可,但應(yīng)有彩色顯示器以便進(jìn)行圖形實(shí)驗(yàn)。軟件方面應(yīng)有MASM.EXE5.0版(LINK.EXE)MS-DOSDEBUGEDIT.EXE(其它編輯軟件也可以3.加強(qiáng)實(shí)踐能力的培養(yǎng)實(shí)驗(yàn)?zāi)康牟还馐菫榱蓑?yàn)證書本理論,更重要的是對(duì)實(shí)踐能力的培養(yǎng)。其中包括:實(shí)際調(diào)試程序的能力,例如修改程序參數(shù)的能力,查看結(jié)果的能力,設(shè)置斷點(diǎn)調(diào)試運(yùn)行的能力等;BIOS對(duì)某一問題用不同的程序?qū)崿F(xiàn)的能力,例如我們?yōu)槊總€(gè)實(shí)驗(yàn)提供了參考程序(或程序段實(shí)驗(yàn)成功地實(shí)現(xiàn),在掌握其方法后,自己改變程序或自己編制程序加以實(shí)現(xiàn)。實(shí)驗(yàn)一匯編語言運(yùn)行環(huán)境及方法、簡(jiǎn)單程序設(shè)計(jì)(2學(xué)時(shí)、驗(yàn)證性)1.實(shí)驗(yàn)?zāi)康模菏煜R編語言運(yùn)行環(huán)境和方法了解如何使用匯編語言編制程序DEBUGDEBUGDEBUG2.實(shí)驗(yàn)內(nèi)容學(xué)會(huì)輸入、編輯匯編語言程序(3DEBUG(4DEBUGDERTAGUNW仔細(xì)閱讀有關(guān)匯編語言環(huán)境的內(nèi)容,事先準(zhǔn)備好使用的例子。準(zhǔn)備好源程序清單、設(shè)計(jì)好調(diào)試步驟、測(cè)試方法、對(duì)運(yùn)行結(jié)果的分析。編寫一個(gè)程序:比較2個(gè)字符串所含的字符是否相同。若相同則顯示’Match.’,否則顯示’Nomatch!’;(1DEBUG4.實(shí)驗(yàn)步驟DOSMASMMASMEDIT①調(diào)用edit輸入、編輯源程序并保存在指定的目錄中;例:editabc.asm②用匯編程序masm對(duì)源程序匯編產(chǎn)生目標(biāo)文件obj。例:masmabc不斷修改錯(cuò)誤,直至匯編通過為止。③用連接程序link產(chǎn)生執(zhí)行文件exe.例:linkabc④執(zhí)行程序可直接從DOS執(zhí)行程序,即在DOS環(huán)境中,輸入文件名即可。5.實(shí)驗(yàn)報(bào)告要求源程序清單。EDIT如何對(duì)源程序進(jìn)行匯編及編輯。DEBUGDEBUGDEBUG.EXE實(shí)驗(yàn)二循環(huán)程序、分支程序程序設(shè)計(jì)實(shí)驗(yàn)(4實(shí)驗(yàn)?zāi)康模赫莆昭h(huán)、分支程序的設(shè)計(jì)方法DEBUG(3)學(xué)會(huì)針對(duì)不同的問題,選用不同的組織循環(huán)的方法。實(shí)驗(yàn)內(nèi)容(1S21-9A-Za-z<CR>0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。實(shí)驗(yàn)準(zhǔn)備編寫實(shí)驗(yàn)內(nèi)容要求的兩個(gè)程序。(3)熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。實(shí)驗(yàn)步驟(1EDIT.ASMS21.ASMS22.ASM(2)對(duì)其進(jìn)行匯編及連接,產(chǎn)生.EXE(3)對(duì).EXE文件進(jìn)行調(diào)試運(yùn)行。DEBUGALDSPKEY.EXEMS-DOS.EXE實(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)證性)3.11.實(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ù)的方法。實(shí)驗(yàn)內(nèi)容S31BUF10ASCIIHEXASCDISP編寫一個(gè)主程序S32,從鍵盤接收若干個(gè)字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計(jì)字符串中字符’b’TABLE,N”b”.子程序返回字符"b”字符”b”及其個(gè)數(shù)(設(shè)為一位十六進(jìn)制數(shù))。實(shí)驗(yàn)說明HEXASCDISPCSCSCS第二個(gè)程序中,主程序與子程序之間參數(shù)的傳送是由堆棧實(shí)現(xiàn)的。一段是將參數(shù)(TABLEN字符“)BP此處不再介紹。實(shí)驗(yàn)準(zhǔn)備預(yù)習(xí)子程序設(shè)計(jì)的基本方法,根據(jù)實(shí)驗(yàn)內(nèi)容要求,畫出子程序及主程序的流程圖。5.實(shí)驗(yàn)步驟編輯、匯編兩個(gè)源程序,生成相應(yīng)的可執(zhí)行文件(.EXE)DEBUGRGD的參數(shù)是返回參數(shù)的詳細(xì)過程。6.實(shí)驗(yàn)報(bào)告要求(1DEBUG(2)說明用堆棧傳送參數(shù)的過程及其具體方法。(3)分析實(shí)驗(yàn)結(jié)果及所遇到問題,并說明解決的方法。實(shí)驗(yàn)3.2、本程序的目的在于使讀者掌握模塊間調(diào)用子程序的編寫方法.1.實(shí)驗(yàn)?zāi)康牧私舛嗄K程序設(shè)計(jì)方法。PUBLECEXTRN偽指令解決模塊間的符號(hào)(如變量名,標(biāo)號(hào)等)通信問題。實(shí)驗(yàn)內(nèi)容S33用另一個(gè)模塊編寫。S34指定的字符所在的地址返回給主程序,字符串(字符串以$為結(jié)束標(biāo)志)與主程序在同一個(gè)模塊。實(shí)驗(yàn)準(zhǔn)備(1)仔細(xì)閱讀教材中有關(guān)模塊間通信的方法及模塊程序設(shè)計(jì)的方法。(2)弄清偽指令PUBLIC及EXTRN的功能及用法。實(shí)驗(yàn)步驟12.EXE中有無錯(cuò)誤.對(duì).EXE1805.實(shí)驗(yàn)報(bào)告要求畫出相應(yīng)的程序流程圖。扼要總結(jié)多模塊程序的特點(diǎn)和編寫方法。實(shí)驗(yàn)四 輸入/輸出實(shí)驗(yàn)(2學(xué)時(shí)綜合性實(shí)驗(yàn))實(shí)驗(yàn)?zāi)康恼莆蛰斎胼敵龀绦蛟O(shè)計(jì)的概念和方法。PC8255、8259PC8255、8259實(shí)驗(yàn)說明IBM—PC82558259。8255AA60HB61H。8255A63H8259IRQ1CPU8259I/O21H8I/O20HEOI8259因此本實(shí)驗(yàn)既屬于輸入輸出實(shí)驗(yàn),也屬于中斷實(shí)驗(yàn)。有關(guān)說明將詳細(xì)地附在參考程序中。實(shí)驗(yàn)內(nèi)容pc(包括回車鍵及退格鍵,對(duì)特殊功能鍵不進(jìn)00D70D71,以判定鍵是否被按下。實(shí)驗(yàn)準(zhǔn)備預(yù)習(xí)輸入輸出程序設(shè)計(jì)的特點(diǎn)和方法。仔細(xì)閱讀參考程序,弄清外圍芯片接口初始化的意義和方法。實(shí)驗(yàn)步驟建立源文件,并通過匯編和連接,產(chǎn)生可執(zhí)行文件。運(yùn)行程序,觀察常規(guī)字符鍵及功能鍵按下時(shí)程序的反應(yīng),實(shí)驗(yàn)報(bào)告要求給出程序框圖,包括主程序框圖、中斷處理程序框圖。說明輸入輸出程序設(shè)計(jì)的特點(diǎn)。SHIFTSHIFT鍵也進(jìn)行判別處理,它們的掃描碼為4254SHIFTSHIFTKBFLAGD01SHIFTKBFLAGD11SHIFTKBFLAG0。當(dāng)程序工作時(shí),應(yīng)能顯示上檔鍵的字符。實(shí)驗(yàn)五字符處理程序?qū)嶒?yàn)1.實(shí)驗(yàn)?zāi)康氖煜ご僮髦噶畹墓δ芘c應(yīng)用2.實(shí)驗(yàn)內(nèi)容STRN上。在給定的字符串中,刪除重復(fù)的字符,其余的字符向前遞補(bǔ)。實(shí)驗(yàn)準(zhǔn)備熟悉字符處理的方法和字符處理程序的設(shè)計(jì);(3)按正常的方法將刪除字符程序編成子程序,規(guī)定子程序的入口和出口參數(shù)。實(shí)驗(yàn)步驟(11(2)編寫一個(gè)在同一個(gè)字符串中刪除字符,并將其余字符向前遞補(bǔ)的程序。實(shí)驗(yàn)報(bào)告要求對(duì)照參考程序,畫出程序流程圖??偨Y(jié)字符串處理的編程方法,提出改進(jìn)和完善此類程序的設(shè)計(jì)方案。BIOSDOS中斷調(diào)用應(yīng)用程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康腄OS、BIOS掌握如何利用掃描碼進(jìn)行功能控制。實(shí)驗(yàn)內(nèi)容編寫一個(gè)可以進(jìn)行光標(biāo)左右移動(dòng)和插入字符的簡(jiǎn)單字處理程序。實(shí)驗(yàn)準(zhǔn)備復(fù)習(xí)相關(guān)內(nèi)容了解鍵盤的掃描碼、ASCII(如果存在可顯示字符形式)之間的對(duì)應(yīng)關(guān)系。實(shí)驗(yàn)步驟建立源文件,匯編、連接產(chǎn)生可執(zhí)行文件。運(yùn)行程序,使得可以輸入字符和光標(biāo)左右移動(dòng)及字符的插入。實(shí)驗(yàn)報(bào)告要求由參考程序,畫出簡(jiǎn)單字處理程序框圖。討論如何實(shí)現(xiàn)光標(biāo)的上下移動(dòng)和字符的刪除。源程序清單實(shí)驗(yàn)2;S21.ASMDSEGSEGMENTXDW234H,32FH,90DH,123EH,-78EH,0ACFH,-234H,98H,-23DFHCOUNTDW9DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGMAINPROCFARSTART:PUSHDSXORAX,AXPUSHAXMOVAX,DSEGMOVDS,AXMOVCX,COUNTLAB0:MOVBX,1DECCXJZLAB3PUSHCXLEADI,XLAB1:MOVAX,[DI]CMPAX,[DI+2]JLELAB2XORBX,BXXCHGAX,[DI+2]MOV[DI],AXLAB2:ADDDI,2LOOPLAB1POPCXCMPBX,0JZLAB0LAB3:LEADI,XMOVCX,COUNTLAB4:PUSHCXMOVCH,4MOVBX,[DI]LAB5:MOVCL,4ROLBX,CLMOVDL,BLANDDL,0FHCMPDL,9JBELAB6ADDDL,7LAB6:ADDDL,30HMOVAH,2INT21HDECCHJNZLAB5MOVDL,20HMOVAH,2INT21HADDDI,2POPCXLOOPLAB4MOVDL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HLEADI,XMOVCX,COUNTLAB7:MOVBX,[DI]PUSHCXMOVCX,16LAB8:XORDL,DLROLBX,1RCLDL,1ADDDL,30HMOVAH,2INT21HLOOPLAB8MOVDL,'B'MOVAH,2INT21HMOVDL,''MOVAH,2INT21HADDDI,2POPCXLOOPLAB7RETMAINENDPCSEGENDSENDSTART其中斜體字部分為以二進(jìn)制輸出。S21-9A-Za-z<CR>0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。;S22.ASMCODE SEGMENTASSUME CS:CODESTART: MOVAH,1INT21H;等待鍵入字符,送ALCMPAL,0DH;是否是回車符?JZDONEDONECMPAL,'0'JBNEXTCMPAL,'9'JACHARUPMOVDL,ALMOVAH,2INT21HJMPSTARTCHARUP:CMPAL,41HJBNEXTCMPAL,5AHJACHRDNDISPC:MOVDL,'c'MOVAH,2INT21HNEXT:JMPSTARTCHRDN:CMPAL,61HJBNEXTCMPAL,7AHJANEXTJMPDISPCDONE:MOVAH,4CHINT21HCODEENDSENDSTART實(shí)驗(yàn)3.1S31BUF10ASCIIHEXASCDISP;S31.ASMDATA SEGMENTBUFDB DB 3AH,4BH,5CH,6FHDATA ENDSCODE ASSUME START:MOV AX,DATAMOV DS,AXMOV CX,10LEA BX,BUFAGAIN:MOV AL,[BX]CALLHEXASCINCBXLOOPAGAINMOVAH,4CHINT21HHEXASCPROCNEARPUSHAXMOVDL,ALPUSHCXMOVCL,4SHRDL,CLPOPCXCALLDISPHEXPOPAXMOVDL,ALANDDL,0FHCALLDISPRETHEXASC ENDPDISP PROCCMPDL,9JBENEXTADDDL,7NEXT: ADDDL,30HMOVAH,2INT21H;顯示RETDISP ENDPCODE ENDSENDSTART編寫一個(gè)主程序S32,從鍵盤接收若干個(gè)字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計(jì)字符串中字符’b’TABLE,N”b”.子程序返回字符"b”字符”b”及其個(gè)數(shù)(設(shè)為一位十六進(jìn)制數(shù))。DATA SEGMENTCHAR DB 'b'BUF DB 50H,?,50HDUP(?)CRLF DB DATA ENDSMCODE SEGMENTASSUME CS:MCODE,START:MOVAX,DATAMOVDS,AXLEA DX,BUFMOVAH,0AHINTLEAMOVINTLEA
21HDX,CRLF21HSI,BUFMOVCL,[SI+1]MOVCH,0 ;CXINCSIINCSI ;SIMOVAL,CHARMOVAH,0 ;AXPUSHSIPUSHCXPUSHAX ;參數(shù)送堆棧CALLFARPTRMOVDL,CHARINT21H ;顯示統(tǒng)計(jì)個(gè)數(shù)INT21H ;顯示統(tǒng)計(jì)個(gè)數(shù)MOVAH,4CHINT21HMCODEENDSASSUMECS:SCODECHECKPROCFARPUSHBPMOVMOVSI,[BP+10]MOVCX,[BP+8]MOVAX,[BP+6]
;統(tǒng)計(jì)個(gè)數(shù)在AL中,個(gè)數(shù)不能超過一位16進(jìn)制數(shù)XORAGAIN:JNEINCNEXT1: INC
AH,AHAL,[SI]NEXT1AHSIMOVAH,2MOVAH,2INT21HPOPAXMOVDL,ALANDDL,0FHCMPDL,9JBENEXTADDDL,7NEXT:ADDDL,30HMOVAH,2MOV[BP+10],AXPOP BPRET 4CHECK SCODE END START實(shí)驗(yàn)3.2S33用另一個(gè)模塊編寫。EXTRN DNTOUP:FARPUBLIC DATA SEGMENTSTRING1 DB 'thIsisAbook','$'STRING2 DB 80DATA ENDSCODE SEGMENTASSUME START: MOV AX,DATAMOV DS,AXCALL FARPTRDNTOUPMOV AH,4CHINT21HCODEENDSENDSTART;DNTOUP.SM為子模塊的文件名PUBLIC DNTOUPEXTRN CODE SEGMENTDNTOUP PROC FARASSUME MOVBX,0CYCLE: MOVAL,STRING1[BX]CMPJZCMPJBCMPJASUB
AL,24H ;是否是STRING1結(jié)DONE ;是"$",轉(zhuǎn)DONEAL,61H ;是小寫字母嗎?NEXT AL,7AHNEXTAL,20H ;轉(zhuǎn)為大寫字母NEXT: MOVSTRING2[BX],ALINCJMP
BXCYCLEDONE:
MOVAL,'$'MOVSTRING2[BX],AL ;補(bǔ)一個(gè)MOVDL,0DHMOVAH,2INT 21HMOVDL,0AHINTLEAMOVINT
21H DX,STRING121H ;顯示源串內(nèi)容MOVDL,0AHMOVAH,2INT21H;回車換行MOVDX,OFFSETSTRING2MOVAH,9INT21H;顯示轉(zhuǎn)換后的大寫串RETDNTOUP CODE END DNTOUPS34;S34.ASM為主模塊程序名EXTRNFINDC:FARPUBLICSTRNDATASEGMENTSTRNDB'LINKDISPLAYSUBROUTING$'ADDRDW?DATA ENDSCODE ASSUME START:MOVAX,DATAMOVDS,AXMOVAH,1INT CALLFARPTRMOVADDR,DIMOVINT21HCODE ENDSEND START;FINDC.ASM為子模塊程序PUBLIC FINDCEXTRN STRN:BYTECODE SEGMENTASSUME FINDC PROC FARSTART: AGAIN:JZCMPJNZDONE1:NEXT:JMP
DI,STRNBYTE DONEAL,[DI]NEXTDIAGAINDONE:MOVDI,0FFFFH 0FFFFHJMPFINDC CODE ENDS
DONE1END START實(shí)驗(yàn)4S4pc(包括回車鍵及退格鍵,對(duì)特殊功能鍵不進(jìn)00D70D71,以判定鍵是否被按下。PUBLIC SCANTAB,BUFFER,BUFPT1,BUFPT2STACK1 SEGMENTSTACK1ENDSDATASEGMENTBUFFERBUFPT1BUFPT2
DB 256DUP(?)DB 16DUP(0) 10DW 0 ;指向鍵盤緩沖區(qū)的起點(diǎn),頭取DW 0 ;指向鍵盤緩沖區(qū)的終點(diǎn),尾存;注意當(dāng)BUFPT1=BUFPT2時(shí),表明緩沖區(qū)空KBFLAGPROMPT
DB 0DB '---kbd_ioprogrambegin ',0DH,0AH,'$'SCANTABDB0,0,'1234567890-=',8,0DB'QWERTYUIOP[]',0,0DB'ASDFGHJKL',3BH,27H,0DHDB'ZXCVBNM,./',0DB20H,0,0,0,0,0,0,0,0,0,0,0,0,0;由于不同鍵盤按鍵及分布各不相同,因此在調(diào)試時(shí)可能產(chǎn)生按鍵和顯示有差異DB'789-456+1230.'EVENOLDIP9DW?OLDCS9DW?DATA ENDSEXTRN KBINT:FAR ;外部引用說CODE SEGMENT;主程序段ASSUME CS:CODESTART:MOVAX,DATAMOVDS,AX;建立自行設(shè)計(jì)的中斷服務(wù)程序,寫自行設(shè)計(jì)的中斷處理程序入口偏移量到矢量表中CLI;關(guān)中斷,以防引起混亂MOVAX,3509H;取類型9的中斷向量INT21HMOVOLDCS9,ESMOVOLDIP9,BXPUSHDSLEA MOVAX,SEGKBINTMOVDS,AXMOVAX,2509H 9INTPOPINANDOUTLEAMOVINT
21HDSAL,21HAL,0FDH 21H,ALDX,PROMPT ;在屏幕上顯示---kbd_ioprogrambegin---21HSTI ;開中斷;程序功能:讀鍵盤并顯示字符FOREVER:CALLKBGET;讀緩沖區(qū)字符TESTKBFLAG,80HKBFLAG=80,退出JNZENDINTPUSHAXCALLDISPCHAR;顯示接收字符POPAXCMPAL,'A'JZENDINT;輸入A結(jié)束程序CMPAL,0DH;是回車符嗎?JNZFOREVER;不是再接收MOVAL,0AHCALLDISPCHAR ;是,換行JMP FOREVER ENDINT:MOVDX,OLDIP9MOVAXMOVDS,AXMOVMOVAL,9INT 21HMOVAH,4CHINT 21H;KBGET1取緩沖區(qū)字符->(返回KBGET PROC NEARPUSHBXCLIMOVBX,BUFPT1CMPJNZCMPJNZ
BX,BUFPT2KBGET2 KBGET2,KBFLAG,0KBGET3STI ;開中斷POPJMP
BXKBGET ;當(dāng)輸入緩沖區(qū)為空,且沒有按鍵時(shí)循環(huán)等待;取緩沖區(qū)字符KBGET2:MOVAL,[BUFFER+BX] ;取緩沖區(qū)字符INCCMPJC
BX 1BX,16 ;到緩沖區(qū)尾嗎?KBGET3 ;未到,轉(zhuǎn)MOVBX,0 ;到,指向緩沖區(qū)KBGET3:MOVBUFPT1,BX ;保護(hù)首指針POPRETKBGET
BX BX;CHAR字符顯示子程序DISPCHARPROCNEARPUSHBXMOVBX,0MOVAH,0EHINT10HPOPBXRETDISPCHARENDPCODEENDSENDSTART;S41;KBINT鍵盤中斷處理程序EXTRN CSEG 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碼POP AXTESTAL,80H 01,分別表示鍵是按下還是放開JNZ KBINT2 ;鍵抬起放棄本次輸入MOVBX,OFFSET SCANTABXLAT ASCIICMPJNZ
AL,0 KBINT4MOVKBFLAG,80H KBFLAG=80KBINT4:
JMP
KBINT2;存ASCII碼字符到緩沖區(qū)MOVBX,BUFPT2 ;取緩沖區(qū)尾指針MOV[BUFFER+BX],AL ;存字符INCBX 1CMPBX,16 ;是否到區(qū)尾?JCKBINT3 16KBINT3MOVBX,0 0~15KBINT3:CMPBX,BUFPT1 ;緩沖區(qū)滿?JZKBINT2 ;此時(shí)首尾指針相等說明緩沖區(qū)已滿,則不保留尾指針,從而忽略剛才輸入的字符MOVBUFPT2,BX ;不滿,存尾指針;結(jié)束中斷處理KBINT2:CLIMOVAL,20H;發(fā)EOI,結(jié)束8259中斷OUT20H,ALPOPAXPOPBXIRET;中斷返回KBINT CSEG ENDSEND KBINT實(shí)驗(yàn)5S51STRN屏幕上。DATA SEGMENTSTRN DB 80DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,MOVDS,AXLEA DI,MOVCL,0AGAIN:MOVAH,1INTCMPJZ
21HAL,0DHDONEMOV[DI],ALINCINCJMPDONE:LEAMOVMOVCLDCYCLE:LODSBCMPJBCMPJAINC
DICLAGAINSI,STRNAL,61HNEXTAL,7AHNEXTBLNEXT:LOOPNEXT:LOOPCYCLEMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HMOVAL,BLMOVAH,0MOVCL,10DIVCLXCHGAH,ALMOVDL,AHORDL,30HPUSHAXMOVAH,2INT21HPOPAXMOVDL,ALORDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDS;以下顯示兩位十進(jìn)制數(shù)END STARTS51;DELD.ASMDATA SEGMENTSTRN DB 80DUP(?)LEN DB ?DATA ENDSCODE ASSUME CS:CODE,DS:DATA,ES:START:MOVAX,DATAMOVMOVLEA MOVCL,0AGAIN:MOVAH,1INTCMPJZ
21HAL,0DHDONEMOV[SI],ALINCINCJMPDONE:MOV
SICLAGAINMOVLEN,CLREPEAT:
LEA
SI,STRNPUSHSIPUSHSIPUSHCXCMPCX,1JZGOONMOVAL,[SI]CMPAL,0JENEXT1COMP:INCSICMPAL,[SI]JNEGOONMOVBYTEPTR[SI],0GOON:LOOPCOMPNEXT1:POPCXPOPSIINCSI;為非重復(fù)字符;查出與該字符重復(fù)的所有字符,并用0替換LOOPREPEAT;對(duì)所有重復(fù)字符都進(jìn)行查找LEASI,STRN;刪除重復(fù)字符MOVDI,SIMOVCL,LENMOVCH,0CYCLE:MOVAL,[SI]CMPAL,0;是重復(fù)字符嗎?JZNEXT;不是,查找下一個(gè)字符MOV[DI],ALMOV[DI],ALINCDINEXT:INCSILOOPCYCLEMOVCL,LENMOVCH,0SUBCX,DICYCLE1:MOVBYTEPTR[DI],0INCDILOOPCYCLE1MOVDL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HLEASI,STRNCYCLE2:MOVDL,[SI]INCSICMPDL,0JZDONE1MOVAH,2INT21HJMPCYCLE2DONE1:MOVAH,4CHINT21HCODEENDSENDSTART實(shí)驗(yàn)6編寫一個(gè)可以進(jìn)行光標(biāo)左右移動(dòng)和插入字符的簡(jiǎn)單字處理程序。;字處理演示參考程序,插入、左右移DSEG SEGMENTKBD_BUFDB 96DUP('');inputbufferCNTLBUFPTBUFTLCOLPT
DB 16DUP(0) ;charnumberofDW 0 ;bufferheadpointDW 0 ;buffertailDB 0ROWPTDB 0ROWMXDW 0 ;maxumrowDSEG ENDSCURS MACRO MOVDH,ROWMOVMOVBH,0MOVAH,2INTENDMCSEG
10HMAIN PROC FARSTART:
ASSUME CS:CSEG,DS:DSEG,ES:DSEGMOVMOVDS,AXMOVES,AXMOVMOVMOVMOVMOVMOVCX,LENGTHCNTLXORLEACLD
AL,ALDI,CNTLREP STOSBMOVAH,6 ;clearMOVAL,0MOVCX,0MOVDH,24 ;在文本方式下,每個(gè)屏幕是由25行,80列組成,屏幕左上角是其初始位置MOVDL,79 ;行數(shù)由上至下從0遞增到24,列數(shù)由左至右依次從0遞增到79MOVBH,07INT 10H ;設(shè)置顯示方式READ_K:
CURS0,0 ;初始化光標(biāo)MOVAH,0INTCMPJNZ
16H ALAL,1BH ;isescape?escARROWMOVAH,4CHARROW:
INTCMPJZCMPJZ
21HAH,4BH ;isleftLEFTAH,4DH ;isrightRIGHTINST:JMPLEFT:JMPRIGHT:JMP
INS_KLEFT_KRIGHT_KINS_K: ;insertacharacterMOVBX,BUFPTMOVCX,BUFTLCMPJELEAADD
BX,CXKM ;yes,charintoDI,KBD_BUF ;no,buffermoveDI,CX ;abytebackwardMOVSI,DIDECSUBSTD
SICX,BXKM:REPMOVMOVSBKBD_BUF[BX],ALINCBUFPT;incheadpointerINCBUFTL;inctailpointerCMPAL,0DH;insertaCRJNZKNLEASI,CNTL;yes,movethecountADDSI,ROWMX ;o
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時(shí)隔斷墻施工項(xiàng)目合同
- 個(gè)人投資入伙合同書范本
- 個(gè)人抵押債務(wù)合同樣本簡(jiǎn)易版
- 個(gè)人股權(quán)轉(zhuǎn)讓合同樣本:標(biāo)準(zhǔn)版
- 個(gè)人分紅權(quán)益保障合同2025
- 專業(yè)技能人才租賃合同
- 個(gè)人租賃合同模板:門面租賃
- 二手房屋購置合同條款
- 兩人創(chuàng)業(yè)合作合同書
- 個(gè)人健康保險(xiǎn)合同條款范文
- 麻醉藥品、精神藥品月檢查記錄表
- 演示文稿國庫集中支付總流程圖
- 浙江省寧波市海曙區(qū)2022學(xué)年第一學(xué)期九年級(jí)期末測(cè)試科學(xué)試題卷(含答案和答題卡)
- 為了自由呼吸的教育
- 高考英語詞匯3500電子版
- 建院新聞社成立策劃書
- GB/T 19675.2-2005管法蘭用金屬?zèng)_齒板柔性石墨復(fù)合墊片技術(shù)條件
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第十三章動(dòng)作技能的保持和遷移
- 2023年春節(jié)后建筑施工復(fù)工復(fù)產(chǎn)專項(xiàng)方案
- 電梯設(shè)備維護(hù)保養(yǎng)合同模板范本
- 叉車操作規(guī)程
評(píng)論
0/150
提交評(píng)論