微機原理課程設計鍵盤錄入轉換程序設計_第1頁
微機原理課程設計鍵盤錄入轉換程序設計_第2頁
微機原理課程設計鍵盤錄入轉換程序設計_第3頁
微機原理課程設計鍵盤錄入轉換程序設計_第4頁
微機原理課程設計鍵盤錄入轉換程序設計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、武漢理工大學微型計算機原理課程設計說明書1設計概述 此次課程設計為鍵盤錄入轉換程序設計,滿足以下要求:通過鍵盤連續(xù)錄入可顯示多個字符,遇“.”時終止;字符串以空格和“.”分隔,輸入完成后,空格前的字符串以正向在屏幕上顯示,“.”前的字符串以反向在屏幕上顯示。程序設計主要包括調用dos系統的int 21h功能從鍵盤輸入字符然后顯示字符,通過調用相應的字程序判斷輸入的字符是否為空格和“.”,當輸入“.”時終止字符的輸入,配合調用另一子程序來實現空格前的字符串在屏幕向以正序顯示,“.”前的字符串在屏幕上以反序顯示,從而完成此次課程設計。由于本程序設計大量使用調用dos系統的int 21h功能,本報告

2、書將首先介紹dos系統的int 21h功能,然后進行詳細的程序設計。2 程序設計相關知識介紹2.1 dos及其功能調用dos操作系統從兩個層次上向用戶提供與操作系統的接口,普通用戶可以通過鍵盤命令在命令處理模塊層次上和操作系統互交,高級用戶可以通過軟件中斷的方式在dos的較低層次上合操作系統交互,包括dos中斷調用和bios功能調用。dos操作系統將輸入輸出管理程序編制成一系列子程序,不僅系統可以使用,用戶也可以像調用子程序一樣方便的調用它們。這些子程序或常駐內存,或固化在系統的rom中。目前dos常用的9類中斷(20h27h和2fh)分為兩種:1 dos專用中斷:int22h、int23h和

3、int24h,用戶不能使用。2dos可調用中斷:int20h、int27h(程序退出)、int21h(系統功能調用)、int25h、int26h(磁盤r/w中斷)、int 2fh(假脫機打印文件)。dos系統功能調用的方式是通過執(zhí)行軟中斷指令int21h來實現的。當寄存器ax中設置不同的值時,該指令將完成不同的功能。在21h類型所對應的中斷程序中包含了一系列最常用的功能子程序,這些子程序分別分別實現外部設備管理功能、文件讀寫和管理功能、目錄管理功能等,所以21h類型中斷幾乎包括了整個系統的功能,系統功能調用的名稱也就由此而來。dos啟動成功后,int21h的中斷向量(中斷處理程序首地址)被初始

4、化在中斷向量表中向量地址為84h到87h的4個字節(jié)單元內。所有系統功能調用的各自功能的介紹見表1,有些系統調用功能簡單,不需要設置入口參數,或者說沒有出口參數。詳細的功能、入口參數、出口參數要求可見專門的手冊。通常,默認標準設備為:標準輸入設備(控制臺輸入)是鍵盤;輸出設備(控制臺輸出)是顯示器;標準輔助設備是第一個rs232串口異步通訊接口,打印輸出為第一個并行接口等。表1 字符i/o系統功能調用功能號功能入口參數出口參數01h帶回顯的鍵盤輸入al=輸入字符03h串行口輸入字符al=輸入字符06h直接控制臺i/odl=ff(輸入)dl=字符(輸出)al=輸入字符07h直接控制臺輸入(無回顯)

5、al=輸入字符08h無回顯的鍵盤輸入al=輸入字符0ah字符串緩沖輸入ds:dx=緩沖區(qū)首址0bh取鍵盤輸入狀態(tài)al=00無鍵入al=ff有鍵入0ch清鍵盤緩沖區(qū)后,輸入al=功能號(01/06/07/08或0a)02h字符顯示dl=輸出字符04h串行口輸出字符dl=輸出字符05h字符打印dl=輸出字符09h字符串顯示ds:dx=緩沖區(qū)首址0dh初始化鍵盤1功能01h、07h和08h 功能描述:從標準輸入設備(如:鍵盤)讀入一個字符。該中斷在處理過程中將一直處于等待狀態(tài)直到有字符可讀為止。該輸入還可被重定向,如果這樣做,則無法判斷文件是否已到文件尾。入口參數:ah01h,過濾掉控制字符,并回顯

6、。 ah07h,不過濾掉控制字符,不回顯。 ah08h,過濾掉控制字符,不回顯。出口參數:al輸入字符的ascii碼。例如:讀鍵盤輸入一個字符并且回顯的程序。mov ah,1int 21h2功能02h功能描述:向標準輸出設備(如:屏幕)輸出一個字符。該輸出還可被重定向,如果這樣做,則將無法判斷磁盤是否滿。 入口參數:ah02h,dl待輸出字符的ascii碼。出口參數:無。其基本格式如下:mov ah,2mov dl,要顯示的字符的asciiint 21h3功能03h功能描述:從輔助設備讀入一個字符,該輔助設備的缺省值為com1。入口參數:ah03h。出口參數:al讀入字符的ascii碼。4功能

7、04h功能描述:向輔助設備輸出一個字符,該輔助設備的缺省值為com1入口參數:ah04h,dl待輸出字符的ascii碼。出口參數:無。5功能06h功能描述:控制臺(如:鍵盤、屏幕)輸入/輸出。如果輸入/輸出操作被重定向,那么,將無法判斷文件是否已到文件尾,或磁盤已滿。入口參數:ah06h,dl輸入/輸出功能選擇。出口參數:若dl00h-feh,則此功能為輸出,dl為待輸出字符的ascii碼;若dl0ffh,則此功能為輸入,此時:若zf1,則無字符可讀,否則,al讀入字符的ascii碼。6. 功能09h功能描述:輸出一個字符串到標準輸出設備上。如果輸出操作被重定向,那么,將無法判斷磁盤已滿。入口

8、參數:ah09h,ds:dx待輸出字符的地址,待顯示的字符串以$作為其結束標志,否則會引起屏幕混亂。顯示時在字符串結束前加上回車及換行的ascii碼0dh和0ah,可使光標自動換行。出口參數:無。其基本格式如下:mov ah,9lea dx,int 21h7功能0ah功能描述:從標準輸入設備上讀入一個字節(jié)字符串,遇到“回車鍵”結束輸入(輸入的字符在標準的輸出設備上有回顯)。如果該輸入操作被重定向,那么,將無法判斷文件是否已到文件尾。入口參數:ah0ah,ds:dx存放輸入字符的起始地址。第一個字節(jié)為緩沖區(qū)的最大容量,可認為是入口參數;第二個字節(jié)為實際輸入的字符數(不包括回車鍵),可看作出口參數

9、;從第三個字節(jié)開始存放實際輸入的字符串;字符串以回車鍵結束,回車符是接受的最后一個字符;若輸入的字符數超過緩沖區(qū)的最大容量,則多出的部分被丟棄,系統并發(fā)出響鈴,直到輸入“回車”鍵才結束輸入。 出口參數:無。例如:用dos系統調用0ah從鍵盤輸入一個字符串str1 db 10,? 10 dup(?)lea dx,str1mov ah,oahint 21h8功能0bh功能描述:檢查標準輸入設備上是否有字符可讀,該輸入操作可被重定向。入口參數:ah0bh。出口參數:al00h無字符可讀;ffh有字符可讀。9功能0ch功能描述:清空當前的標準輸入緩沖區(qū),再讀入字符。其輸入操作可被重定向。入口參數:ah

10、0ch,al01h、06h、07h、08h或0ah。出口參數:若入口參數al為0ah,則ds:dx存放輸入字符的起始地址,否則,出口參數al輸入字符的ascii碼。2.2 ascii碼由于計算機硬件只能識別二進制數,字母和字符也必須使用二進制編碼來表示。目前用來表示字母和字符的二進制編碼方式有很多種,最常用的是ascii碼。ascii碼又稱美國信息交換標準碼(american standard code for information interchange) ,多用于輸入輸出設備(如電傳打字機),是7位二進制編碼。它總共可表示128個符號,包括26個英文大寫字母, 26個英文小寫字母,09共

11、十個數字,32個通用控制字符和34個專用字符。在計算機中用一個字節(jié)存放字符編碼,故在ascii的最高位補0。因此ascii可表示8位二進制或兩位16進制數。本設計所需要的“.”的ascii碼為2eh,空格的ascii碼為20h,回車及換行的ascii碼0dh和0ah。3程序設計3.1主程序設計由于需要通過鍵盤連續(xù)錄入可顯示的字符,需要調用dos系統的int 21h一系列子功能從鍵盤輸入字符然后顯示出來,最開始進行初始化,首先調用09h號子功能從鍵盤輸入“please input the string:”提示輸入一連串字符,以回車和換行作為結束自動切入另一行從而從鍵盤輸入字符;通過調用judge

12、子程序對輸入的字符進行判斷,判斷其是否為空格鍵和”.”鍵,當遇到空格時繼續(xù)輸入字符,遇到“.”時終止字符輸入。同時根據judge子程序的返回值作為判斷調用change子程序,當輸入字符沒有空格時字符全部以反序輸出顯示在屏幕上,當輸入字符有空格時對于空格前的字符以正序輸出顯示在屏幕上,對于“.”前的字符以反序輸出顯示在屏幕上。主程序的程序流程圖如下。偏移地址指針si清零int 21h的09號子功能顯示str1字符串dh清零段寄存器、堆棧和界面初始化開 始int 21h的01h號子功能接收鍵入字符調用judge子程序int 21h的01h號子功能接收鍵入字符cf=1?dh=1?$傳送到string

13、+si+1調用change子程序si加1ynint 21h的02h號子功能顯示回車和換行int 21h的09號子功能顯示str2和string字符串di加1ny結 束 圖1 主程序設計流程圖3.2 judge子程序設計對輸入的字符首先判斷其是否為空格鍵,若為空格鍵則將dh和cf置1,并且將數輸入的字符送到string中,若不為空格鍵則繼續(xù)判斷其是否為“.”鍵,則將cf置0,將其值返回后終止輸入字符。其程序流程圖如下。將si傳送給dial=20h?將1傳送給dhal=2eh?nyjudge子程序stcal傳送到string yncf=1圖2 judge子程序流程圖返 回3.3 change子程序

14、設計由于字符串處理在堆棧中進行,首先將斷點數據壓入堆棧,以便調用子程序后可以正確的返回主程序中,對輸入的數據的長度進行處理,計算設置si 和di 的初值,設置循環(huán),將循環(huán)次數賦予cl從而控制循環(huán),然后將string+si傳送到al中,用xchg將al和string+di數據交換,循環(huán)結束后從而使得正序輸入的數據以反向輸出顯示在屏幕上,最后將斷點數據出堆棧返回到主程序。子程序流程圖如下。change子程序斷點數據壓入堆棧設置si和di初值將string+si傳送到al將string+di與 al數據交換將al傳送到 string+sisi減1,di加1斷點數據出堆棧cf=0?返 回ny 圖3 c

15、hange子程序流程圖3.4 程序編寫根據分析和程序流程圖,編寫以下程序。%定義數據段%data segment str1 dbplease input the string:,0ah,0dh,$ str2 db the result is:,0ah,0dh,$ string db 100 dup(?) menu1 db welcome sunlifei de design $data endsshuchu macro op1,op2,op3,op4,op5,op6 %循環(huán)輸出,用于初始化界面周邊的笑臉符%mov cx,0mov dh,op1 %起始行mov dl,op2 %起始列%op6:

16、mov ah,02hmov bh,01hint 10hpush cxmov ah,0ahmov al,op3 %要顯示的字符mov cx,01hmov bh,00hint 10hpop cxinc cxinc op4 %這里指的要循環(huán)輸出的是行還是列%cmp cx,op5 %循環(huán)次數%jne op6endmmenu macro op1,op2,op3 %用于屏幕上文字的輸出%mov cx,0%1,2為起始輸出的行、列,3為字符串的地址%mov ah,02hmov bh,00hmov dh,op1mov dl,op2int 10hlea dx,op3mov ah,9int 21h endmcls

17、 macro op1,op2,op3,op4 %用于清屏,分別是起止的行和列 mov ah,6mov bh,17hmov al,0mov ch,op1mov cl,op2mov dh,op3mov dl,op4int 10hmov ah,2 mov bh,0mov dh,0mov dl,0int 10hendm%定義堆棧段%stack segment db 100 dup(?)stack ends%定義代碼段%code segment assume cs:code,ds:data,ss:stack%主程序設計%start:mov ax,data %將數據段地址傳送給ds% mov ds,ax

18、mov ax,stack %將堆棧段地址傳送給ss% mov ss,ax mov si,0 %源字符串首地址置0% mov ah,9 %調用dos的09h功能號功能,將輸入的字符串顯示% lea dx,str1 %將str1的有效地址傳送給dx% int 21h %調用dos的21h中斷% xor dh,dh %異或將dh清零%loop1:mov ah,01h %調用dos的01h功能號功能,帶回顯的鍵盤輸入% int 21h call judge %調用judge子程序% jc done %進位標志cf=1時跳轉% inc si %si加1% jmp loop1 %無條件跳轉%down: c

19、mp dh,1 %將dh與1比較% je next %dh=1時跳轉% dec di %di減1%next: movstring+si+1,$ %傳送指令% call change %調用change子程序% mov ah,02h %調用dos的02h功能號功能,將輸入的字符串顯示mov dl,0dh %將字符串結束前的回車顯示回來% int 21h %調用dos的21h中斷% mov dl,0ah %將字符串結束前換行顯示出來% int 21h %調用dos的21h中斷% mov ah,09h %調用dos的09h功能號功能,將輸入的字符串顯示% lea dx,str2 %將str2的有效地

20、址傳送給dx% int 21h %調用dos的21h中斷% mov ah,09h %調用dos的09h功能號功能,將輸入的字符串顯示% lea dx,string %將string的有效地址傳送給dx% int 21h %調用dos的21h中斷% mov ah,01h %調用dos的01h功能號功能,帶回顯的鍵盤輸入% int 21h mov ah,4ch %結束程序% int 21h%空格和“.”判斷子程序%judge proc cmp al,20h %將輸入的數據與空格鍵比較% jnz next1 %輸入數據不為空格鍵時跳轉到next1% mov di,si %輸入數據為空格鍵時傳送數據%

21、 mov dh,01h %傳送指令%next1: cmp al,2eh %將輸入的數據與“.”比較% jnz next2 %輸入數據不為“.”時跳轉next2% stc jmp next3 %跳轉到next3%next2: clc %標志位cf清零%nect3: movstring+si,al %傳送指令% ret %返回指令%judge endp%字符串反向屏幕顯示子程序%change proc push ax %堆棧操作保護現場% push bx push cx push si push di mov ax,si %傳送指令% sub ax,di %將兩者相加結果送ax% dec ax %

22、ax加1% mov bl,02h %傳送指令% div bl %ax除以2% mov cl,al %傳送指令% xor ch,ch %將ch清零% sub si,cx %兩數相減將結果送si% add di,cx %將兩者相加結果送ax% loop2: mov al,string+si %傳送指令% xchg string+di,al %將兩者數據交換% mov string+si,al %傳送指令% dec di %di減1% inc si %si加1% loop loop2 %循環(huán)loop2過程% pop di %恢復現場% pop si pop cx pop bx pop ax retc

23、hange endp %子程序結束%code ends %代碼結束%end start4 程序調試4.1匯編語言源程序的匯編、連接和裝入運行匯編語言源程序編寫好以后,并不能直接運行,必須在匯編環(huán)境下對源程序進行匯編和連接,生成可執(zhí)行的文件后才能運行程序。一般需經過4個步驟。編輯:首先通過編輯器輸入、建立匯編源程序(文件名.asm),并以ascii碼的形式存入內存緩沖區(qū)。匯編:將匯編源程序(文件名.asm)經匯編程序翻譯后生成擴展名為.obj的目標文件、擴展名為.lst的列表文件和擴展名為.crf的交叉索引文件。通常目標文件時必須建立的,他包含了程序中所有機器代碼。列表文件包含了源程序、目標代碼

24、、注釋等全部信息,列表文件可供打印??晒卜终{試檢查用。交叉索引文件時用來了解源程序中的符號定義及引用情況的。后面兩個文件不是必需的,可通過匯編時的命名加以選擇,打入“回車鍵”就是不需要。連接:將.obj文件(一個或多個)與系統提供的.lib庫文件連接,形成.exe可執(zhí)行文件和.map內存分配文件。連接后的殼執(zhí)行文件(.exe)是可以運行的文件。調試:對.exe文件進行調試。4.2調試過程與調試結果及分析通過以上步驟在mf2ki軟件中進行調試,首先輸入源程序,點擊匯編后,檢查是否存在錯誤,修改好所有出現的錯誤后,當輸入“abcdefgh$ xyz .n”后,其結果如下,由于輸入字符存在“$”,d

25、os系統的int 21h下的09h字功能以“$”為結束符,自動結束字符串的顯示,故當輸入”.”后并未終止輸入字符。圖4 有“$”存在時的調試結果當輸入字符“abcdefg xyz xyzabcdefgh.”時,其結果如下。當輸入字符有“.”時終止字符輸入 ,由于存在空格鍵故輸入字符中空格鍵前的字符串以正序顯示,最后一個空格鍵后的字符串以反序顯示在屏幕上。圖5 有空格鍵時的調試結果當輸入字符“abcdefgxyzxyzabcdefgh.”時,其結果如下。當輸入字符有“.”時終止字符輸入 ,由于不存在空格鍵故輸入字符串以反序顯示在屏幕上。圖6 有空格鍵時的調試結果通過以上調試及分析所編寫的程序正確

26、能滿足程序要求。5 設計小結此次程序設計主要包括調用dos系統的int 21h功能從鍵盤輸入字符然后顯示字符,通過調用相應的字程序判斷輸入的字符是否為空格和“.”,當輸入“.”時終止字符的輸入,配合調用另一子程序來實現空格前的字符串在屏幕向以正序顯示,“.”前的字符串在屏幕上以反序顯示,通過編寫相應的主程序和judge、change兩個子程序,經反復調試、運行及修改得出滿足要求的程序,從而完成此次課程設計。6 心得體會微型計算機原理作為電子信息類本科生教學的主要基礎課之一,課程緊密結合電子信息類的專業(yè)特點,圍繞微型計算機原理和應用主題,系統介紹微型計算機的基本知識,基本組成,體系結構和工作模式,從而使學生能較清楚地了解微機的結構與工作流程,建立起系統的概念。這次微機原理課程設計歷時兩個星期,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到

溫馨提示

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

評論

0/150

提交評論