《微機原理與接口技術》課程設計說明書英文字母大小寫轉換程序設計
《《微機原理與接口技術》課程設計說明書英文字母大小寫轉換程序設計》由會員分享,可在線閱讀,更多相關《《微機原理與接口技術》課程設計說明書英文字母大小寫轉換程序設計(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 武漢理工大學《微機原理與接口技術》課程設計說明書 課程設計任務書 學生姓名: **** 專業(yè)班級: 電信0801班 指導教師: **** 工作單位: 信息工程學院 題 目:英文字母大小寫轉換程序設計 初始條件: 具備數(shù)字電路的理論知識;具備微機原理的理論知識和實踐能力;熟悉匯編語言編程技術;熟悉80X86的CPU結構和指令系統(tǒng);熟悉相關常用接口電路的設計使用方法。 要求完成的主要任務:(包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求) 1、輸入英文字母串,在回車后實現(xiàn)大小寫轉換 2、按命令
2、要求將字符串轉換為全部大寫或全部小寫 3、非英文字母不允許輸入并聲響報警 4、程序采用匯編語言在PC機上完成 5、完成符合學校要求的設計說明書 時間安排: 一周,其中2天程序設計,2天程序調試,1天完成課程設計報告書及答辯 指導教師簽名: 年 月 日 系主任(或責任教師)簽名: 年 月 日 目 錄 摘要 I 1 DOS功能調用 1 2總體方案論證 4 3程序流程圖及程序設計分析 5 3.1主程序設計 5 3.1.1流程圖及其分析 5 3.1.2程序設計 6 3.2 c
3、hos字符串轉換子程序設計 8 3.2.1流程圖及其分析. 8 3.2.2程序設計 9 3.3小寫轉大寫子程序設計 11 3.3.1流程圖及其分析 11 3.3.2程序設計 12 3.4大寫轉小寫子程序設計 13 3.4.1流程圖及其分析 13 3.4.2程序設計 14 4 總程序 15 5 課程設計心得體會 20 參考文獻 21 摘 要 匯編語言是用指令的助記符、符號地址、標號等書寫程序的語言,實際上是機器語言的一種符號表示,主要特點是可以使用助記符來表示機器指令的操作碼和操作數(shù),可以用標號和符號來代替地址、常量和變量
4、。匯編語言是能夠利用計算機所有硬件特性進而直接控制硬件的唯一語言。本次課程設計的任務是用匯編語言做一個英文字母大小寫轉換程序,按照用戶的要求完成對輸入數(shù)據(jù)的大寫或者小寫轉換。先輸入要轉換的數(shù)據(jù),再對數(shù)據(jù)進行檢驗判斷其合法性,對不合法的數(shù)據(jù)進行警報并重新輸入數(shù)據(jù),對合法的數(shù)據(jù)按照要求進行大寫或者小寫轉換,最后顯示轉換后的字符串。 關鍵詞:DOS功能調用 大寫英文 小寫英文 轉換 1 DOS功能調用 在進行設計之前,先要弄清楚INT 21H軟中斷的DOS功能調用。 MS DOS操作系統(tǒng)為程序設計者提供了可以直接調用的軟
5、中斷處理程序,每一個中斷處理程序完成一個特定的功能操作。依據(jù)編程需要選擇適當?shù)奶幚沓绦?,編程者不需再重新編寫程序,而是使用INT n軟中斷指令。每執(zhí)行一種不同類型碼n的軟中斷指令,就執(zhí)行一個中斷處理程序,其主要功能如下。 ① 磁盤的讀/寫控制。 ② 內(nèi)存管理、文件操作和目錄管理。 ③ 基本輸入/輸出(對鍵盤、打印機和顯示器等)控制,另外還有日期、時間管理等。 當類型碼n=05H~1FH時,調用BIOS的中斷處理程序;類型碼n=20H~3FH時,調用DOS的中斷處理程序,這次課程設計使用的是DOS中斷處理程序。 INT 21H軟中斷是一個具有幾十種功能的大型中
6、斷服務程序,給這些子功能程序分別予以編號,稱為功能號。每個功能程序完成一種特定的操作和處理。對INT 21H軟中斷指令對應的功能子程序的調用稱為DOS系統(tǒng)功能調用。調用系統(tǒng)功能子程序時,不必了解所使用設備的物理特性、接口方式及內(nèi)存分配等,也不必編寫繁瑣的控制程序,這樣給應用者帶來了很大的方便。 應用INT 21H系統(tǒng)功能調用的方法如下。 ① 入口參數(shù)送指定的寄存器或內(nèi)存。 ② 功能號送AH中。 ③ 執(zhí)行INT 21H軟中斷指令。 有的子功能程序不需要入口參數(shù),但大部分需要把參數(shù)送入指定位置。程序員只要給出這三方面的信息,不必關心程序具體如何執(zhí)行,在內(nèi)存中的存
7、放地址如何,DOS就會根據(jù)所給的參數(shù)信息自動轉入相應的子程序去執(zhí)行并產(chǎn)生相應結果。下面介紹常用的功能調用。 (1) 鍵盤輸入并顯示(1號功能調用) 格式: MOV AH, 01H INT 21H 功能:按下任何鍵,將其對應字符的ASCII碼送入AL中,并在屏幕上顯示該字符。如果按下的是Ctrl+Break組合鍵,則終止程序執(zhí)行。1號功能調用無須入口參數(shù),出口參數(shù)在AL中。 (2) 鍵盤輸入但不顯示輸入字符(8號功能調用) 格式: MOV AH, 08H INT 21H 功能:同1號功能調用,但字符不在屏幕上顯示。 (3) 屏幕顯示一
8、個字符(2號功能調用) 格式: MOV DL, 字符 MOV AH, 02H INT 21H 功能:將置入DL寄存器中的字符在屏幕上顯示輸出。 (4) 打印輸出(5號功能調用) 格式: MOV DL, 字符 MOV AH, 05H INT 21H 功能:將置入DL寄存器中的字符送打印機接口,打印輸出。 (5) 屏幕顯示字符串(9號功能調用) 格式: MOV DX, 字符串的偏移地址 MOV AH, 09H INT 21H 功能:在屏幕上顯示字符
9、串。 在使用9號功能調用時,應當注意以下問題。 ① 待顯示的字符串必須先放在內(nèi)存一數(shù)據(jù)區(qū)(DS段)中,且以‘$’符號作為結束標志。② 應當將字符串首地址的段基址和偏移地址分別存入DS和DX寄存器中。 (6) 字符串輸入功能調用(0AH號功能調用) 格式: MOV DX, 已定義緩沖區(qū)的偏移地址 MOV AH, 0AH INT 21H 功能:從鍵盤接收字符,并存放到內(nèi)存緩沖區(qū)。 在使用0AH號功能調用時,應當注意以下問題。 ① 執(zhí)行前先定義一個輸入緩沖區(qū),緩沖區(qū)內(nèi)第一個字節(jié)定義為允許最多輸入的字符個數(shù),字符個數(shù)應包括回車符0DH在內(nèi),不能為
10、“0”值。第二個字節(jié)保留,在執(zhí)行程序完畢后存入輸入的實際字符個數(shù)。從第三個字節(jié)開始存入從鍵盤上接收字符的ASCII碼。若實際輸入的字符個數(shù)少于定義的最大字符個數(shù),則緩沖區(qū)其他單元自動清0。若實際輸入的字符個數(shù)大于定義的字符個數(shù),其后輸入的字符丟棄不用,且響鈴示警,一直到輸入回車鍵為止。整個緩沖區(qū)的長度等于最大字符個數(shù)再加2。 ② 應當將緩沖區(qū)首地址的段基址和偏移地址分別存入DS和DX寄存器中。 (7) 返回DOS操作系統(tǒng)(4CH號功能調用) 格式: MOV AH, 4CH INT 21H 功能:終止當前程序的運行,并把控制權交給調用的程序,即返回DOS系統(tǒng)
11、,屏幕出現(xiàn)DOS提示符,如“C: \ >”,等待DOS命令。 除了這幾種功能調用,還有其他的,這里就不再一一介紹了。 2總體方案論證 該課程設計的任務是做一個英文字母大小寫轉換程序,完成對輸入數(shù)據(jù)的大寫或者小寫轉換。 輸入部分:在輸入之前,先利用INT 21H的9號功能調用輸出顯示輸入字符串提示符please input the string:再利用INT 21H的8號功能調用輸入字符串(在屏幕上并不顯示)。由于鍵盤輸入的并不一定是英文字母,所以要對輸入的每一個字符進行判別,如果輸入的字符串都是英文字符則進行大小寫轉換,并將
12、字符串存儲到緩沖區(qū),且將字符輸出顯示到屏幕上;如果輸入的字符串中有非英文字符,則產(chǎn)生報警聲并返回重新輸入數(shù)據(jù),直至輸入的字符符合要求為止。 轉換部分:由于要求要有兩種轉換方式,即大寫字母轉換為小寫字母或者由小寫字母轉換為大寫字母,所以要求用戶在進行轉換前輸入提示要轉換的方法。為解決這個問題,先利用INT 21H的9號功能調用輸出顯示轉換方法選擇提示符‘please choose the type to output(1or2):’ ,1為Uppercase,2為Lowercas。再利用INT 21H的8號功能調用輸入1或者2(在屏幕上并不顯示)。如果此時輸入為1,則進行字符串小寫轉大寫的轉換
13、,如果此時輸入為2,則進行字符串大寫轉小寫的轉換。 輸出部分:先利用INT 21H的9號功能調用輸出顯示輸出提示符the result is:,再利用INT 21H的9號功能調用輸出顯示轉換后的字符串。 3程序流程圖及程序設計分析 3.1主程序設計 3.1.1流程圖及其分析 主程序的流程圖如圖3-1所示. 開始 字符存儲到BUFFER中 發(fā)出警報聲 字符輸出 輸入字符串 輸出字符串輸入提示符 結束 判斷字符中是否為回車? N 判斷字符是否為a~z或者A~Z? 調用子程序chos完成字符大小寫轉換 SI增1
14、 轉換結果輸出 換行輸出輸出結果提示符 0賦值給SI寄存器 Y N Y 圖3-1 主程序流程圖 首先在屏幕上輸出顯示字符串輸入提示符,再進行字符串的輸入,然后對輸入的第一個字符進行判別。如果該字符不等于0DH,則繼續(xù)判斷該字符是否為英文字符。如果結果為否則產(chǎn)生報警聲并返回重新輸入數(shù)據(jù),直至輸入的字符符合要求為止;如果結果為是則將字符存儲到緩沖區(qū),并將字符輸出顯示到屏幕上。然后進行下一個字符的判別,直至出現(xiàn)一個字符等于0DH,此時字符串驗證完畢,調用子程序chos進行字符串的大小寫轉換
15、,轉換完后結果輸出顯示到屏幕上,并結束程序。 3.1.2程序設計 程序如下: start: mov ax,data mov ds,ax mov ah,9 ;輸出顯示輸入提示符:‘please input the string:’ lea dx,ms1 int 21h mov si,0 ;源串偏移地址SI置0 again: mov ah,8 ;輸入字符串 int 21h cmp al,13 ;將A
16、L與0DH進行比較,若相等,則轉移到CHANGE je change cmp al,41h ;將AL與’A’進行比較,若AL小于’A’,則轉移到SING jb sing cmp al,5bh ;將AL與’Z’進行比較,若AL小于等于’Z’,則轉移到CHG jb chg cmp al,61h ;將AL與’a’進行比較,若AL小于’a’,則轉移到SING jb sing cmp al,7bh ;將AL與’z’進行比較,若AL小于等于
17、’z’,則轉移到CHG jb chg sing: ;輸入為非英文字母,發(fā)出警報,并重新輸入 mov ah,2 mov dl,07h int 21h jmp again chg: ;將英文字母存入緩沖區(qū),并在屏幕中顯示 mov [buffer+si],al mov dl,al mov ah,2 int 21h inc si jmp again change: ;轉換過程
18、 mov [buffer+si],$ call chos ;調用chos子程序 mov ah,2 mov dl,10 ;回車 int 21h mov dl,13 ;換行 int 21h mov ah,9 ;輸出顯示輸出提示符 lea dx,ms2 int 21h mov ah,9 lea dx,buffer ;屏幕顯示轉換結果 int 21h
19、mov ah,1 int 21h mov ah,4ch ;結束程序 int 21h 3.2 chos字符串轉換子程序設計 3.2.1流程圖及其分析 chos字符串轉換子程序的流程圖如圖3-2所示 開始 輸入字符 將AX,DX存入堆棧 返回 判斷字符是否為1 ? 判斷字符是否為2 調用子程序aa,完成字符由小寫轉為大寫 DX,AX內(nèi)容出棧 換行輸出轉換方法選擇提示符:1為轉換為大寫,2為轉換為小寫 調用子程序ba,完成字符由大寫轉為小寫 Y N N
20、 Y 圖3-2 chos子程序流程圖 首先,應該把斷點地址及一些寄存器的值壓入堆棧,保護現(xiàn)場。在屏幕上輸出轉換方法選擇提示符,用戶根據(jù)需要輸入數(shù)據(jù)1或者2。若輸入的數(shù)據(jù)為1則調用子程序aa,完成字符串由小寫轉換為大寫;若輸入的數(shù)據(jù)是2則調用子程序ba,完成字符串由大寫轉換為小寫。轉換完了以后,把斷點地址及一些寄存器的值彈出堆棧,最后返回主程序。 3.2.2程序設計 程序如下: chos proc ;chos子程序 push ax ;AX,DX入棧 pus
21、h dx mov ah,2 mov dl,10 ;回車 int 21h mov dl,13 ;換行 int 21h mov ah,9 ;屏幕顯示轉換方法選擇提示符 lea dx,ms3 int 21h re: mov ah,8 ;輸入數(shù)據(jù)1或者2,但不顯示 int 21h cmp al,31H ;輸入為1,程序轉移至UP je up cmp al,32H
22、 ;輸入為2,程序轉移至LO je lo mov ah,2 ;輸入不為1也不為2時,發(fā)出警報,并重新輸入數(shù)據(jù) mov dl,7 int 21h jmp re up: call aa ;調用子程序aa jmp out1 lo: call ba ;調用子程序ba out1: pop dx ;DX,AX出棧 pop ax ret
23、 ;返回主程序 chos endp 3.3小寫轉大寫子程序設計 3.3.1流程圖及其分析 小寫轉大寫子程序的流程圖如圖3-3所示 開始 將SI的值賦給CX,將0賦給DI 將AX,CX,DI存入堆棧 返回 判斷字符是否為為大寫 ? DI的值增1 將字符轉化為大寫,并存儲取代原來的字符 取BUFFER中的字符 CX的值減1 判斷CX是否為0 ? Y AX,CX,DI出棧 Y N N
24、 圖3-3 小寫轉大寫子程序aa的流程圖 首先,應該把斷點地址及AX,CX,DI寄存器壓入堆棧,保護現(xiàn)場。再將SI的值賦給CX,將0賦給DI。取出BUFFER單元中的字符,并判斷該字符是否為大寫的英文字母,如果是,則不必進行轉換;如果不是,則將小寫字母轉化為大寫字母并替代原來的小寫字母。循環(huán)判斷其他的字符,直至CX的值為0,結束循環(huán),返回主程序。 3.3.2程序設計 程序如下: aa proc ;子程序aa push ax ;AX,CX,DI入棧 push cx push di
25、 mov cx,si ;CX=SI mov di,0 ;DI=0 top1: mov al,[buffer+di] cmp al,61h ;將AL與’a’進行比較,若AL小于’a’,則程序轉移到NE1 jb ne1 sub al,20h ;小寫字母轉換為大寫字母 mov [buffer+di],al ;保存轉換后的大寫字母 ne1: inc di ;DI增1 loop top1
26、 ;循環(huán)返回TOP1 pop di ;AX,CX,DI出棧 pop cx pop ax ret ;返回 aa endp 3.4大寫轉小寫子程序設計 3.4.1流程圖及其分析 大寫轉小寫子程序的流程圖如圖3-4所示 開始 將SI的值賦給CX,將0賦給DI 將AX,CX,DI存入堆棧 返回 判斷字符是否為為小寫 ? DI的值增1 將字符轉化為小寫,并存儲取代原來的字符 取BUFFER中的字符 CX的值減1 判斷CX是否為0
27、? N AX,CX,DI出棧 Y N Y 圖3-4 大寫轉小寫子程序ba的流程圖 首先,應該把斷點地址及AX,CX,DI寄存器壓入堆棧,保護現(xiàn)場。再將SI的值賦給CX,將0賦給DI。取出BUFFER單元中的字符,并判斷該字符是否為小寫的英文字母,如果是,則不必進行轉換;如果不是,則將大寫字母轉化為小寫字母并替代原來的大寫字母。循環(huán)判斷其他的字符,直至CX的值為0,結束循環(huán),返回主程序。 3.4.2程序設計 程序如下: ba proc ;
28、子程序ba push ax ;AX,CX,DI入棧 push cx push di mov cx,si ;CX=SI mov di,0 ;DI=0 top: mov al,[buffer+di] cmp al,5Ah ;將AL與’Z’進行比較,若AL大于’Z’,則程序轉移到NE ja ne add al,20h ;大寫字母轉換為小寫字母 mov [buffer
29、+di],al ;保存轉換后的小寫字母 ne: inc di ;DI增1 loop top ;循環(huán)返回TOP pop di ;AX,CX,DI出棧 pop cx pop ax ret ;返回 ba endp 4總程序 總程序如下: data segment ms1 db please input the string:,10,13,$ ms2 db th
30、e result is:,10,13,$ ms3 db please choose the type to output(1or2):,10,13 db 1.Uppercase,9,2.Lowercase$ buffer db 200 dup (0) data ends stack segment db 200 dup (?) stack ends code segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax m
31、ov ah,9 lea dx,ms1 int 21h mov si,0 again: mov ah,8 int 21h cmp al,13 je change cmp al,41h jb sing cmp al,5bh jb chg cmp al,61h jb sing cmp al,7bh jb chg sing: mov ah,2 mov dl,07h int 21h jmp again
32、chg: mov [buffer+si],al mov dl,al mov ah,2 int 21h inc si jmp again change: mov [buffer+si],$ call chos mov ah,2 mov dl,10 int 21h mov dl,13 int 21h mov ah,9 lea dx,ms2 int 21h mov ah,9 lea dx,buffer int
33、21h mov ah,1 int 21h mov ah,4ch int 21h ;============================ chos proc push ax push dx mov ah,2 mov dl,10 int 21h mov dl,13 int 21h mov ah,9 lea dx,ms3 int 21h re: mov ah,8 int 21h cmp al,31H j
34、e up cmp al,32H je lo mov ah,2 mov dl,7 int 21h jmp re up: call aa jmp out1 lo: call ba out1: pop dx pop ax ret chos endp ;=========================== ba proc push ax push cx push di mov cx,si mov d
35、i,0 top: mov al,[buffer+di] cmp al,5Ah ja ne add al,20h mov [buffer+di],al ne: inc di loop top pop di pop cx pop ax ret ba endp ;================================== aa proc push ax push cx push di mov cx,si mov
36、di,0 top1: mov al,[buffer+di] cmp al,61h jb ne1 sub al,20h mov [buffer+di],al ne1: inc di loop top1 pop di pop cx pop ax ret aa endp code ends end start 5 課程設計心得體會 經(jīng)過這幾天的微機原理課程設計,我覺得學習像微機原理與接口技術這樣實用的知識,不僅要掌握書本上的基本內(nèi)容,還要靈活思考,善于變
37、換,這樣才能找到最優(yōu)設計,達到事半功倍的效果。課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程?;仡櫰鸫舜挝C原理課程設計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整一個星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。 其次,以前對于編程工具的使用還處于一知半解的狀態(tài)上,但是經(jīng)過一段上機的實踐,對于怎么去排錯、查錯,怎么去看每一步的運行結果,怎么去了解每個寄存器的內(nèi)容以確保程序的正確性上都有了很大程度
38、的提高。 通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。 在設計中遇到了很多編程問題,但最后經(jīng)過自己的努力完成了這次課設。這讓我明白了只要有恒心,有耐心,就可以達到自己的目標,完成任務! 參考文獻 [1] 王萍主編. 微機原理應用實踐. 機械工業(yè)出版社,2001.5 [2] 錢曉捷主編. 新版匯編語言程序設計. 電子工業(yè)出版社,2007.1 [3] 朱定華主編. 微機原理與接口技術學習指導. 清華大學出版社,2004.7 [4] 姚燕南、薛鈞義主編. 微型計算機原理與接口技術. 高等教育出版社,2004.11 [5] 何小海、嚴華主編. 微機原理與接口技術. 科學出版社,2006.9 [6] 徐建民、王東主編. 匯編語言程序設計. 電子工業(yè)出版社,2005.9 [7] 周佩玲、彭虎等主編. 微機原理與接口技術(基于16位機). 電子工業(yè)出版社,2007.6 24
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。