代碼轉(zhuǎn)換程序設(shè)計(jì)_第1頁(yè)
代碼轉(zhuǎn)換程序設(shè)計(jì)_第2頁(yè)
代碼轉(zhuǎn)換程序設(shè)計(jì)_第3頁(yè)
代碼轉(zhuǎn)換程序設(shè)計(jì)_第4頁(yè)
代碼轉(zhuǎn)換程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、學(xué) 號(hào) 課 程 設(shè) 計(jì)題 目代碼轉(zhuǎn)換程序設(shè)計(jì)學(xué) 院自動(dòng)化學(xué)院專(zhuān) 業(yè)電氣工程及其自動(dòng)化班 級(jí)姓 名指導(dǎo)教師2014年1月9日課程設(shè)計(jì)任務(wù)書(shū)學(xué)生姓名: 賀安東 專(zhuān)業(yè)班級(jí): 電氣1107班 指導(dǎo)教師: 陳靜 教授 工作單位: 自動(dòng)化學(xué)院 題 目: 代碼轉(zhuǎn)換程序設(shè)計(jì) 要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求)1用匯編語(yǔ)言編寫(xiě)一個(gè)字母和數(shù)制之間的轉(zhuǎn)換程序,設(shè)計(jì)出友好的交互界面;2實(shí)現(xiàn)小寫(xiě)字母和大寫(xiě)字母之間的相互轉(zhuǎn)換;附加功能:將字符轉(zhuǎn)換成其相應(yīng)的ASCII碼;3撰寫(xiě)課程設(shè)計(jì)說(shuō)明書(shū)。內(nèi)容包括:摘要、目錄、正文、參考文獻(xiàn)、附錄(程序清單)。正文部分包括:設(shè)計(jì)任務(wù)及要求

2、、方案比較及論證、軟件設(shè)計(jì)說(shuō)明(軟件思想,流程,源程序設(shè)計(jì)及說(shuō)明等)、程序調(diào)試說(shuō)明和結(jié)果分析、課程設(shè)計(jì)收獲及心得體會(huì)。時(shí)間安排:12月26日- 12月28 日 查閱資料及方案設(shè)計(jì)12月29日- 1 月 2 日 編程1 月 3日- 1 月 7 日 調(diào)試程序1 月 8日- 1 月 9 日 撰寫(xiě)課程設(shè)計(jì)報(bào)告指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日武漢理工大學(xué)微機(jī)原理與接口技術(shù)課程設(shè)計(jì)報(bào)告書(shū)目 錄摘 要11 設(shè)計(jì)任務(wù)及分析21.1 設(shè)計(jì)任務(wù)要求21.2 設(shè)計(jì)系統(tǒng)分析21.3方案比較及認(rèn)證22 方案設(shè)計(jì)32.1 方案原理32.2指令功能32.3 主程序流程圖53 源程序73.1主

3、程序設(shè)計(jì)73.2子程序大小寫(xiě)字母轉(zhuǎn)換及流程圖123.3子程序ASCII碼轉(zhuǎn)換CBA及流程圖144 程序運(yùn)行及調(diào)試164.1大小寫(xiě)轉(zhuǎn)換174.2 ASCII碼轉(zhuǎn)換174.3 輸入非字符184.4調(diào)試中出現(xiàn)的錯(cuò)誤184.5結(jié)果分析205 心得體會(huì)21參考文獻(xiàn)22本科生課程設(shè)計(jì)成績(jī)?cè)u(píng)定表摘 要匯編語(yǔ)言是直接面向處理器(Processor)的程序設(shè)計(jì)語(yǔ)言。處理器是在指令的控制下工作的,處理器可以識(shí)別的每一條指令稱(chēng)為機(jī)器指令。每一種處理器都有自己可以識(shí)別的一整套指令,稱(chēng)為指令集。處理器執(zhí)行指令時(shí),根據(jù)不同的指令采取不同的動(dòng)作,完成不同的功能,既可以改變自己內(nèi)部的工作狀態(tài),也能控制其它外圍電路的工作狀態(tài)。

4、匯編語(yǔ)言的主要特點(diǎn)是可以使用助記符來(lái)表示機(jī)器指令的操作碼和操作數(shù),可以用標(biāo)號(hào)和符號(hào)來(lái)代替地址、常量和變量。這次課程設(shè)計(jì)的任務(wù)是用匯編語(yǔ)言進(jìn)行一個(gè)數(shù)制轉(zhuǎn)換,從鍵盤(pán)輸入一串字符(非字符則不接受),通過(guò)屏幕提示菜單選擇轉(zhuǎn)換成ASCII碼,或者進(jìn)行大小寫(xiě)轉(zhuǎn)換(原來(lái)是大寫(xiě)轉(zhuǎn)換成小寫(xiě),小寫(xiě)則轉(zhuǎn)換為大寫(xiě))并顯示。先輸入要轉(zhuǎn)換的數(shù)據(jù),再對(duì)數(shù)據(jù)進(jìn)行檢驗(yàn)判斷其合法性,對(duì)不合法的數(shù)據(jù)進(jìn)行警報(bào)并重新輸入數(shù)據(jù),對(duì)合法的數(shù)據(jù)按照要求進(jìn)行大小寫(xiě)轉(zhuǎn)換或者轉(zhuǎn)換成ASCII,碼,最后顯示轉(zhuǎn)換后的字符串。關(guān)鍵詞:DOS功能調(diào)用 大小寫(xiě)轉(zhuǎn)換 ASCII碼1 設(shè)計(jì)任務(wù)及分析1.1 設(shè)計(jì)任務(wù)要求(1)用匯編語(yǔ)言編寫(xiě)一個(gè)字母和數(shù)制之間的轉(zhuǎn)

5、換程序,設(shè)計(jì)出友好的交互界面;(2)實(shí)現(xiàn)小寫(xiě)字母和大寫(xiě)字母之間的相互轉(zhuǎn)換;附加功能:將字符轉(zhuǎn)換成其相應(yīng)的ASCII碼;(3)撰寫(xiě)課程設(shè)計(jì)說(shuō)明書(shū)。內(nèi)容包括:摘要、目錄、正文、參考文獻(xiàn)、附錄(程序清單)。正文部分包括:設(shè)計(jì)任務(wù)及要求、方案比較及論證、軟件設(shè)計(jì)說(shuō)明(軟件思想,流程,源程序設(shè)計(jì)及說(shuō)明等)、程序調(diào)試說(shuō)明和結(jié)果分析、課程設(shè)計(jì)收獲及心得體會(huì)。1.2 設(shè)計(jì)系統(tǒng)分析DOS是一個(gè)磁盤(pán)操作系統(tǒng),也稱(chēng)為IBM-DOS或者M(jìn)S-DOS。DOS不僅為用戶(hù)提供了許多使用命令,而且還有用戶(hù)可以直接調(diào)用的上百個(gè)子程序。對(duì)這些子程序的調(diào)用,稱(chēng)為系統(tǒng)功能調(diào)用。這些子程序主要完成一系列的管理功能。在使用時(shí),用戶(hù)不需要

6、了解各種I/O接口硬件的詳細(xì)情況,就能完成對(duì)I/O接口的控制和管理。為了使用方便,將所有子程序從1號(hào)開(kāi)始順序編號(hào),這些編號(hào)稱(chēng)為DOS功能調(diào)用號(hào)。所以在進(jìn)行設(shè)計(jì)之前,先要弄清楚DOS 功能調(diào)用。1.3 方案比較及認(rèn)證方案一:通過(guò)運(yùn)用匯編語(yǔ)言提供的基本指令,加上運(yùn)用適當(dāng)?shù)难h(huán)方式,按照要求設(shè)計(jì)指令來(lái)達(dá)到滿足要求的目的。這種方式比較容易理解和編程,是考慮到程序可能有許多重復(fù)的地方,運(yùn)用這種直接的方法就可能造成代碼很多的結(jié)果。方案二:通過(guò)運(yùn)用DOS函數(shù)調(diào)用,運(yùn)用匯編語(yǔ)言提供的各種現(xiàn)成的函數(shù)來(lái)滿足要求,也可以自己定義函數(shù)來(lái)達(dá)到某種要求,在重復(fù)使用時(shí)不用造重新編寫(xiě),只需一個(gè)調(diào)用,大大簡(jiǎn)化了程序,這種方法更

7、加簡(jiǎn)潔方便,所以選用這種方法。2 方案設(shè)計(jì)2.1 方案原理本次課程設(shè)計(jì)的要求是:從鍵盤(pán)輸入一串字符,通過(guò)屏幕提示菜單選則進(jìn)行大小寫(xiě)轉(zhuǎn)換或者轉(zhuǎn)換成相應(yīng)的ASCII碼并顯示。設(shè)計(jì)的基本思路:首先要先完成字符串的輸入并存在buf1中,然后輸入一個(gè)字符通過(guò)檢驗(yàn)字符來(lái)選擇跳轉(zhuǎn)到相應(yīng)的子程序中去進(jìn)行ASCII碼轉(zhuǎn)換或者進(jìn)行大小寫(xiě)轉(zhuǎn)換,將轉(zhuǎn)換后的字符串存放到buf2中;轉(zhuǎn)換完成后跳轉(zhuǎn)到輸出部分即可完成程序功能;為了程序能重復(fù)運(yùn)行,在代碼段末尾加一條強(qiáng)制跳轉(zhuǎn)語(yǔ)句跳到開(kāi)頭部分。2.2 指令功能(1)鍵盤(pán)輸入并顯示(1號(hào)功能調(diào)用)格式:INT 21H功能:按下任何鍵,將其對(duì)應(yīng)字符的ASCII碼送入AL中,并在屏幕

8、上顯示該字符。如果按下的是CtrlBreak組合鍵,則終止程序執(zhí)行。1號(hào)功能調(diào)用無(wú)須入口參數(shù),出口參數(shù)在AL中(2)鍵盤(pán)輸入但不顯示格式:MOV AH, 08HINT 21H功能:同1號(hào)功能調(diào)用,但字符不在屏幕上顯示。(3)屏幕顯示一個(gè)字符(2號(hào)功能調(diào)用)格式:MOV DL, 字符 MOV AH, 02HINT 21H功能:將置入DL寄存器中的字符在屏幕上顯示輸出。(4)打印輸出(5號(hào)功能調(diào)用)格式:MOV DL, 字符 MOV AH, 05H INT 21H功能:將置入DL寄存器中的字符送打印機(jī)接口,打印輸出。(5)屏幕顯示 格式:LEA DX, 字符串的偏移地址 MOV AH, 09H I

9、NT 21H 功能:在屏幕上顯示字符串。 在使用9號(hào)功能調(diào)用時(shí),應(yīng)當(dāng)注意以下問(wèn)題。 1)待顯示的字符串必須先放在內(nèi)存一數(shù)據(jù)區(qū)(DS段)中,且以$符號(hào)作為結(jié)束標(biāo)志。 2)應(yīng)當(dāng)將字符串首地址的段基址和偏移地址分別存入DS和DX寄存器中。(6)字符串輸入功能調(diào)用(0AH號(hào)功能調(diào)用) 格式:LEA DX, 已定義緩沖區(qū)的偏移地址 MOV AH, 0AH INT 21H 功能:從鍵盤(pán)接收字符,并存放到內(nèi)存緩沖區(qū)。 在使用0AH號(hào)功能調(diào)用時(shí),應(yīng)當(dāng)注意以下問(wèn)題。 1)執(zhí)行前先定義一個(gè)輸入緩沖區(qū),緩沖區(qū)內(nèi)第一個(gè)字節(jié)定義為允許最多輸入的字符個(gè)數(shù),字符個(gè)數(shù)應(yīng)包括回車(chē)符0DH在內(nèi),不能為“0”值。第二個(gè)字節(jié)保留,在

10、執(zhí) 行程序完畢后存入輸入的實(shí)際字符個(gè)數(shù)。從第三個(gè)字節(jié)開(kāi)始存入從鍵盤(pán)上接收字符的ASCII碼。若實(shí)際輸入的字符個(gè)數(shù)少于定義的 2)應(yīng)當(dāng)將緩沖區(qū)首地址的段基址和偏移地址分別存入DS和DX寄存器中。(7)返回DOS操作系統(tǒng)(4CH號(hào)功能調(diào)用) 格式:MOV AH, 4CH INT 21H 功能:終止當(dāng)前程序的運(yùn)行,并把控制權(quán)交給調(diào)用的程序,即返回DOS系統(tǒng),屏幕出現(xiàn)DOS提示符,如“C: >”,等待DOS命令。(8)直接輸入、輸出單字符(6號(hào)功能調(diào)用) 格式:MOV DL, 輸入/輸出標(biāo)志 MOV AH, 06H INT 21H 功能:執(zhí)行鍵盤(pán)輸入操作或屏幕顯示輸出操作,但不檢查CtrlBre

11、ak組合鍵是否按下。執(zhí)行這兩種操作的選擇由DL寄存器中的內(nèi)容決定。 1)當(dāng)(DL)0FFH時(shí),執(zhí)行鍵盤(pán)輸入操作。若標(biāo)志ZF0,AL中放入字符的ASCII碼;若標(biāo)志ZF1,表示無(wú)鍵按下。這種調(diào)用用來(lái)檢測(cè)鍵盤(pán)是否有鍵按下,但不等待鍵盤(pán)輸入。 2)當(dāng)(DL)0FFH時(shí),表示將DL中內(nèi)容送屏幕顯示輸出。(9)檢查鍵盤(pán)的工作狀態(tài)(0BH號(hào)功能調(diào)用) 格式:MOV AH, 0BH INT 21H 功能:檢查是否有鍵盤(pán)輸入,若有鍵按下,則使AL0FFH,若無(wú)鍵按下,則AL00H。對(duì)于利用鍵盤(pán)操作退出循環(huán)或使程序結(jié)束之類(lèi)的操作來(lái)說(shuō),這種調(diào)用是很方便實(shí)用的。2.3 主程序流程圖遠(yuǎn)程轉(zhuǎn)移是段間的轉(zhuǎn)移,目的地址與J

12、MP指令所在地址不在同一段內(nèi)。執(zhí)行該指令時(shí)要修改CS和IP的內(nèi)容。間接轉(zhuǎn)移指令的目的地址可以由存儲(chǔ)器或寄存器給出。段內(nèi)間接轉(zhuǎn)移 JMP WORD PTR OPRD ;IP=EA (由OPRD的尋址方式確定)。JMP WORD PTRBX IP=(DS)*16+(BX)JMP WORD PTR BX IP=(BX)段間間接轉(zhuǎn)移 JMP DOWRD PTR OPRD;IP=EA,CS=EA+2該指令指定的雙字節(jié)指針的第一個(gè)字單元內(nèi)容送IP,第二個(gè)字單元內(nèi)容送CS。JMP DWORD PTR BX+SI根據(jù)題目的要求和選擇的指令,首先設(shè)計(jì)出主程序,其流程圖如圖2-1:開(kāi)始輸出字符串輸入提示符將字符輸

13、入緩沖區(qū),再傳入buf1LEA DI,buf+2 LEA SI,buf1 CX置0將di賦給DL DI加1movsi,dl si,cx加1傳送完成? N Y 建立目標(biāo)、源地址指針 Y輸出信息進(jìn)行轉(zhuǎn)換選擇輸入字符 判斷是否為A/a Y判斷是否為B/b N調(diào)用子程序ABC N調(diào)用子程序CBA進(jìn)行ASCII轉(zhuǎn)換 Y 輸出 輸出圖2-1 主程序的流程圖 3 源程序3.1 主程序設(shè)計(jì)根據(jù)課題的要求,首先設(shè)計(jì)友好的人機(jī)交互頁(yè)面,編輯提示語(yǔ),然后編輯自己所需的函數(shù),通過(guò)DOS調(diào)用現(xiàn)成的以及自己編輯的函數(shù),來(lái)滿足題目要求。主程序如下: ;* 輸入一串字符(非字符則不接受) * ;* 原字符存放在buf1中 ,

14、轉(zhuǎn)換后的字符存放在buf2中 * ;* 按照屏幕菜單選擇進(jìn)行ASCII碼轉(zhuǎn)換 * ;* 或者進(jìn)行大小寫(xiě)轉(zhuǎn)換 * ;*-*DATA SEGMENT ;數(shù)據(jù)段input db 0ah,0dh,'if you want to quit ,please press Q/q! ' db 0ah,0dh,'press other key to zhuanhuan',0ah,0dh,'$' ; 輸入提示inputmess db 0ah,0dh,'please input buf1:',0ah,0dh,'$' buf db 100

15、 db '$' db 100 dup(0) ;字符緩沖區(qū) ZHUANHUAN db 0ah,0dh,'if you want to change case press A/a! ' db 0ah,0dh,'if you want to transform to ascii press B/b!',0ah,0dh,'$' ;轉(zhuǎn)換提示outputmess db 0ah,0dh,'after transform Character String BUF2 :' db 0ah,0dh,'BUF1:$' ;輸

16、出提示BUF1 DB 100 dup(0)chgline db 0ah,0dh,'BUF2:'BUF2 DB 100 DUP('$')BUF3 db 0ah,'$'DATA ENDS STACK1 SEGMENT STACK DB 20 DUP('$')STACK1 ENDSCODE ;代碼段SEGMENT ASSUME DS:DATA,SS:STACK1,CS:CODESTART:MOV AX,DATA MOV DS,AXAP: LEA DX,input ;輸入提示 MOV AH,9 INT 21h MOV AH,08h INT

17、 21h CMP AL,'Q' JE exit CMP AL,'q' JE exitPA: LEA DX,inputmess MOV AH,9INT 21h LEA DX,buf MOV AH,10 ;輸入字符 INT 21h LEA di,buf+2 ;將字符存入緩沖區(qū)buf中 LEA si,buf1 MOV CX,0next: MOV DL,di INC di CMP DL,0dh ;判斷是否傳送完畢 JNE aa JMP end0aa: MOV si,DL ;將緩沖區(qū)buf中的內(nèi)容存入buf1中 INC si INC CX JMP next exit: M

18、OV AH,4CH INT 21Hend0: MOV byte ptr si,'$' INC CX MOV BP,CX MOV SI,OFFSET BUF1 ;建立源地址指針 MOV DI,OFFSET BUF2 ;建立目標(biāo)地址指針 MOV CX,BP ;字節(jié)數(shù)送入CX寄存器 LEA DX, ZHUANHUAN ;輸出轉(zhuǎn)換信息,進(jìn)行轉(zhuǎn)換選擇 MOV AH,9 INT 21H MOV AH,08 INT 21H CMP AL,'A' ;檢驗(yàn)輸入的字符,輸入A/a跳到AB進(jìn)行大小: JE AB CMP AL,'a' JE AB CMP AL,'

19、;B' JE BA CMP AL,'b' JE BAAB: CALL ABC ;調(diào)用子程序ABC JMP L1BA: CALL CBA ;調(diào)用子程序CBA JMP L1ABC PROC ;子程序ABC AC: PUSH SI ;進(jìn)棧 PUSH DI PUSH CX PUSH AX MOV AL,SI CMP AL,'$' JE L1 ;判斷大小寫(xiě)并進(jìn)行大小寫(xiě)轉(zhuǎn)換 CMP AL,'a' JL DBA CMP AL,'z' JL JK JMP PA JK: SUB AL,20H MOV DI,AL JMP AA0DBA: CM

20、P AL, 'Z' JL KK JMP PA KK: CMP AL,'A' JG LL JMP PA LL:ADD AL,20H MOV DI,ALAA0: INC SI INC DI DEC CX JNZ AC POP CX ;出棧 POP DI POP SIPOP AX RET ABC ENDP CBA PROC ;完成字符轉(zhuǎn)換成ASCII的子程序 AD: PUSH SI ;進(jìn)棧 PUSH DI PUSH CX PUSH AX MOV AL,SI CMP AL,'$' JE L1 CMP AL,'a' JL ABD CMP A

21、L,'z' JLE HW JMP PAHW: CBW MOV BL,10H ;將小寫(xiě)字母轉(zhuǎn)換成ASCII DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI,AH JMP BB0ABD: CMP AL ,'Z' JLE HO JMP PA HO: CMP AL,'A' JGE MO JMP PA MO: CBW MOV BL,10H ;將大寫(xiě)字母轉(zhuǎn)換成ASCII碼 DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI,AHBB0: INC S

22、I INC DI DEC CX JNZ AD POP CX ;出棧 POP DI POP SI POP AX RET CBA ENDPL1: LEA DX,OUTPUTMESS ;實(shí)現(xiàn)輸出 MOV AH,9 INT 21H LEA DX,buf1 MOV AH,9 INT 21h LEA DX,chgline MOV AH ,9 INT 21h LEA dx,BUF3 MOV ah,9 INT 21h mov cl,100 mov si,0qinlin: mov al,'$' mov BUF2si,al inc si loop qinlin JMP APCODE ENDS EN

23、D START把程序輸入到emu8086中去,運(yùn)行程序,打開(kāi)屏幕界面,按照提示語(yǔ)的要求,輸入相應(yīng)的字符,按字母A/a或B/b來(lái)達(dá)到不同的目的。3.2 子程序大小寫(xiě)字母轉(zhuǎn)換及流程圖首先在屏幕上輸出顯示字符串輸入提示符,再進(jìn)行字符串的輸入,輸入字符串完成后在屏幕上輸出轉(zhuǎn)換信息:(選擇輸入A/a進(jìn)行大小寫(xiě)轉(zhuǎn)換或者輸入B/b進(jìn)行ASCII轉(zhuǎn)換),接著輸入一個(gè)字符,判斷輸入字符A/a還是B/b跳轉(zhuǎn)到進(jìn)行相應(yīng)的轉(zhuǎn)換(在子程序中判斷是否有非字符,若有非字符則重新輸入,沒(méi)有則進(jìn)行轉(zhuǎn)換),轉(zhuǎn)換完成后跳轉(zhuǎn)到輸出部分進(jìn)行輸出,程序結(jié)束。程序開(kāi)始先取buf1中的字符,判斷是否為字符,如果不是字符則不符合要求就不進(jìn)行轉(zhuǎn)

24、換直接跳轉(zhuǎn)到PA重新輸入字符buf1;如果是字符則進(jìn)行大小寫(xiě)轉(zhuǎn)換,轉(zhuǎn)換后的字符存儲(chǔ)在字符串buf2中;之后SI、DI加1,CX減1,判斷CX是否為零;如果CX為零說(shuō)明完成轉(zhuǎn)換,此時(shí)可以將SI、DI、CX、AX出棧,子程序結(jié)束;跳轉(zhuǎn)到L1進(jìn)行輸出。否則繼續(xù)取下一個(gè)字符進(jìn)行轉(zhuǎn)換,直至轉(zhuǎn)換完成。ABC PROC ;子程序ABC AC: PUSH SI ;進(jìn)棧 PUSH DI PUSH CX PUSH AX MOV AL,SI CMP AL,'$' JE L1 ;判斷大小寫(xiě)并進(jìn)行大小寫(xiě)轉(zhuǎn)換 CMP AL,'a' JL DBA CMP AL,'z' JL

25、JK JMP PA JK: SUB AL,20H MOV DI,AL JMP AA0DBA: CMP AL, 'Z' JL KK JMP PA KK: CMP AL,'A' JG LL JMP PA LL:ADD AL,20H MOV DI,ALAA0: INC SI INC DI DEC CX JNZ AC POP CX ;出棧 POP DI POP SIPOP AX RET ABC ENDP大小寫(xiě)字母轉(zhuǎn)換流程圖如圖3-1:開(kāi)始AX、CX、SI、DI入棧取buf1中的字符是否為字符?進(jìn)行大小寫(xiě)轉(zhuǎn)換SI、DI加1 ,CX減1CX是否為0?AX、CX、SI、DI出

26、棧結(jié)束跳轉(zhuǎn)到PA重新輸入 N Y 圖3-1 大小寫(xiě)字母轉(zhuǎn)換流程圖3.3 子程序ASCII碼轉(zhuǎn)換CBA及流程圖CBA PROC ;完成字符轉(zhuǎn)換成ASCII的子程序 AD: PUSH SI ;進(jìn)棧 PUSH DI PUSH CX PUSH AX MOV AL,SI CMP AL,'$' JE L1 CMP AL,'a' JL ABD CMP AL,'z' JLE HW JMP PAHW: CBW MOV BL,10H ;將小寫(xiě)字母轉(zhuǎn)換成ASCII DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI

27、,AH JMP BB0ABD: CMP AL ,'Z' JLE HO JMP PA HO: CMP AL,'A' JGE MO JMP PA MO: CBW MOV BL,10H ;將大寫(xiě)字母轉(zhuǎn)換成ASCII碼 DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI,AHBB0: INC SI INC DI DEC CX JNZ AD POP CX ;出棧 POP DI POP SI POP AX RET CBA ENDPASCII碼轉(zhuǎn)換子程序CBA流程圖如圖3-2:開(kāi)始SI、DI、CX、AX入棧取buf1中的字

28、符跳轉(zhuǎn)到PA重新輸入判斷是否為字符 N N N 將字符轉(zhuǎn)換成ASCII碼 YSI加1,DI加1,CX減1 CX是否為0? N YSI、DI、AX、CX、出棧結(jié)束 圖3-2 ASCII碼轉(zhuǎn)換子程序CBA流程圖4 程序運(yùn)行及調(diào)試根據(jù)題目要求:鍵盤(pán)輸入一串字符(非字符則不接受),通過(guò)屏幕提示菜單選擇轉(zhuǎn)換成ASCII碼,或者進(jìn)行大小寫(xiě)轉(zhuǎn)換(原來(lái)是大寫(xiě)轉(zhuǎn)換成小寫(xiě),小寫(xiě)則轉(zhuǎn)換為大寫(xiě))并顯示。所以可能有三種處理結(jié)果:(1)輸入字符串后進(jìn)行大小寫(xiě)轉(zhuǎn)換后輸出顯示在屏幕上;(2)輸入字符串后將字符串轉(zhuǎn)換成ASCII碼輸出顯示在屏幕上;(3)輸入的串中含有非字符,則不進(jìn)行轉(zhuǎn)換輸出,跳到程序PA處重新輸入字符。4.1

29、 大小寫(xiě)轉(zhuǎn)換當(dāng)輸入字符串為:WEIJIyuanli并且輸入字符A/a進(jìn)行大小寫(xiě)轉(zhuǎn)換時(shí)得出結(jié)果如圖4-1: 圖4-1字母大小寫(xiě)轉(zhuǎn)換圖4.2 ASCII碼轉(zhuǎn)換當(dāng)輸入字符串為:daXUE,并且在下一步輸入B/b將輸入的字符轉(zhuǎn)換成ASCII碼輸出得到的結(jié)果如圖4-2:圖4-2 字母轉(zhuǎn)換為ASCII碼4.3 輸入非字符當(dāng)輸入的字符串為WUHAN888含有非字符時(shí),字符串不進(jìn)行轉(zhuǎn)換,直接跳轉(zhuǎn)到程序PA處,提示重新輸入字符buf1,結(jié)果如圖4-3:圖4-3 出入非法字符4.4 調(diào)試中出現(xiàn)的錯(cuò)誤(1)當(dāng)判斷字符串含有非字符時(shí),直接跳轉(zhuǎn)到重新輸入的PA處,程序會(huì)發(fā)生如下錯(cuò)誤:跳轉(zhuǎn)時(shí)相對(duì)跳出范圍N字節(jié);所以要使用

30、無(wú)條件轉(zhuǎn)移指令JMP來(lái)解決這個(gè)問(wèn)題;在其他處發(fā)生此類(lèi)錯(cuò)誤也是用同樣的的解決方法。錯(cuò)誤程序: ABD: CMP AL ,'Z' JG PA CMP AL,'A'修改后的程序: ABD: CMP AL ,'Z' JLE HO JMP PA HO: CMP AL,'A'(2)在實(shí)現(xiàn)輸出L1部分處,輸出buf1和轉(zhuǎn)換后的buf2后,程序會(huì)輸出處會(huì)有一小段亂碼;解決的辦法是:在輸出結(jié)尾處增加輸出換行buf3即可解決。錯(cuò)誤程序: L1: LEA DX,OUTPUTMESS ;實(shí)現(xiàn)輸出 MOV AH,9 INT 21H LEA DX,buf1

31、MOV AH,9 INT 21h LEA DX,chgline MOV AH ,9 INT 21h(3)調(diào)用子程序ABC或者CBA后已經(jīng)完成了一種轉(zhuǎn)換,需要跳轉(zhuǎn)到輸出部分L1實(shí)現(xiàn)輸出,所以在調(diào)用完子程序后必須加一條無(wú)條件轉(zhuǎn)換語(yǔ)句JMP,否則程序會(huì)繼續(xù)執(zhí)行到其他部分。錯(cuò)誤程序: AB: CALL ABC ;調(diào)用子程序ABC修改后的程序: AB: CALL ABC ;調(diào)用子程序ABC JMP L1(4) 在輸入字符是,輸入的字符長(zhǎng)度小于前面所輸?shù)淖址L(zhǎng)度時(shí),會(huì)出現(xiàn)錯(cuò)誤,即結(jié)果會(huì)顯示上一次字符輸入的部分結(jié)果,原因是buf2沒(méi)有清空。如圖4-4:解決方法是加一個(gè)buf2的指令段,如下所示:qinlin

32、: mov al,'$' mov BUF2si,al inc si loop qinlin 圖4-4 第二次結(jié)果出錯(cuò)4.5 結(jié)果分析通過(guò)對(duì)程序的修改,在最初設(shè)計(jì)的程序上加上一部分指令,解決初始程序中的bug即不足,從而完善了程序,滿足了要求。5 心得體會(huì)經(jīng)過(guò)了將近兩周的時(shí)間,我終于能寫(xiě)心得體會(huì)了,這也意味著我的課程設(shè)計(jì)基本結(jié)束了。在這兩周的時(shí)間里,剛開(kāi)始幾天有3門(mén)專(zhuān)業(yè)課要考試,期間有一門(mén)自控要考試,都要花一些時(shí)間來(lái)復(fù)習(xí),所以用來(lái)做課設(shè)的時(shí)間就相對(duì)來(lái)說(shuō)沒(méi)那么多了。從最初給大家分號(hào)題目,同時(shí)自己也分到了題目,看到題目和要求后,第一感覺(jué)覺(jué)得應(yīng)該沒(méi)有大問(wèn)題,這些知識(shí)課本里面應(yīng)該都學(xué)過(guò),接著就是選擇要用的指令了,雖然以前基本上都是直接使用mov等指令,基本上沒(méi)用過(guò)DOS調(diào)用,但是出于編寫(xiě)程序的簡(jiǎn)潔明了,同時(shí)也是為了更進(jìn)一步的學(xué)習(xí)匯編語(yǔ)言,本次課設(shè)還是選擇了使用我不太熟悉的DOS功能調(diào)用,也算是挑戰(zhàn)一下自己。 雖然這已經(jīng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論