西電微機(jī)原理大作業(yè)_第1頁
西電微機(jī)原理大作業(yè)_第2頁
西電微機(jī)原理大作業(yè)_第3頁
西電微機(jī)原理大作業(yè)_第4頁
西電微機(jī)原理大作業(yè)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設(shè)計(jì)綜合實(shí)驗(yàn)姓名:劉發(fā)強(qiáng)學(xué)號: 2016年12月25日題目功能及要求題目要求編寫程序?qū)崿F(xiàn)下列5項(xiàng)功能,通過從鍵盤輸入15進(jìn)行菜單式選擇:(1)按數(shù)字鍵“1”,完成將字符串中的小寫字母變換成大寫字母。用戶輸入由英文大小寫字母或數(shù)字09組成的字符串(以回車結(jié)束),變換后按下列格式在屏幕上顯示:例如:abcdgyt0092 ABCDGYT0092按任一鍵重做;按Esc鍵返回主菜單。(2)按數(shù)字鍵“2”,完成在字符串中找最大值。用戶輸入由英文大小寫字母或數(shù)字09組成的字符串(以回車結(jié)束),找出最大值后按下列格式在屏幕上顯示: The maximum is 按任一鍵重做;按Esc鍵返回主菜單

2、。(3)按數(shù)字鍵“3”,完成輸入數(shù)據(jù)組的排序。用戶輸入一組十進(jìn)制數(shù)值(小于255),然后變換成十六進(jìn)制數(shù),并按遞增方式進(jìn)行排序,按下列格式在屏幕上顯示:按任一鍵重做;按Esc鍵返回主菜單。(4)按數(shù)字鍵“4”,完成時間的顯示。首先提示用戶對時,即改變系統(tǒng)的定時器HH:MM:SS(以冒號間隔,回車結(jié)束),然后在屏幕的右上角實(shí)時顯示出時間:HH:MM:SS。按任一鍵重新對時;按Esc鍵返回主菜單。(5)按數(shù)字鍵“5”,結(jié)束程序的運(yùn)行,返回操作系統(tǒng)。程序功能及分析:程序主干:(1) 主程序:通過調(diào)用屏幕初始化子程序、光標(biāo)位置設(shè)定子程序、清屏子程序、菜單顯示子程序、命令解析子程序完成顯示器初始化,設(shè)置

3、光標(biāo)位置,打印程序菜單列表以及用戶輸入提示信息,并等待用戶從鍵盤輸入15進(jìn)行菜單選擇。用戶輸入錯誤會被要求重輸。子程序跳轉(zhuǎn)利用數(shù)據(jù)段轉(zhuǎn)移地址查找表實(shí)現(xiàn)。從子服務(wù)退回時,重新開始上述操作。(2) 子服務(wù)一:將字符串中的小寫字母轉(zhuǎn)換成大寫字母,并輸出到屏幕上。先調(diào)用字符串輸出子程序輸出提示信息,后調(diào)用字符串輸入子程序?qū)⒂脩魪逆I盤輸入的字符串讀到BUFFER1存儲區(qū),后逐個判斷字符是否為小寫字母,如果是,則通過邏輯與進(jìn)行轉(zhuǎn)化,完成后,將結(jié)果放置到BUFFER2,后調(diào)用字符串輸出子程序完成輸出。然后輸出是否重做提示信息,調(diào)用無回顯的字符讀入子程序,并判斷退出到主程序或重做。(3) 子服務(wù)二:找出一字符

4、串中ASCII碼最大的字符并輸出。先調(diào)用字符串輸出子程序輸出提示信息,后調(diào)用字符串輸入子程序?qū)⒂脩魪逆I盤輸入的字符串讀到BUFFER1存儲區(qū),將AL賦初值為第一個字符,后將AL作為暫時最大值與各字符逐個比較,若小于則將其值賦給AL,否則不賦。后將結(jié)果與提示信息生成字符串,后調(diào)用字符串輸出子程序完成輸出。然后輸出是否重做提示信息,調(diào)用無回顯的字符讀入子程序,并判斷退出到主程序或重做。(4) 子服務(wù)三:讀入一組十進(jìn)制數(shù),遞增排序,并原格式輸出。先調(diào)用字符串輸出子程序輸出提示信息,后調(diào)用字符串輸入子程序?qū)⒂脩魪逆I盤輸入的字符串讀到BUFFER1存儲區(qū),后調(diào)用十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)子程序,將轉(zhuǎn)換數(shù)據(jù)放置到

5、BUFFER2,再利用冒泡算法對BUFFER2內(nèi)的數(shù)據(jù)遞增排序,再調(diào)用二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)子程序?qū)UFFER2內(nèi)的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),放置到BUFFER3存儲區(qū)內(nèi),并調(diào)用字符串格式修正子程序?qū)⒉槐匾那皩?dǎo)0刪除,再調(diào)用字符串輸出子程序?qū)UFFER3內(nèi)的數(shù)據(jù)輸出。對于非法輸入(數(shù)值超過255、非法字符)會給出錯誤提示信息。然后輸出是否重做提示信息,調(diào)用無回顯的字符讀入子程序,并判斷退出到主程序或重做。(5) 子服務(wù)四:完成時間的顯示、修改。調(diào)用字符串輸出子程序?qū)⑹欠窀臅r間提示信息輸出,并調(diào)用無等待字符讀入子程序等待用戶輸入。然后通過DOS功能調(diào)用讀出系統(tǒng)時間,后調(diào)用二進(jìn)制轉(zhuǎn)十進(jìn)制數(shù)子程序

6、,將系統(tǒng)時間顯示到屏幕右上方。如果用戶確認(rèn)修改時間,則調(diào)用字符串讀入子程序?qū)r間放置到BUFFER1,后調(diào)用十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)子程序并將結(jié)果放置到BUFFER2,后通過DOS功能調(diào)用將數(shù)據(jù)送給系統(tǒng),如果出錯則給出出錯信息。然后輸出是否重做提示信息,調(diào)用無回顯的字符讀入子程序,并判斷退出到主程序或重做。(6) 子服務(wù)五:退出到系統(tǒng)。通過DOS功能調(diào)用完成。輔助子程序:(1) 命令解析子程序:完成對用戶輸入選擇信息的檢查,合法則安排服務(wù)跳轉(zhuǎn),否則要求用戶重做。(2) 菜單顯示子程序:調(diào)用字符串輸出子程序?qū)⒉藛屋敵龅狡聊簧?。?) 屏幕初始化子程序:通過BIOS功能調(diào)用將屏幕設(shè)置成80*25字符模式

7、。(4) 光標(biāo)位置設(shè)定:通過BIOS功能調(diào)用完成設(shè)定。(5) 字符串顯示子程序:通過DOS功能調(diào)用完成。(6) 清屏子程序:通過重新設(shè)置屏幕顯示模式到達(dá)清屏目的。(7) 字符串讀入子程序:通過DOS功能調(diào)用完成字符串輸入,數(shù)據(jù)放在BUFFER1。(8) 字符讀入子程序:通過DOS功能調(diào)用完成。(9) 無等待的字符讀子程序:通過DOS功能調(diào)用完成。(10) 無回顯的字符讀入子程序:通過DOS功能調(diào)用完成。(11) 字符串結(jié)束符添加子程序:在指定存儲區(qū)的字符串的最后添加回車、換行、字符串結(jié)束符。(12) 字符輸出子程序:通過DOS功能調(diào)用完成。(13) 十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)子程序:利用加權(quán)求和公式將

8、讀入的十進(jìn)制數(shù)(ASCII碼字符串表示的數(shù)字)轉(zhuǎn)化成二進(jìn)制數(shù)并放到BUFFER存儲區(qū),其中第一個字節(jié)變量值為數(shù)據(jù)個數(shù)。具有非法字符判定、數(shù)值超過255等判斷。(14) 二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)子程序:利用除10取余并逆序的算法將每一個二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)(ASCII字符串),將輸出放置到BUFFER3存儲區(qū)。(15) 字符串前導(dǎo)0刪除子程序:將十進(jìn)制數(shù)(ASCII碼字符串)高位的前導(dǎo)0刪除。 匯編源程序STACK SEGMENT STACK DW 4096 DUP(C) TOP LABEL WORDSTACK ENDSDATA SEGMENT TRANSFORM DB 1.TRANSFORM, 0

9、DH,0AH,$ MAX DB 2.MAX,0DH,0AH,$ SORT DB 3.SORT,0DH,0AH,$ TIME DB 4.TIME,0DH,0AH,$ EXIT DB 5.EXIT,0DH,0AH,$ WAITING DB PLEASE INPUT NUM 1-5 TO SELECT SERVICE:,0DH,0AH,$ TIP DB PLEASE INPUT A STRING,0DH,0AH,$ TIPNUM DB PLEASE INPUT A GROUP OF DECIMAL,0DH,0AH,$ ANYKEY DB PRESS ANY KEY TO CONTINUE,0DH,0

10、AH,$ MAXIMUM DB THE MAXIMUM IS:$ INPUT_TIME DB PLEASE INPUT CURRENT TIME LIKE HH:MM:SS,0DH,0AH,$ QUESTION DB DO YOU WANT TO SET TIME(Y/N),0DH,0AH,$ INPUT_ERROR DBERROR OR INVALID INPUT,0DH,0AH,$ SUCCESS DB SET TIME SUCCEED,0DH,0AH,$ STRING DW TRANSFORM,MAX,SORT,TIME,EXIT,WAITING SERVICE DW TRANS,FIN

11、D_MAX,SORTING,SET_TIME,EXIT_TOSYS BUFFER1 DB 512 DUP(C) ;INPUT BUFFER BUFFER2 DB 512 DUP(C) ;PROCESS WORKSPACE BUFFER3 DB 512 DUP(C) ;OUTPUT BUFFER DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX LEA AX,TOP MOV SP,AX CALL SCREEN_INITMAIN_AGAIN: CAL

12、L CLEAR_SCREEN CALL DISPLAY_MENU CALL GET_CHAR CALL ORDER_PARSE JMP MAIN_AGAIN MOV AH,4CH INT 21H ORDER_PARSE PROC NEAR ;RETURN AL=-1 IF ERROR ELSE INVOKE SERVICE PUSH AX PUSH BX AND AL,0FH CMP AL,1 JB ERROR_OVER CMP AL,5 JA ERROR_OVER LEA BX,SERVICE DEC AL SHL AL ,1 XOR AH,AH ADD BX,AX CALL CLEAR_S

13、CREEN CALL word ptr BX POP BX POP AX JMP OVER_ORDERERROR_OVER : MOV AL,0FFHOVER_ORDER: RETORDER_PARSE ENDP DISPLAY_MENU PROC NEAR ;display menu including five items PUSH DX PUSH CX PUSH SI MOV DH,0BH MOV DL,14H MOV CX,06H LEA SI,STRING NEXT_DIS: MOV BH,0 CALL CURSOR_SET PUSH DX MOV DX,SI ADD SI,02H

14、CALL STRING_DISPLAY POP DX INC DHLOOP NEXT_DIS POP SI POP CX POP DX RETDISPLAY_MENU ENDP SCREEN_INIT PROC NEAR ;set screen mode 80*25 character PUSH AX MOV AH,0 MOV AL,02H INT 10H POP AX RETSCREEN_INIT ENDP CURSOR_SET PROC NEAR ;set cursor BH PAGE,DH ROW,DL COLUMN PUSH AX MOV AH,02H INT 10H POP AX R

15、ETCURSOR_SET ENDP STRING_DISPLAY PROC NEAR ;display string DX ADDRESS PUSH AX MOV AH,09H INT 21H POP AX RETSTRING_DISPLAY ENDPCLEAR_SCREEN PROC NEAR ;clear screen PUSH AX MOV AX,3 INT 10H POP AX RET CLEAR_SCREEN ENDP GET_CHAR_DIR PROCPUSH DXMOV AH,06HMOV DL,0FFHINT 21HPOP DXRETGET_CHAR_DIR ENDPGET_C

16、HAR_N PROC NEAR;AL=INPUT CHAR,NO DISPLAYMOV AH,07HINT 21HRETGET_CHAR_N ENDPGET_CHAR PROC NEAR ;AL=IMPUT CHAR PUSH DX MOV AH,01H INT 21H PUSH AX MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH INT 21H POP AX POP DX RET GET_CHAR ENDPGET_STRING PROC NEAR ;DS:DXBUFFER2,CNT-BUF2,NUM-BUF2+1PUSH AXPUSH BXPUSH CXP

17、USH DXPUSH SIPUSH DILEA SI,BUFFER1+2LEA DI,BUFFER2+1XOR CH,CHMOV CL,BUFFER1+1MOV AL,0MOV BL,0AHMOV BYTE PTR BUFFER2,0JCXZ DH_OVERDEC_NEXT:MOV BH,BYTE PTR SICMP BH, JZ NEXT_NUMCMP BH,0JB ERROR_OVERFLOWCMP BH,9JA ERROR_OVERFLOWCMP BH,:JZ NEXT_NUMAND BH,0FHMUL BLJC ERROR_OVERFLOWADD AL,BHJC ERROR_OVERF

18、LOWJMP NEXT_PRONEXT_NUM:MOV DI,ALINC DIINC BYTE PTR BUFFER2XOR AX,AXNEXT_PRO:INC SILOOP DEC_NEXTMOV DI,ALINC BYTE PTR BUFFER2 JMP DH_OVERERROR_OVERFLOW:MOV BUFFER2,0 DH_OVER: POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETDEC2HEX ENDPHEX2DEC PROC ;INPUT:BUFFER2,NUM,BUFFER2+1,START; ; OUTPUT:BUFFER3,STRING,S

19、TACK :OR ,3OR2 PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV BP,SPADD BP,0EHLEA DI,BUFFER3LEA SI,BUFFER2+1MOV CL,BUFFER2XOR CH,CHMOV BL,0AHJCXZ HEX_OVERHEX2DEC_OUTTER:MOV AH,0MOV AL,SIPUSH CXPUSH DIMOV DL,BP+1XOR DH,DHADD DI,DXDEC DIMOV CL,BP+1HEX2DEC_INNER:DIV BLOR AH,30HMOV BYTE PTR DI,AHDEC DIXOR

20、 AH,AHLOOP HEX2DEC_INNERINC SIPOP DIPOP CXADD DI,DX MOV AH,BPMOV BYTE PTR DI,AHINC DILOOP HEX2DEC_OUTTERHEX_OVER:MOV SI,DICALL STR_ENDPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRET 2HEX2DEC ENDPSTR_NUM_ADJUST PROC;INPUT:BUFFER3,REMOVE INVALID ZEROPUSH AXPUSH BXPUSH SIPUSH DILEA SI,BUFFER3LEA DI,BUFFER3XOR

21、AL,ALL1:MOV BL,SICMP BL,0DHJZ ADJUST_OVERCMP BL, JZ CHAR_NEXTCMP BL,0JZ CHECK_FLAGMOV AL,01HJMP TRANSFERCHECK_FLAG:CMP AL,0JZ ADJUST_NEXTTRANSFER:MOV DI,BLINC DIJMP ADJUST_NEXTCHAR_NEXT:MOV BYTE PTR DI, INC DIXOR AL,ALADJUST_NEXT:INC SIJMP L1ADJUST_OVER:MOV SI,DICALL STR_ENDPOP DIPOP SIPOP BXPOP AXR

22、ETSTR_NUM_ADJUST ENDPSORTING PROC ;SORTPUSH AXPUSH CXPUSH DXPUSH DISORT_AGAIN:LEA DX,TIPNUMCALL STRING_DISPLAYCALL GET_STRINGCALL DEC2HEXXOR CH,CHMOV CL,BUFFER2 JCXZ SORT_ERRORDEC CXJCXZ SORT_COMPLETESORT_OUTTER:LEA DI,BUFFER2+1PUSH CXSORT_INNER:MOV AL,DICMP AL,DI+1JBE SORT_NOPROCESSXCHG AL,DI+1 MOV

23、 DI,ALSORT_NOPROCESS:INC DILOOP SORT_INNERPOP CXLOOP SORT_OUTTERSORT_COMPLETE: MOV AH,03H MOV AL, PUSH AX CALL HEX2DEC CALL STR_NUM_ADJUST LEA DX,BUFFER1+2 CALL STRING_DISPLAY LEA DX,BUFFER3 CALL STRING_DISPLAY SORT_TIP: LEA DX,ANYKEY CALL STRING_DISPLAY CALL GET_CHAR_N CMP AL,1BH JNZ SORT_AGAIN JZ

24、SORT_OVERSORT_ERROR: LEA DX,INPUT_ERROR CALL STRING_DISPLAY JMP SORT_TIPSORT_OVER:POP DIPOP DXPOP CXPOP AX RETSORTING ENDPSET_TIME PROC;TIME SET SERVICE PUSH AX PUSH CX PUSH DXSETTIME_AGAIN: CALL CLEAR_SCREEN LEA DX,QUESTIONCALL STRING_DISPLAY REFRESH: MOV AH,2CHINT 21HMOV BUFFER2,3MOV BUFFER2+1,CHMOV BUFFER2+2,CLMOV BUFFER2+3,DHMOV AH,02HMOV AL,:PUSH AXCA

溫馨提示

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

最新文檔

評論

0/150

提交評論