匯編語言課程設(shè)計(jì)打字計(jì)時(shí)練習(xí)_第1頁
匯編語言課程設(shè)計(jì)打字計(jì)時(shí)練習(xí)_第2頁
匯編語言課程設(shè)計(jì)打字計(jì)時(shí)練習(xí)_第3頁
匯編語言課程設(shè)計(jì)打字計(jì)時(shí)練習(xí)_第4頁
匯編語言課程設(shè)計(jì)打字計(jì)時(shí)練習(xí)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

前言匯編語言是計(jì)算機(jī)能夠提供應(yīng)用戶使用的最快而又最有效的語言,也是能夠利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的唯一語言。因而,對(duì)程序的空間和時(shí)間的要求很高的場(chǎng)合,匯編語言的應(yīng)用是必不可少的。至于很多需要直接控制硬件的應(yīng)用場(chǎng)合,那么更是非用匯編語言不可了。隨著科學(xué)技術(shù)迅速開展,理工科大學(xué)生不僅需要掌握計(jì)算機(jī)方面的根本理論知識(shí),而且還需要掌握根本的實(shí)驗(yàn)技能及一定的科學(xué)研究能力。通過課程設(shè)計(jì),使學(xué)生穩(wěn)固和加深微型計(jì)算機(jī)原理理論知識(shí),通過實(shí)踐進(jìn)一步加強(qiáng)學(xué)生獨(dú)立分析問題和解決問題的能力、綜合設(shè)計(jì)及創(chuàng)新能力的培養(yǎng),同時(shí)注意培養(yǎng)學(xué)生實(shí)事求是、嚴(yán)肅認(rèn)真的科學(xué)作風(fēng)和良好的實(shí)驗(yàn)習(xí)慣,為今后工作打下良好的根底。中文摘要在IBM-PC系統(tǒng)中,駐留的ROM中有8KB的BIOS。它實(shí)現(xiàn)對(duì)系統(tǒng)中種種常用設(shè)備的輸入輸出操作的管理。其中的16H中斷調(diào)用即為鍵盤輸入輸出中斷調(diào)用,實(shí)現(xiàn)從鍵盤輸入字符到AL存放器、讀鍵盤緩沖區(qū)字符到AL存放器、讀取特殊功能鍵的狀態(tài)等功能。本程序是一個(gè)在鍵盤上練習(xí)打字并能統(tǒng)計(jì)時(shí)間的程序,在緩沖區(qū)中預(yù)放了一些字母,運(yùn)行時(shí),可按照屏幕上顯示的字母輸入練習(xí),每輸入完一行按回車鍵后,可顯示出練習(xí)輸入的時(shí)間。通過它練習(xí)英文打字練習(xí),并能夠統(tǒng)計(jì)時(shí)間。程序運(yùn)行時(shí),使用自編的中斷向量處理程序。程序退出時(shí),恢復(fù)中斷向量。關(guān)鍵詞打字計(jì)時(shí),存放器,緩沖區(qū),中斷向量目錄1、系統(tǒng)分析…………11.1問題提出及功能要…………………11.2運(yùn)行環(huán)境……………11.3本課題涉及的知識(shí)點(diǎn)………………12、系統(tǒng)總體設(shè)計(jì)………22.1設(shè)計(jì)思路……………22.2程序流程圖…………33、詳細(xì)設(shè)計(jì)……………43.1功能模塊說明…………43.1.1定義數(shù)據(jù)段,設(shè)置主要參數(shù)………………43.1.2代碼段………43.1.3使用子程序分化各子功能…………………43.2源程序…………………44、系統(tǒng)測(cè)試……………154.1實(shí)驗(yàn)步驟………………154.2運(yùn)行程序………………164.3調(diào)試中出現(xiàn)的問題……175、軟件使用說明………186、設(shè)計(jì)總結(jié)………197、參考文獻(xiàn)………208、致謝………………211、系統(tǒng)分析1.1問題提出及功能要求設(shè)計(jì)一個(gè)在鍵盤上練習(xí)打字并能統(tǒng)計(jì)時(shí)間的程序。通過它練習(xí)英文打字練習(xí),并能夠統(tǒng)計(jì)時(shí)間。屏幕上顯示出提示信息和練習(xí)例句,按照例句從鍵盤上輸入字母即可,每輸入完一行后按回車鍵,可顯示出練習(xí)輸入的時(shí)間和下一行例句。按Esc鍵可退出程序。1.2運(yùn)行環(huán)境WindowsXP/98/2000操作系統(tǒng)、文本編輯器使用EDIT或NOTEPAD,匯編程序使用MASM.EXE,連接程序使用LINK.EXE,調(diào)試程序使用DEBUG.EXE。1.3本課題涉及的知識(shí)點(diǎn)定義數(shù)據(jù)段,設(shè)置主要參數(shù):設(shè)置9號(hào)中斷向量地址,9號(hào)中斷向量首址,1C向量地址;定義時(shí)間參數(shù)為秒、分、小時(shí)。在代碼段,調(diào)用中斷8259、鍵盤中斷、時(shí)鐘中斷、并設(shè)置打字計(jì)時(shí)文件程序順序。整個(gè)程序使用序分化各子功能。2、系統(tǒng)總體設(shè)計(jì)2.1設(shè)計(jì)思路在鍵盤上練習(xí)的打字例句及其地址表、計(jì)時(shí)單元等預(yù)先放在DATA數(shù)據(jù)段中,自編的中斷程序kbint檢測(cè)按鍵時(shí)產(chǎn)生的中斷,并把按鍵的掃描碼轉(zhuǎn)換為ASCII碼存入緩存區(qū)buffer,這個(gè)工作和ROM09類型的鍵盤中斷例行程序所完成的工作大致相同,只是在解釋各個(gè)鍵時(shí)作了簡(jiǎn)化,即只解釋了可顯示字符,如英文字母、數(shù)字及一些符號(hào);其他特殊鍵,如組合鍵、雙態(tài)鍵、功能鍵等都未作解釋,只作為字符碼0來處理。在主程序局部保存原09類型的中斷向量,設(shè)置自編例行程序的中斷向量,設(shè)置中斷屏蔽位,然后開中斷。當(dāng)鍵盤中斷處理后,主程序中安排指令讀取緩沖區(qū)中的字符并顯示在屏幕上。在主程序的末尾,利用DOS功能恢復(fù)原09類型的中斷向量,然后返回DOS。在顯示鍵入的字符時(shí),還應(yīng)判斷字符是否為回車(0DH)。如為回車符,說明一個(gè)句子輸入完畢,此時(shí)調(diào)用顯示時(shí)間的子程序顯示出打字時(shí)間,然后順序顯示下一個(gè)例句。如果所存放的例句都已顯示完,那么又從第一個(gè)例句開始顯示,直至鍵入某一功能鍵〔如Esc鍵、Shift鍵等〕退出程序,結(jié)束打字練習(xí)。打字時(shí)間統(tǒng)計(jì)利用自定時(shí)器中斷處理程序clint來完成。每輸完一例句,計(jì)時(shí)一次。在此中斷例行程序中,定時(shí)器中斷的次數(shù)記錄在計(jì)數(shù)單元count中,當(dāng)count計(jì)數(shù)值為18時(shí),sec計(jì)數(shù)單元加1,當(dāng)sec計(jì)數(shù)值到達(dá)60時(shí),min計(jì)數(shù)單元加1。因?yàn)檩斎胪暌粋€(gè)句子無論如何也不會(huì)到達(dá)小時(shí)級(jí),所以對(duì)hours計(jì)數(shù)值的調(diào)整判斷,實(shí)際上只起到退出定時(shí)器中斷的作用。顯示時(shí)間的子程序disptime分別將各遍野單元的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并以min:sec:msec的形式顯示出來。其中msec是由count記數(shù)值轉(zhuǎn)換成的:count×1秒/18.2=count×55ms2.2程序流程圖3、詳細(xì)設(shè)計(jì)3.1功能模塊說明3.1.1定義數(shù)據(jù)段,設(shè)置主要參數(shù):緩沖區(qū):BUFFER,BUFPT1,BUFPT23.1.2代碼段調(diào)用中斷8259,鍵盤中斷,時(shí)鐘中斷,設(shè)置打字計(jì)時(shí)文件程序順序3.1.3使用子程序分化各子功能DISPTIMEPROCNEARBINDECPROCNEAR;將二進(jìn)制轉(zhuǎn)化為十進(jìn)制顯示時(shí)間DECDIVPROCNEAR;轉(zhuǎn)化成字符顯示DISPCHARPROCNEARKBGETPROCNEAR;獲取鍵盤鍵入的信息KBINTPROCNEAR;查表查到相應(yīng)的字符RESET09PROC;重新設(shè)置09號(hào)中斷RESET1CPROC;重新設(shè)置1c功能RESETPROC;回復(fù)1C與093.2源程序STACKSEGMENTPARASTACK'STACK'DB256DUP(0)TOPLABELWORDSTACKENDSDATASEGMENTPARAPUBLIC'DATA'BUFFERDB16HDUP(0);緩沖區(qū)大小BUFPT1DW0;緩沖區(qū)1BUFPT2DW0;緩沖區(qū)2KBFLAGDB0;參數(shù),80H表示允許,00表示不允許PROMPTDB'*PLEASEPRACTISETYPING*',0DH,0AH,'$';定義提示語句SCANTABDB0,0,'1234567890-=',8,0;定義鍵盤DB'QWERTYUIOP[]',0DH,0;定義鍵盤第一行英文字母及符號(hào)DB'ASDFGHJKL;',0,0,0,0;鍵盤第二行英文字母及符號(hào)DB'ZXCVBNM,./',0,0,0;鍵盤第三行英文字母及符號(hào)DB'',0,0,0,0,0,0,0,0,0,0,0,0,0DB'789-456+1230.'******設(shè)置一些存儲(chǔ)地址便于理解******EVENOLDCS9DW?;9號(hào)中斷向量地址OLDIP9DW?;9號(hào)中斷向量首地址******預(yù)設(shè)置打字練習(xí)的句子******STR1DB'ABCDEFGHIJKLMNOPQRSTUVWXYZ.';句子1DB0DH,0AH,'$'STR2DB'THEREARESOMENEWSPAPERSONTHETABLE.'DB0DH,0AH,'$'STR3DB'THEREARESOMECLOUDSINTHESKY.'DB0DH,0AH,'$'STR4DB'SHEALWAYSEATSHERLUNCHATNOON.'DB0DH,0AH,'$'STR5DB'IDONOTLIKEAUTUMNANDWINTER.'CRLFDB0DH,0AH,'$'COLONDB':','$'EVENSADDRDWSTR1,STR2,STR3,STR4,STR5******定義時(shí)間參數(shù)******COUNTDW0;記時(shí)器記數(shù)SECDW0;秒MINDW0;分HOURSDW0;小時(shí)SAVE_LCDW2DUP(?);1C向量地址DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKMAINPROCFARSTART:MOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPPUSHDS;現(xiàn)場(chǎng)保護(hù)SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;*******將原中斷向量09H保存在自設(shè)的單元中******MOVAH,0MOVAL,4INT21HMOVAH,0BHMOVBH,0MOVBL,4INT11HMOVAH,35H;取中斷向量的功能調(diào)用MOVAL,09HINT21HMOVOLDCS9,ESMOVOLDIP9,BX;******設(shè)置自編處理程序的中斷向量******PUSHDSMOVDX,SEGKBINT;自編中斷類型程序段地址放入DSMOVDS,DXMOVDX,OFFSETKBINT;自編中斷類型程序偏移地址放入DXMOVAL,09HMOVAH,25H;設(shè)置中斷向量功能調(diào)用INT21HPOPDS;******將原中斷向量1CH保存在自設(shè)的單元中******MOVAH,35HMOVAL,1CHINT21HMOVSAVE_LC,BXMOVSAVE_LC+2,ES;******設(shè)置自編處理程序的中斷向量******PUSHDSMOVDX,SEGCLINTMOVDS,DXMOVDX,OFFSETCLINTMOVAL,1CHMOVAH,25HINT21HPOPDS;******允許鍵盤和定時(shí)器中斷******INAL,21H;允許鍵盤和定時(shí)器中斷ANDAL,11111100BOUT21H,AL;******設(shè)置顯示方式******FIRST:MOVAH,0MOVAL,3INT10H;******顯示提示信息******MOVDX,OFFSETPROMPT;顯示提示信息MOVAH,9INT21H;******在屏幕上顯例如句******MOVSI,0NEXT:MOVDX,SADDR[SI];顯例如句MOVAH,09HINT21H;******初始化變量******MOVCOUNT,0;設(shè)置初值MOVSEC,0MOVMIN,0MOVHOURS,0;******允許更高一級(jí)的中斷******STIFOREVER:CALLKBGETTESTKBFLAG,80HJNZENDINTPUSHAXCALLDISPCHARPOPAXCMPAL,0DHJNZFOREVERMOVAL,0AHCALLDISPCHAR;******顯示時(shí)間******CALLDISPTIMELEADX,CRLFMOVAH,09HINT21H;******顯例如句結(jié)束否?******ADDSI,2CMPSI,5*2JNENEXTJMPFIRST;******原來的中斷向量******ENDINT:CLIPUSHDSMOVDX,SAVE_LCMOVAX,SAVE_LC+2MOVDS,AXMOVAL,1CH;恢復(fù)中斷向量1CHMOVAH,25HINT21HPOPDSPUSHDSMOVDX,OLDIP9MOVAX,OLDCS9MOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDSSTIRETMAINENDP;******定時(shí)器中斷處理程序******CLINTPROCNEARPUSHDSMOVBX,DATAMOVDS,BXLEABX,COUNTINCWORDPTR[BX]CMPWORDPTR[BX],18;初始化記數(shù)JNERETURNCALLINCTADJ:CMPHOURS,12;是否滿12小時(shí)JLERETURNSUBHOURS,12;滿足減去12RETURN:POPDSSTIIRETCLINTENDPINCTPROCNEARMOVWORDPTR[BX],0ADDBX,2INCWORDPTR[BX];BX內(nèi)容自增1CMPWORDPTR[BX],60;和60比擬JNEEXITCALLINCTEXIT:RETINCTENDP;******顯示打字練習(xí)時(shí)間******DISPTIMEPROCNEAR;顯示時(shí)間主段MOVAX,MIN;分移動(dòng)到AX存放器CALLBINDEC;顯示數(shù)字MOVBX,0MOVAL,':'MOVAH,0EH;顯示冒號(hào)INT10HMOVAX,SEC;秒移動(dòng)到AXCALLBINDECMOVBX,0MOVAL,':'MOVAH,0EHINT10HMOVBX,COUNTMOVAL,55D;百分秒MULBLCALLBINDECRETDISPTIMEENDP******將二進(jìn)轉(zhuǎn)化為十進(jìn)顯示時(shí)間******BINDECPROCNEARMOVCX,100D;顯示百位CALLDECDIVMOVCX,10D;顯示十位CALLDECDIVMOVCX,1;顯示個(gè)位CALLDECDIVRETBINDECENDPDECDIVPROCNEAR;轉(zhuǎn)化成字符顯示MOVDX,0DIVCXMOVBX,0ADDAL,30H;轉(zhuǎn)換成ASCIIMOVAH,0EHINT10H;顯示一個(gè)字符MOVAX,DXRETDECDIVENDP******獲取鍵盤鍵入的信息******KBGETPROCNEARPUSHBXCLIMOVBX,BUFPT1;標(biāo)志緩沖區(qū)的大小CMPBX,BUFPT2JNZKBGET2CMPKBFLAG,0;!=00H的時(shí)候,一直獲取鍵盤JNZKBGET3STIPOPBXJMPKBGETKBGET2:MOVAL,[BUFFER+BX]INCBXCMPBX,16HJCKBGET3MOVBX,0KBGET3:MOVBUFPT1,BXPOPBXRETKBGETENDP;******鍵盤中斷處理程序******KBINTPROCNEARPUSHBXPUSHAXINAL,60H;鍵盤輸入存放器端口地址PUSHAXINAL,61H;控制商品存放器地址ORAL,80HOUT61H,AL;讀數(shù)據(jù)ANDAL,7FH;第八位清0,ASCII只有7位OUT61H,ALPOPAXTESTAL,80HJNZKBINT2MOVBX,OFFSETSCANTAB;查表輸出字符XLATSCANTAB;查表CMPAL,0JNZKBINT4MOVKBFLAG,80HJMPKBINT2KBINT4:MOVBX,BUFPT2MOV[BUFFER+BX],ALINCBXCMPBX,16HJCKBINT3MOVBX,0KBINT3:CMPBX,BUFPT1JZKBINT2MOVBUFPT2,BXKBINT2:CLIMOVAL,20HOUT20H,AL;送825920H端口POPAXPOPBXSTIIRETKBINTENDPDISPCHARPROCNEAR;顯示字符PUSHBXMOVBX,0MOVAH,0EH;顯示一個(gè)字符在AL里INT10H;顯示一個(gè)字條符POPBXRETDISPCHARENDPCODEENDSENDSTART4、系統(tǒng)測(cè)試4.1實(shí)驗(yàn)步驟:翻開windows命令窗口進(jìn)入masm程序的安裝目錄,匯編源文件,如圖:圖4.1.2匯編程序連接程序,并查看生成可執(zhí)行文件weijia.exe。圖4.1.3查看生成可執(zhí)行文件關(guān)閉對(duì)話框,翻開可執(zhí)行文件weijia.exe,開始打字計(jì)時(shí)練習(xí)。4.2運(yùn)行程序:1〕設(shè)置主程序段顯示提示信息,程序功能應(yīng)該實(shí)現(xiàn)下列圖所示:圖4.2.1程序調(diào)試2〕調(diào)用DISPCHARPROCNEAR顯示用戶字條,調(diào)用DISPTIMEPROCNEAR顯示時(shí)間,然后輸出下一句提示程序應(yīng)該實(shí)現(xiàn)下列圖所示:圖4.2.2程序調(diào)試3〕如此循環(huán)屢次,當(dāng)?shù)谖鍌€(gè)例句輸入完成后,再返回第一句繼續(xù)打字計(jì)時(shí)。圖4.2.3程序調(diào)試4.3調(diào)試中出現(xiàn)的問題沒有注意到要操作的目標(biāo)數(shù)據(jù)〔內(nèi)存中的數(shù)據(jù)〕的大小和使用的操作容器〔存放器〕的大小沒有一致。另外,對(duì)于處理數(shù)據(jù)的ds:[bx]方式,如movds:[bx],dxaddbx,2在循環(huán)中應(yīng)注意bx的遞增或遞減大小,如果處理字節(jié),比方用dl,循環(huán)中就加或減1;如果處理字,比方用dx,就加或減2。在以后應(yīng)該留意這個(gè)一致性。在8086上,ss和sp都是16位的,棧所處理數(shù)據(jù)的最小單位也是16位的,即最小是一個(gè)字,棧一次讀和一次寫,都至少是一個(gè)字那么大。5、軟件使用說明書程序設(shè)計(jì)時(shí),在預(yù)先設(shè)置的堆棧中存放一些字符串例句,每次打字之前,屏幕上先顯示出一個(gè)例句,然后打字員按照例句,將句中字符通過鍵盤輸入。這個(gè)過程可反復(fù)進(jìn)行,當(dāng)鍵入一個(gè)功能鍵時(shí),退出打字計(jì)時(shí)程序。自行編制鍵盤中斷和時(shí)間中斷處理程序,并保存原中斷向量。程序運(yùn)行時(shí),使用自編的中斷向量處理程序。程序退出時(shí),恢復(fù)中斷向量。6、設(shè)計(jì)總結(jié)課程設(shè)計(jì)對(duì)我們多數(shù)初學(xué)匯編的學(xué)生來說,確實(shí)是個(gè)一座頂峰。翻越它是要付出諸多努力的。我也是摸索了好久才弄明白它的。在此做個(gè)小結(jié),也許對(duì)自己今后的學(xué)習(xí)有一些借鑒的作用。為了防止存放器沖突的問題,在設(shè)計(jì)子程序時(shí),應(yīng)把所有用到的存放器都入棧保存,但用來傳遞參數(shù)和結(jié)果的存放器那么要注意,不必入棧的就不入棧了,以免得不到預(yù)期的結(jié)果??梢园汛娣牌鳟?dāng)作變量來看待,有時(shí)候它存儲(chǔ)的是數(shù)據(jù)變量〔如把BP當(dāng)作字符個(gè)數(shù)的記錄器〕,而有時(shí)候它存儲(chǔ)的是地址變量〔如DI、SI〕;內(nèi)存中的數(shù)據(jù),按它們的結(jié)構(gòu)關(guān)系,那么可以把它們看待成數(shù)組,我們對(duì)數(shù)組,可以通過首地址來訪問它們。傳遞參數(shù)和結(jié)果的,一般可以用存放器,也可以用一段內(nèi)存空間來傳遞,特別是需要傳遞的數(shù)據(jù)較多的時(shí)候。在設(shè)計(jì)子程序時(shí),往往涉及到許多的循環(huán),這時(shí)候就要注意把不該循環(huán)的變量要放在循環(huán)體外。一周的匯編語言課程設(shè)計(jì)結(jié)束了,我的收獲是很大的。通過課程設(shè)計(jì)的編程和對(duì)編程過程中遇到的問題的思考,有效的提高了我對(duì)匯編的認(rèn)識(shí)和理解,切實(shí)的提高了我的編程能力,補(bǔ)全了我的缺乏。通過這次課程設(shè)計(jì),我穩(wěn)固所了學(xué)過的知識(shí),能用匯編語言熟練地運(yùn)用順序、選擇、循環(huán)三大結(jié)構(gòu),進(jìn)一步掌握了各個(gè)指令的功能,特別是轉(zhuǎn)向指令,掌握了子程序的定義及調(diào)用,以及正確地運(yùn)用DEBUG指令。在整個(gè)程序的編寫中,調(diào)試占了很大局部的時(shí)間。要想寫好匯編語言的程序,必須認(rèn)真對(duì)待代碼的每一個(gè)細(xì)節(jié),還必須熟練的掌握debug命令,這對(duì)程序的調(diào)試是非常重要的。通過這次實(shí)際動(dòng)手能力的培養(yǎng),我進(jìn)一步熟悉了匯編語言的結(jié)構(gòu)和使用方法,根本到達(dá)了能獨(dú)立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平另外,我覺得,學(xué)習(xí)匯編有一個(gè)比擬大的好處,就是可以了解到在電腦中每一個(gè)字節(jié)數(shù)據(jù)的來龍去脈,我覺得學(xué)習(xí)匯編可以發(fā)揮一下自己的空間想像力,特別是對(duì)內(nèi)存中數(shù)據(jù)的組織、存儲(chǔ)關(guān)系的想像。當(dāng)然,學(xué)習(xí)匯編還有另一個(gè)重要的收獲,就是如何處理數(shù)據(jù)的問題。7、參考文獻(xiàn)《IBM-PC匯編語言程序設(shè)計(jì)》,沈美明、溫冬蟬,清華大學(xué)出版社,2001。《IBM-PC匯編語言程序設(shè)計(jì)實(shí)驗(yàn)教程》,沈美明、溫冬蟬,清華大學(xué)出版社1992《80X86匯編語言程序設(shè)計(jì)教程》,楊季文等,清華大學(xué)出版社,1998。《Windows環(huán)境下32位匯編語言程序設(shè)計(jì)》,羅云彬,電子工業(yè)出版社,2002?!秴R編語言程序設(shè)計(jì)》,張志明等,重慶大學(xué)出版社,1997《匯編語言程序設(shè)計(jì)》,吳向軍等,高等教育出版社,2002《匯編語言程序設(shè)計(jì)》,錢曉捷等,電子工業(yè)出版社,2000《IBM-PC80×86匯編語言程序設(shè)計(jì)》,王保恒,國(guó)防科技大學(xué)出版社,1992《匯編語言程序設(shè)計(jì)》,錢曉捷,電子工業(yè)出版社,2003《匯編語言程序設(shè)計(jì)教程與實(shí)訓(xùn)》趙潤(rùn)林、范國(guó)渠,北京大學(xué)出版社,2006《微機(jī)原理、匯編語言與接口技術(shù)》,唐瑞庭,中國(guó)水利水電出版社,20068、致謝在這次匯編語言課程設(shè)計(jì)中,我的課設(shè)題目是打字計(jì)時(shí)練習(xí)。在這次課設(shè)中,我對(duì)匯編語言的語法和指令有了進(jìn)一步的認(rèn)識(shí),對(duì)匯編語言的編程有進(jìn)一步的掌握,這都?xì)w功于劉老師和同學(xué)的幫助。在此,我對(duì)在課設(shè)中對(duì)我有幫助的同學(xué)和老師表示衷心的感謝。STACKSEGMENTPARASTACK'STACK'DB256DUP(0)TOPLABELWORDSTACKENDSDATASEGMENTPARAPUBLIC'DATA'BUFFERDB16HDUP(0);緩沖區(qū)大小BUFPT1DW0;緩沖區(qū)1BUFPT2DW0;緩沖區(qū)2KBFLAGDB0;參數(shù),80H表示允許,00表示不允許PROMPTDB'*PLEASEPRACTISETYPING*',0DH,0AH,'$';定義提示語句SCANTABDB0,0,'1234567890-=',8,0;定義鍵盤DB'QWERTYUIOP[]',0DH,0;定義鍵盤第一行英文字母及符號(hào)DB'ASDFGHJKL;',0,0,0,0;鍵盤第二行英文字母及符號(hào)DB'ZXCVBNM,./',0,0,0;鍵盤第三行英文字母及符號(hào)DB'',0,0,0,0,0,0,0,0,0,0,0,0,0DB'789-456+1230.'******設(shè)置一些存儲(chǔ)地址便于理解******EVENOLDCS9DW?;9號(hào)中斷向量地址OLDIP9DW?;9號(hào)中斷向量首地址******預(yù)設(shè)置打字練習(xí)的句子******STR1DB'ABCDEFGHIJKLMNOPQRSTUVWXYZ.';句子1DB0DH,0AH,'$'STR2DB'THEREARESOMENEWSPAPERSONTHETABLE.'DB0DH,0AH,'$'STR3DB'THEREARESOMECLOUDSINTHESKY.'DB0DH,0AH,'$'STR4DB'SHEALWAYSEATSHERLUNCHATNOON.'DB0DH,0AH,'$'STR5DB'IDONOTLIKEAUTUMNANDWINTER.'CRLFDB0DH,0AH,'$'COLONDB':','$'EVENSADDRDWSTR1,STR2,STR3,STR4,STR5******定義時(shí)間參數(shù)******COUNTDW0;記時(shí)器記數(shù)SECDW0;秒MINDW0;分HOURSDW0;小時(shí)SAVE_LCDW2DUP(?);1C向量地址DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKMAINPROCFARSTART:MOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPPUSHDS;現(xiàn)場(chǎng)保護(hù)SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;*******將原中斷向量09H保存在自設(shè)的單元中******MOVAH,0MOVAL,4INT21HMOVAH,0BHMOVBH,0MOVBL,4INT11HMOVAH,35H;取中斷向量的功能調(diào)用MOVAL,09HINT21HMOVOLDCS9,ESMOVOLDIP9,BX;******設(shè)置自編處理程序的中斷向量******PUSHDSMOVDX,SEGKBINT;自編中斷類型程序段地址放入DSMOVDS,DXMOVDX,OFFSETKBINT;自編中斷類型程序偏移地址放入DXMOVAL,09HMOVAH,25H;設(shè)置中斷向量功能調(diào)用INT21HPOPDS;******將原中斷向量1CH保存在自設(shè)的單元中******MOVAH,35HMOVAL,1CHINT21HMOVSAVE_LC,BXMOVSAVE_LC+2,ES;******設(shè)置自編處理程序的中斷向量******PUSHDSMOVDX,SEGCLINTMOVDS,DXMOVDX,OFFSETCLINTMOVAL,1CHMOVAH,25HINT21HPOPDS;******允許鍵盤和定時(shí)器中斷******INAL,21H;允許鍵盤和定時(shí)器中斷ANDAL,11111100BOUT21H,AL;******設(shè)置顯示方式******FIRST:MOVAH,0MOVAL,3INT10H;******顯示提示信息******MOVDX,OFFSETPROMPT;顯示提示信息MOVAH,9INT21H;******在屏幕上顯例如句******MOVSI,0NEXT:MOVDX,SADDR[SI];顯例如句MOVAH,09HINT21H;******初始化變量******MOVCOUNT,0;設(shè)置初值MOVSEC,0MOVMIN,0MOVHOURS,0;******允許更高一級(jí)的中斷******STIFOREVER:CALLKBGETTESTKBFLAG,80HJNZENDINTPUSHAXCALLDISPCHARPOPAXCMPAL,0DHJNZFOREVERMOVAL,0AHCALLDISPCHAR;******顯示時(shí)間******CALLDISPTIMELEADX,CRLFMOVAH,09HINT21H;******顯例如句結(jié)束否?******ADDSI,2CMPSI,5*2JNENEXTJMPFIRST;******原來的中斷向量******ENDINT:CLIPUSHDSMOVDX,SAVE_LCMOVAX,SAVE_LC+2MOVDS,AXMOVAL,1CH;恢復(fù)中斷向量1CHMOVAH,25HINT21HPOPDSPUSHDSMOVDX,OLDIP9MOVAX,OLDCS9MOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDSSTIRETMAINENDP;******定時(shí)器中斷處理程序******CLINTPROCNEARPUSHDSMOVBX,DATAMOVDS,BXLEABX,COUNTINCWORDPTR[BX]CMPWORDPTR[BX],18;初始化記數(shù)JNERETURNCALLINCTADJ:CMPHOURS,12;是否滿12小時(shí)JLERETURNSUBHOURS,12;滿足減去12RETURN:POPDSSTIIRETCLINTENDPINCTPROCNEARMOVWORDPTR[BX],0ADDBX,2INCWORDPTR[BX];BX內(nèi)容自增1CMPWORDPTR[BX],60;和60比擬JNEEXITCALLINCTEXIT:RETINCTENDP;******顯示打字練習(xí)時(shí)間******DISPTIMEPROCNEAR;顯示時(shí)間主段MOVAX,MIN;分移動(dòng)到AX存放器CALLBINDEC;顯示數(shù)字MOVBX,0MOVAL,':'MOVAH,0EH;顯示冒號(hào)INT10HMOVAX,SEC;秒移動(dòng)到AXCALLBINDECMOVBX,0MOVAL,':'MOVAH,0EHINT10HMOVBX,COUNTMOVAL,55D;百分秒MULBL

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論