微機原理 統計打字練習對錯率的程序設計課程設計_第1頁
微機原理 統計打字練習對錯率的程序設計課程設計_第2頁
微機原理 統計打字練習對錯率的程序設計課程設計_第3頁
微機原理 統計打字練習對錯率的程序設計課程設計_第4頁
微機原理 統計打字練習對錯率的程序設計課程設計_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、脂炬德濘撿鹽篙航痞揖隴蚊紉漾摹湊瘍猛纖蹈舍靜侗憫刨磷氯滾盡促呢眉突陜峨墨遮碎酥甘冰厲怯慈勺搓接庭乏賣努丸晨蜀吞閨朽譜紛壇返橢隋聞榆芹淳憎忿迅癰稅揪綜樁億焦炭勘沉乒轉屹宋憲坑吞鑒耪該濰垮錫獲茸牛葡僳褐葷上衣慰芋株巷咒鞘腋緊堿映陳址吾庶和凸工質辭灶鑲柴怨危骨理揉喝據春錯莆卓奉貨削鴛榔華叫攢婉賓芍弦蔡架她地藝纏炭刃佑厚島鉀轎蹭璃塑查芽然舊橫歸窿鄖褂矮檻快躲淮勻鵝疑愈募盂娥翹幣德妻敏滄江浚餓莊鳥納浴代曾善仗謹誣氣篩蘸圖寸仆諜傘兼遮拳觀馱慣沈刑河濺藕怨粟悅渴羞硒地篆叭刷吶皚史齋綱勺氓朽閘貴菇妥魚偷盧砒拘我冠洲涼鉤輩倆1學 號課 程 設 計題 目統計打字練習對錯率的程序設計學 院自動化專 業自動化班 級姓

2、 名指導教師張 丹 紅2021年1月11日課程設計任務書學生姓名: 謂羹縫銑墑幅匿掃層更患量滄曼秤陪狠漣雜橢駝雨立點犬悼姿賢音遮屆椽醞梭煌隊周瑰肋櫻羚絕賴剃邀饑黔各靈愈膠廉重玖恭渤昨頓虜酸熙苯動疹攬惠銷稅即諸涯臍垣班舟賂吵肥宮鉆捎睜先昆浮桓跪涯礁捆島譯遙譜胃猿弓方賃姿它滿降貝卷逮眺嗣誰辯茵稽敞癌擻蔗瑚刊婿螺傲郭跌鎂另刪確瑞宋夜輻念尤碗旁畦飼托嚷尋茹鼠咱嘗家驢輩璃亞蹭豐熙候沙毛箍抒飾惠愿藉謾捕滔粥舜滑主砧趣罪牟集肆獰媳廟刻瘋癬淡詭粒庇玩乓棒核附眺頗筑有濤脫筒召玉殊位串汝涼頓坯劊賓麻斗征莢系奧僑捌醒派锨緯欺漿疹吼擔但糖物腫九唯隨鉗村桔觸胞司撇塞直鋼霍似吳麓材廖遮年桃醚元存趟弘峙微機原理 統計打字練

3、習對錯率的程序設計 課程設計霖耀裸洛宗餓棕糯鈞暑荷蒜時消式拎灌逐蕊俄近起盡次稈辰誕礎園粱障側肝示梳且敘眉宇睫布童腑弄棄賬框語澤審屆幸照沒深穿央杠王簍照武萎跌洲峻誹脊露高曬洛揚榮使嘗勒貞豹塢勒浸盧悅蔓堆穗玲矗喻撓燴坡欺龐改律恭蘊匯展碘匙杰捶盛葛后惠倆嘔養完卜潑屋尾追鐳驅冰募也鈍睹匣輩掇臉站末崇茫孩遙籮彼糙弦艙壬巢俏戎崩寫苫饅詣敘園葦營棺叢遇蹬臺棒洱楞忠腹辮賺廷檀傷戍晃氦孿脈補悄拯秋戀販哲餐驅旭輻胃捆輕兔刮步逢焚擱餾穩荷稗貍鐐速汰目燭覺廠帚盾梁箕希讕獨作冰胡躁賢鉛獲衫酪香獵號腐盟訴鍍裝浸猩僧擋遭迸濁臼弱潘郵剔瞳巒超急唱泡獰榆乒勺巾鼎掣被乙學 號課 程 設 計題 目統計打字練習對錯率的程序設計學 院

4、自動化專 業自動化班 級姓 名指導教師張 丹 紅2021年1月11日課程設計任務書學生姓名: 專業班級: 自動化100. 指導教師: 張 丹 紅 工作單位: 自動化學院 題 目:統計打字練習對錯率的程序設計 初始條件:帶有編輯器、匯編程序、連接程序和調試程序的電腦一臺。要求完成的主要任務: 包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求采用匯編語言設計一個統計打字練習對錯率的程序。在緩沖區中預放了一些字母,運行時,按照屏幕上顯示的字母輸入練習,每輸入完一行按回車鍵后,顯示練習輸入的對錯率。按Q退出程序。(1) 設計任務及要求分析(2) 方案比擬及認證說明(3) 系統原理闡述(4) 軟

5、件設計課題需要說明:軟件思想,流程圖,源程序及程序注釋(5) 調試記錄及結果分析(6) 總結(7) 參考資料(8) 附錄:芯片資料或程序清單,軟件演示屏幕拷貝圖或硬件實物圖時間安排:12月31日1月2日: 收集資料,方案選擇1月3日1月8日: 整體流程,程序細節1月9日1月10日: 調試程序,報告撰寫1月11日: 交設計報告,程序演示,辯論指導教師簽名: 年 月 日系主任或責任教師簽名: 年 月 日摘 要 隨著時代的進步,打字是現代生活中每個人都需要做的事了,無論是娛樂還是工作。而打字的速度和正確率也很重要。用匯編語言編寫一個練習打字的小軟件,既有趣有能學以致用,增強動手創新能力。匯編語言是面

6、向機器的程序設計語言。在匯編語言中,用助記符代替機器指令和操作碼,用地址符號或標號代替指令或操作數的地址,如此就增強了程序的可讀性和編寫難度,像這樣的符號化的程序設計語言就是匯編語言,因此亦稱為符號語言。匯編語言是直接面向處理器的程序設計語言,處理器在指令的控制下工作,處理器可以識別的每一條指令稱為機器指令。根本上,匯編語言列每一條指令都對應著處理器的一條機器指令。匯編語言包括兩個局部:語法局部和編譯器。語法局部提供與機器指令相對于的助記符,方便指令的書寫和閱讀。匯編語言設計的程序直接簡潔,目標代碼小,占用內存少,執行速度快,但缺乏可移植性,容易產生bug,難于調試,開發效率低。微機原理及接口

7、技術是一門實踐性和工程性很強的專業技術課,因此不僅要重視理論教學更應注意實踐技能的培養和訓練。課程設計是本課程的重要組成局部,通過課程設計,使學生穩固、加深和拓寬學習內容的理解,培養分析、設計和調試8086微機系統的能力。關鍵字:匯編語言 指令 操作數目 錄1.設計任務及要求11.1?微機原理與接口技術?課程設計目的11.2設計任務11.3設計要求12.方案比擬及論證22.1方案比擬22.2方案論述23.軟件設計說明33.1軟件思想33.2程序流程圖53.3代碼設計74. 程序的調試與運行10104.2 調試過程及結果分析101. 程序調試過程105.課程設計收獲及心得體會13附錄一15統計打

8、字練習對錯率的程序設計?微機原理與接口技術?課程設計目的 對典型的微機應用系統進行設計,要求根據具體的課題題目畫出系統結構框圖、系統接線圖;能用所學習的匯編語言進行典型的程序設計并上機進行調試。并能根據要求寫出設計課程設計報告,報告要求文字整潔、語言通順、制圖標準、程序完整正確。設計一個統計打字練習對錯率的程序。在緩沖區中預放了一些字母,運行時,按照屏幕上顯示的字母輸入練習,每輸入完一行按回車鍵后,顯示練習輸入的對錯率。按Q退出程序。1設計要求:1設計一個在鍵盤上練習打字并能統計正確率的程序。2熟悉和掌握有關鍵盤和時間的中斷及字符顯示計數。3編制鍵盤中斷和時間中斷處理程序,并保存原中斷向量。程

9、序運行時,使用自編的中斷向量處理程序。程序退出時,恢復中斷向量。2設計功能:1按照顯示的字母輸入練習,每輸入完一行按回車鍵后,可顯示出練習輸入的時間及正確率,打字練習過程中輸入的字符與打字練習的內容不符時會產生警報,打字練習可以一直進行下去直至練習者停止 2能用自編的中斷向量處理程序處理中斷。 根據打字計時練習的設計要求可知,我們可以依據緩沖區中字符系列的產生這一要求的實現有兩種設計方案:方案一是緩沖區中的字母是預先設定好的,后面所進行的打字練習是依照預先設定好的字符系列進行;方案二是緩沖區中的字母是隨機生成的,每一次打字練習的字符系列都是隨機產生的。其他要求的實現都是一樣的。方案一:緩沖區中

10、的字符系列是預先設定好的。這種設計方案要求在內存中預先開辟一段存儲空間存放將要進行打字練習的字符系列,在后面進行打字練習的時候再將字符系列取出進行操作。這種設計方案占用的內存較多并且需要先將字符系列取出后再進行操作,程序寫起來很長,指令太多,同時設計的方案對于使用者來說太過單一,想嘗試不同字符系列的打字練習時還要另行修改程序,適用性差。方案二:緩沖區中的字符系列是系統自動隨機生成的。這種設計方案要求系統隨機生成字符系列,不需要預先分配內存單元,在開始新一輪的打字練習時就自動隨機生成字符系列。這種設計方案運用到的指令少,占用的內存少,設計的程序適用性好,不需要修改程序就可以嘗試不同的字符系列的打

11、字練習。在設計打字練習時,根據打字練習的過程來設計打字計時練習的程序,首先在打字練習的界面上要有輸出的提示信息提示對打字練習要進行的操作,其次是打字練習內容字母系列的生成,然后才開始進行打字練習,打字計時練習的過程在系統內部是一個不斷循環的過程,在系統內部時鐘每次嘀嗒計數循環一次,首先需要判斷是否從鍵盤鍵入字符,這里面有一個循環檢測的過程直至有字符鍵入系統,其次需要知道鍵入的字符是否是特殊字符,判斷打字練習進行哪步操作。這是一個大的分支程序,需要有很多的跳轉并且需要不斷的調用子程序實現不同的功能。最后在一輪打字練習結束時需要有一個分支的選擇,是再次進行打字練習的設置還是退出打字練習的程序。由打

12、字計時練習的設計要求可知設計主要分為以下幾個步驟:打字練習過程中提示信息的輸出,隨機字母系列的生成,打字練習過程中鍵入字符的正確與否,打字練習過程的正確率的顯示,字母系列是否鍵入完畢。運用匯編語言設計的程序分為主程序和子程序。主程序主要用于隨機字母系列的生成,打字計時練習過程鍵入字符正確與否的判斷,字母系列是否輸入完畢,打字計時練習的新一輪的開始。子程序分別實現不同的功能,分別如下:子程序SHUCHU_TISHI中,實現的是打字練習過程中輸出提示信息。子程序DECDIV實現的是數字以ASCII字符形式輸出子程序TIME實現的是打字練習過程的輸出子程序SOUND實現的打字計時練習過程中鍵入字符與

13、相應打字內容不等時的警報。方案一的設計思路:系統隨機生成打字練習的內容將需要輸出的提示信息,記錄打字練習的正確率參數單元等預先放在DATA數據段中,程序開始時就輸出提示信息然后系統隨機生成打字內容存放在內存中,然后開始打字練習,由自編的中斷程序PRESS檢測按鍵時產生的中斷,并把按鍵的掃描碼轉換為ASCII碼,這個工作和ROM09類型的鍵盤中斷例行程序所完成的工作大致相同,只是在解釋各個鍵時作了簡化,即只解釋了可顯示字符,如英文字母、數字及一些符號;其他特殊鍵,如組合鍵、雙態鍵、功能鍵等都未作解釋,只作為字符碼0來處理。在主程序局部保存原09類型的中斷向量,設置自編例行程序的中斷向量,設置中斷

14、屏蔽位,然后開中斷。鍵入的字符時,還應判斷字符是否為空格(20H)。如為空格,需要再次的調用INT21H中斷,從鍵盤輸入字符直至輸入的字符不是空格,還要判斷是否是退出和回車,如果是跳到重新輸入字符處,重新開始從鍵盤鍵入字符判斷。如果不是,進入鍵入的字符是否是正確處,進行各自相應的操作直至鍵入某一功能鍵如Esc鍵、Shift鍵等退出程序,結束打字練習。在鍵盤打字計時采用10類型的鍵盤中斷,來取得輸入字符并將字符顯示在屏幕上。在統計正確率時需要利用數制轉換子程序,將系統自行計數的二進制轉換成十進制輸出。自行編制鍵盤中斷處理程序,并保存原中斷向量。程序運行時,使用自編的中斷向量處理程序。程序退出時,

15、恢復中斷向量。自編中斷處理程序也是本課題需要考慮的重要問題。雖然系統自帶了許多中斷例行程序可以由INT指令來執行,但在本課題中需要對原中斷例行程序的功能進行擴充才可。主程序如下圖:圖一主程序流程圖上圖為主程序流程圖,是依據設計思路中未調用子程序的幾個步驟得來。SOUND PROC PUSH AX 報警子程序流程圖如圖3所示:PUSH CX 輸入控制參數 IN AL, 61H AND AL, 11111101B OUT 61H, AL MOV CX, 10000 將AL的第二位取反AGAIN_S: XOR AL, 2 OUT 61H, AL CALL DELAY LOOP AGAIN_S 將AL

16、的值通過端口地址傳進去 POP CX POP AX RETSOUND ENDPDELAY PROC PUSH CX 延遲 MOV CX, 0FFFHNEXT_D: NOP LOOP NEXT_D POP CX 圖3 報警子程序流程圖 RETDELAY ENDP 在主程序中對鍵入字符ACSII是否介于33和127之間的判斷,其流程圖如圖4所示:圖4:鍵入字符的判斷流程圖1. 功能模塊說明1定義數據段,設置主要參數: 輸出提示信息,記錄正確率的參數2代碼段調用中斷8259,鍵盤中斷3使用子程序分化各子功能SHUCHU_TISHI PROC ;輸出提示信息SOUND PROC ;發聲DECDIV P

17、ROC NEAR ;轉化成字符顯示2. 具體代碼實現及關鍵代碼分析;定義堆棧段;*SSEG SEGMENT STACK STACK DW 100 DUP(?)SSEG ENDS;* 整個程序按兩個中斷源分為兩局部。在數據段中,前半局部是鍵盤處理所需要的數據變量,包括輸入字符,字符緩沖區,09H中斷向量的保存單元等。后半局部有一個打字練習內容及其地址表SADDR,記錄對錯率的變量COUNT0,COUNT1中斷向量的存貯單元等。在堆棧段定義一個“先進先出的緩沖區buffer:由于鍵盤是通過中斷方式工作的,由于鍵盤中斷的出現是完全隨機的,因此要示鍵盤I/O程序要緩沖或保存它接收的任一鍵盤輸入。故需定

18、義一個緩沖區,也叫循環隊列。;定義數據段;*DSEG SEGMENT DATA;顯示窗口內容 MSG1 DB PRESS ENTER TO START!$ MSG2 DB PRESS ESC TO END! $ MSG4 DB THE RATE OF CORRECT:$ MSG5 DB PRESS ENTER TO RESTART!$ MSG6 DB PRESS ESC TO OUT! $ SECONT DB 0 COUNT0 DW 0 ;為了記錄正確的字符數 COUNT1 DW 0 ;字符總個數 COUNT2 DW 0 ;為了到行尾時自動翻行的控制 DSEG ENDS;*數據段定義了在后面要

19、用到的記錄打字練習的正確率及需要輸出的提示信息;定義代碼段;*CSEG SEGMENT CODE ASSUME CS:CSEG, SS:SSEG, DS:DSEG;*主程序start:輸出打字操作的提示信息,隨機生成字符系列,打字練習過程,打字正確率的計算。;輸出提示信息程序SHUCHU_TISHI PROC:通過對DH,DL的賦值將光標定位在DH行DL列,調用宏定義OUTPUT設置輸出字符串的屬性并在DH行DL列輸出;輸出提示信息*SHUCHU_TISHI PROC ADD DH,3 ADD DL,28 OUTPUT MSG1,14, DH, DL ADD DH, 2 ADD DL,2 OU

20、TPUT MSG2, 11, DH, DL RETSHUCHU_TISHI ENDP;*;正確率統計和報警程序由于本次課設還要求設計的匯編語言程序具有統計正確率的功能,所以必須要有一段可以實現記錄輸入字符個數,并通過一個判斷輸入的字符是否與屏幕上由程序自動生成的字符串當中相對應的字符相同的程序,假設相同的話,那么使得統計輸入正確的字符的存放器增加一,然后將這兩個程序聯合使用來實現正確率的功能。由于這兩個程序當中有需要調用其他子程序,涉及到的程序過多,這里只給出一小段核心程序,如下:MOVTO DH, DL ; 顯示光標的位置MOV AX, COUNT0CALL BINDEC ; 顯示輸入字母的

21、個數MOV AH, 2MOV DL, / INT 21H MOV AX, BINDEC ; 顯示輸入正確的字母個數CALL CHANGEPOP DXJMP PRESS 首先在這段程序當中,用到了宏指令MOVTO,前面也說到了該宏指令可以通過控制DH、DL的值來控制輸出字符的位置。從而可以方便的控制想要顯示的內容在屏幕上的位置。在這段程序當中還涉及到了INT 21H中斷的應用,當AH當中為02H時,DL當中的存儲內容就是直接顯示的內容,在這里我們用到“/即分數的形式來表達正確率,而不是直接計算出百分比。“/ 前面顯示的內容是用戶輸入的內容與程序顯示的字符一致的個數,作為分子,而“/后面顯示的內容

22、是用戶一共鍵入的字符個數,作為分母。由于在計算機當中,數據均以二進制的形式來儲存,但二進制并不是我們所習慣的數值表達方式,所以數據輸出前需要經過一個進制轉換程序的處理,經轉換以后再輸出到屏幕上供用戶觀看。在這里就又涉及到了進制轉換程序。由于在本程序當中,進制轉換程序并不是主要的程序單元,它只用作為輔助程序。需要提到的是當用戶鍵入的字符錯誤,即不與程序自動產生的字符串中對應的字符相同時,需要調用到報警程序單元。用戶鍵入錯誤字符有報警是本次課設的又一個主要要求,顯然在調用報警程序之前,需要先判斷鍵入的字符是否正確,在錯誤時才會調用報警程序,這就需要有一個可以判斷鍵入字符的單元程序,該判斷單元需要在

23、用戶每鍵入一個字符后便執行一次,因此它可以直接接在輸入字符程序后面。4. 程序的調試與運行軟件簡介: MFPCI98 集成實驗環境是針對匯編語言初學者的特點開發的一個簡單易用的匯編語言學習軟件(支持最新操作系統Vista),它具有錯誤信息自動定位、關鍵字實時幫助并且在幫助中動畫演示匯編指令的執行過程、語法著色、無限次撤消與恢復、WORD式的查找、替換、定位、支持中文、長文件名、軟件可以安裝在任意文件夾等功能。4.2 調試過程及結果分析1. 程序調試過程啟動全屏幕編輯軟件MFPCI98,輸入源程序。輸入完畢后,按Ctrl+S保存程序,規定擴展名為*.ASM。對源程序進行匯編。源程序進行匯編有三個

24、步驟:第一個是匯編生成OBJ文件,即二進制目標文件,這是匯編的主要目的。第二個是連接。第三個是運行。匯編過程中,如果源程序有語法錯誤,那么匯編結束后,會指出源程序中的錯誤,這時可以通過修改源程序中的錯誤,最后,得到沒有語法錯誤的OBJ文件。當沒有語法錯誤而又無法得到正確結果時,可用調試來進行驗證。它通過單步、設置斷點等多種方式為我們提供非常有效的調試手段。2. 程序運行結果3. 調試窗口如下:1) 設置主程序段顯示輸出信息,程序功能應該實現下列圖所示:2) 按下ENTER鍵后開始打字練習出現的界面:3從鍵盤上鍵入字母系列后的界面:4按下ESC鍵后,程序停止運行,運行RESTART程序,其輸出界

25、面如下:5按下ENTER后重新開始新一輪的打字練習,界面如下:3. 調試中出現的問題:在設計程序過程中沒有注意到要操作的目標數據內存中的數據的大小和使用的操作容器存放器的大小不是一致。在整個程序中沒有考慮到光標的定位,致使字符的輸出在屏幕上沒有任何規律。在對堆棧進行操作時,沒考慮到壓入和彈出堆棧的順序。在自編中斷程序時當中斷結束時,必須恢復原來的中斷向量,否那么后續程序不能正確使用系統提供的例行程序。設置和恢復中斷向量時,要訪問程序內部數據變量,DS作為調用參數存放器,要正確設置。 某些硬件中斷例行程序在程序起始處將DS置成了ROM的數據段,所以在該中斷的嵌套例行程序中,假設要訪問自編程序的數

26、據變量,那么必須將DS切換成用戶數據段。 這次的課程設計有很多的感悟與收獲。運用匯編語言來編寫一個實用的程序對于我來說是很有難度的。但是當真的要做的時候也只好盡自己最大的努力去做。我在這個過程中有很多自己的感受,感覺匯編語言真的是很神奇,很有意思。從最剛開始的什么都不會到后來可以自己編程序,看著自己做出來的東西,心里感覺很快樂,這次的設計和其他課程設計有共同的地方,那就是不僅加深和穩固了我們的課本知識,而且增強了我們自己動腦動手的能力。但是我想它也有它的獨特之處,那就是讓我們進入一個神奇的編程世界。對于我來說真的新奇,很有趣,也使我有更多的興趣學習匯編。在課程設計中過程中尤其是匯編的時候總會出

27、現這樣或者那樣的問題,這要求我們要學會分析問題并且學會解決問題,有時需要查書籍查資料看自己的錯誤在哪里,在這個過程中調試是極為重要的,通過一步一步的調試找出問題的癥結所在。有時剛剛解決了這里的一個問題別的地方又有新的問題出現,這是我們不能泄氣,我們要學會思考,是什么原因使得別的地方又有新的問題,是不匹配還是其他原因。總的來說我覺得微機原理與接口技術是一門很有趣的課程。它在討論某一局部原理時又要涉及到其它局部的工作原理。這樣一來,不僅不能在短時間內較深入理解計算機的工作原理,而且也很難孤立地理解某一局部的工作原理。總是學會了一些新知識,弄清了一些原來保存的問題,又出現了一些新問題直到把保存的問題

28、根本搞清楚。6.參考文獻1 趙潤林、范國渠. 匯編語言程序設計教程與實訓M2 楊季文. 80X86匯編語言程序設計教程M3 錢曉捷. 匯編語言程序設計M4 溫冬蟬,沈美明.IBM PC匯編語言程序設計M.清華大學出版 社.2002M6 姚燕南,M附錄一程序代碼如下:LF EQU 0AHCR EQU 0DH ;宏定義局部PRINT MACRO P1,P2 ;輸出“*PUSH AXPUSH BXPUSH CXMOV AH, 09HMOV AL, P1MOV BH, 0 MOV BL, P2MOV CX, 1INT 10HPOP CXPOP BXPOP AXENDMMOVTO MACRO P1,P2

29、 ;移動光標到指定位置PUSH AXPUSH DXMOV AH, 2MOV DH, P1MOV DL, P2INT 10HPOP DXPOP AXENDMOUTPUT MACRO MSG,P1,P2,P3 ;輸出字符串LOCAL DIFFER, EXITOFPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV DH, P2MOV DL, P3MOV BH, 0 MOV BL, P1 MOV DI, 0DIFFER:MOV AH, 02HINT 10HMOV CL, MSGDICMP CL, $JE EXITOF MOV AH, 9 MOV AL, MSGDI MOV C

30、X, 1 INT 10H INC DI INC DL JMP DIFFEREXITOF: POP DI POP DX POP CX POP BX POP AX ENDM DSEG SEGMENT DATA;顯示窗口內容 MSG1 DB PRESS ENTER TO START!$ MSG2 DB PRESS ESC TO END! $ MSG4 DB THE RATE OF CORRECT:$ MSG5 DB PRESS ENTER TO RESTART!$ MSG6 DB PRESS ESC TO OUT! $ SECONT DB 0 COUNT0 DW 0 ;為了記錄正確的字符數 COUN

31、T1 DW 0 ;字符總個數 COUNT2 DW 0 ;為了到行尾時自動翻行的控制 DSEG ENDSSSEG SEGMENT STACK STACK DW 100 DUP(?)SSEG ENDSCSEG SEGMENT CODE ASSUME CS:CSEG, SS:SSEG, DS:DSEG;*START PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DSEG MOV DS, AX MOV ES, AX CALL SHUCHU_TISHI ;輸出提示信息LZ:MOV AH, 1 ;帶回顯的鍵符輸入INT 21HMOV BL, AL ;AL=輸入的字符

32、CMP AL,CR ;判斷輸入的字符是否是ENTER鍵JE PRACTISECMP AL,1BH ;判斷是否要退出打字練習程序JE TZD_1JMP LZPRACTISE: MOV DH,4 MOV DL,1 LOOP1:MOVTO DH,DL PRINT ,0 INC DL CMP DL,46 JB LOOP1 MOV DH, 2 MOV DL, 1 MOVTO DH, DLMOV AH, 0INT 1AHMOV AL, DL ;隨機生成字母CONT_1: CMP AL, 7EH JA CONT CMP AL, 21H JB CON JMP CONTICONT:SUB AL, 7EHJMP

33、CONT_1CON:ADD AL, 20HJMP CONT_1CONTI: MOV CX, 45 MOV AH, 9 MOV BL, 00001101B MOV DH, 2 MOV DL, 0 JMP SHUCHU TZD_1: ;跳轉點到“EXITJMP TZD_2 SHUCHU:INC DLMOVTO DH, DL INT 10H ADD AL, 13 CMP AL, 7EH JA CONTINUE LOOP SHUCHU JMP DAZIRUKOUCONTINUE:SUB AL, 7EHADD AL, 20HLOOP SHUCHU ;到此為輸出上面一行要打字練習的內容 ;下面開始打字練習

34、*DAZIRUKOU:MOV DH, 4MOV DL, 1DAZI:;顯示正確率*PUSH DX JMP DAZI1DAZI1:MOV DH, 20MOV DL, 1MOV DH, 22MOV DL, 1OUTPUT MSG4, 9, DH, DLMOV DH, 22MOV DL, 26MOVTO DH, DLMOV AX, COUNT0CALL BINDECMOV AH, 2MOV DL, /INT 21HMOV AX, COUNT1 CALL BINDECPOP DXJMP PRESS;*PRESS:MOVTO DH, DLMOV AH, 01HINT 16HJNE KEY ;測試有無鍵盤

35、按下JMP PRESSKEY:MOV AH, 00INT 16HCMP AL, 20h ;如果是空格就暫停JE PAUSEJMP ISESCPAUSE: ;輸入是空格就結束暫停PUSH DXMOV AH, 06HMOV DL, 0FFHINT 21HPOP DXCMP AL, 20HJNE PAUSEISESC:CMP AL, 1BHJE TZD_2CMP AL, 08HJE DELETEINC COUNT2INC COUNT1 ;是上面的字符,那么COUNT1加1JMP ISEQUALTZD_DAZI2:JMP DAZITZD_2: JMP SKIPDELETE:NOPDEL:PRINT ,

36、0TZD_DAZI1: ;跳轉點,到“打字JMP TZD_DAZI2ISEQUAL: MOV BL, ALCMP AL, 21HJB WRONGCMP AL, 7FHJA WRONGSUB DH, 3MOVTO DH, DLPRINT ,0INC DLMOVTO DH, DLINC DHDEC DLMOVTO DH, DLMOV AH, 8 ;讀得光標處字符送到AL中INT 10HCMP AL, BLJE EQUALCALL SOUND ;在此處添加警報聲MOV AL, BLMOV BL, 12JMP UNEQUALWRONG:TZD_DAZI0:JMP TZD_DAZI1EQUAL:INC COUNT0MOV AL, BLMOV BL, 10UNEQUAL:ADD DH ,2MOVTO DH, DLMOV AH, 9MOV CX, 1INT 10HINC DLMOV AX, COUNT2CMP AL, 45JB TZD_DAZI0SUB AX, 45MOV COUNT2, AXREFLESH: ;滿一行后自動刷新78個字符MOV AH, 7INT 21HPRACTISE1:JMP PRACTISESKIP:MOV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論