版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024智慧城市交通信號控制系統(tǒng)優(yōu)化合同
- 2025年度橙子包裝設(shè)計(jì)與定制生產(chǎn)合同2篇
- 2025年度環(huán)保設(shè)備銷售與服務(wù)合同4篇
- 2024版人身損害賠償協(xié)議
- 二零二四年外墻清洗專業(yè)團(tuán)隊(duì)服務(wù)合同樣本3篇
- 2024-2025學(xué)年高中地理第一章環(huán)境與環(huán)境問題第一節(jié)我們周圍的環(huán)境課時分層作業(yè)含解析新人教版選修6
- 二零二五版城市綜合體土方運(yùn)輸與臨時堆場租賃合同3篇
- 二零二五年度餐飲業(yè)人力資源派遣合同范本3篇
- 2025年特色小鎮(zhèn)物業(yè)經(jīng)營權(quán)及配套設(shè)施合作合同3篇
- 二零二五版科技公司股份交易與稅收籌劃合同3篇
- 經(jīng)濟(jì)思維方式課后部分習(xí)題
- 【真題】2024年常州市中考物理試卷(含答案解析)
- 高考全國Ⅲ卷語文真題含答案
- 10kV架空線路專項(xiàng)施工方案
- OGSM戰(zhàn)略規(guī)劃框架:實(shí)現(xiàn)企業(yè)目標(biāo)的系統(tǒng)化方法論
- 遼寧省大連市中山區(qū)2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題
- 2023年版《安寧療護(hù)實(shí)踐指南(試行)》解讀課件
- 2024年新課標(biāo)高考化學(xué)試卷(適用黑龍江、遼寧、吉林地區(qū) 真題+答案)
- AQ6111-2023個體防護(hù)裝備安全管理規(guī)范
- 鈷酸鋰-安全技術(shù)說明書MSDS
- 江蘇省“大唐杯”全國大學(xué)生新一代信息通信技術(shù)大賽省賽題庫(含答案)
評論
0/150
提交評論