西电微机原理大作业.pdf
精品文档汇编语言程序设计综合实验汇编语言程序设计综合实验姓名:姓名:学号:学号:2016年 12 月 25 日。1欢迎下载精品文档题目功能及要求题目功能及要求题目要求题目要求编写程序实现下列 5 项功能,通过从键盘输入15 进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字 09 组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:例如:abcdgyt0092 ABCDGYT0092按任一键重做;按 Esc 键返回主菜单。(2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字09 组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:The maximum is 按任一键重做;按 Esc 键返回主菜单。(3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:按任一键重做;按 Esc 键返回主菜单。(4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。按任一键重新对时;按 Esc 键返回主菜单。(5)按数字键“5”,结束程序的运行,返回操作系统。程序功能及分析程序功能及分析:程序主干:程序主干:(1)主程序:通过调用屏幕初始化子程序、光标位置设定子程序、清屏子程序、菜单显示子程序、命令解析子程序完成显示器初始化,设置光标位置,打印程序菜单列表以及用户输入提示信息,并等待用户从键盘输入 15 进行菜单选择。用户输入错误会被要求重输。子程序跳转利用数据段转移地址查找表实现。从子服务退回时,重新开始上述操作。(2)子服务一:将字符串中的小写字母转换成大写字母,并输出到屏幕上。先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到 BUFFER1 存储区,后逐个判断字符是否为小写字母,如果是,则通过逻辑与进行转化,完成后,将结果放置到 BUFFER2,后调用字符串输出子程序完成输出。然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。(3)子服务二:找出一字符串中 ASCII 码最大的字符并输出。先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到 BUFFER1存储区,将 AL 赋初值为第一个字符,后将 AL 作为暂时最大值与各字符逐个比较,。2欢迎下载精品文档若小于则将其值赋给 AL,否则不赋。后将结果与提示信息生成字符串,后调用字符串输出子程序完成输出。然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。(4)子服务三:读入一组十进制数,递增排序,并原格式输出。先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1 存储区,后调用十进制数转二进制数子程序,将转换数据放置到BUFFER2,再利用冒泡算法对 BUFFER2 内的数据递增排序,再调用二进制数转十进制数子程序将 BUFFER2 内的二进制数转化为十进制数,放置到BUFFER3 存储区内,并调用字符串格式修正子程序将不必要的前导0删除,再调用字符串输出子程序将 BUFFER3 内的数据输出。对于非法输入(数值超过 255、非法字符)会给出错误提示信息。然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。(5)子服务四:完成时间的显示、修改。调用字符串输出子程序将是否更改时间提示信息输出,并调用无等待字符读入子程序等待用户输入。然后通过DOS 功能调用读出系统时间,后调用二进制转十进制数子程序,将系统时间显示到屏幕右上方。如果用户确认修改时间,则调用字符串读入子程序将时间放置到 BUFFER1,后调用十进制数转二进制数子程序并将结果放置到 BUFFER2,后通过 DOS 功能调用将数据送给系统,如果出错则给出出错信息。然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。(6)子服务五:退出到系统。通过DOS 功能调用完成。辅助子程序:辅助子程序:(1)命令解析子程序:完成对用户输入选择信息的检查,合法则安排服务跳转,否则要求用户重做。(2)菜单显示子程序:调用字符串输出子程序将菜单输出到屏幕上。(3)屏幕初始化子程序:通过BIOS 功能调用将屏幕设置成80*25 字符模式。(4)光标位置设定:通过 BIOS 功能调用完成设定。(5)字符串显示子程序:通过DOS 功能调用完成。(6)清屏子程序:通过重新设置屏幕显示模式到达清屏目的。(7)字符串读入子程序:通过DOS 功能调用完成字符串输入,数据放在BUFFER1。(8)字符读入子程序:通过 DOS 功能调用完成。(9)无等待的字符读子程序:通过DOS 功能调用完成。(10)无回显的字符读入子程序:通过DOS 功能调用完成。(11)字符串结束符添加子程序:在指定存储区的字符串的最后添加回车、换行、字符串结束符。(12)字符输出子程序:通过 DOS 功能调用完成。(13)十进制数转二进制数子程序:利用加权求和公式将读入的十进制数(ASCII 码字符串表示的数字)转化成二进制数并放到BUFFER 存储区,其中第一个字节变量值为数据个数。具有非法字符判定、数值超过255 等判断。(14)二进制数转十进制数子程序:利用除 10 取余并逆序的算法将每一个二进制数转化为十进制数(ASCII 字符串),将输出放置到 BUFFER3 存储区。(15)字符串前导0删除子程序:将十进制数(ASCII 码字符串)高位的前导0删除。3欢迎下载精品文档汇编源程序汇编源程序STACK SEGMENT STACKDW 4096 DUP(C)TOP LABEL WORDSTACK ENDSDATA SEGMENT TRANSFORMDB 1.TRANSFORM,0DH,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,0AH,$MAXIMUM DB THE MAXIMUM IS:$INPUT_TIME DB PLEASE INPUT CURRENT TIME LIKEHH: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,FIND_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 SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA AX,TOPMOV SP,AX CALL SCREEN_INITMAIN_AGAIN:CALL CLEAR_SCREEN CALL DISPLAY_MENU CALL GET_CHAR CALL ORDER_PARSE JMP MAIN_AGAINMOV AH,4CH。4欢迎下载精品文档 INT 21HORDER_PARSE PROC NEAR;RETURN AL=-1 IF ERROR ELSE INVOKE SERVICEPUSH AXPUSH BXAND AL,0FHCMP AL,1 JB ERROR_OVERCMP AL,5 JA ERROR_OVERLEA BX,SERVICEDEC ALSHL AL,1XOR AH,AHADD BX,AX CALL CLEAR_SCREEN CALL word ptr BXPOP BXPOP AX JMP OVER_ORDERERROR_OVER:MOV AL,0FFHOVER_ORDER:RETORDER_PARSE ENDPDISPLAY_MENU PROC NEARPUSH DXPUSH CXPUSH SIMOV DH,0BHMOV DL,14HMOV CX,06HLEA SI,STRINGNEXT_DIS:MOV BH,0 CALL CURSOR_SETPUSH DXMOV DX,SIADD SI,02H CALL STRING_DISPLAYPOP DXINC DH5欢迎下载。;display menu including five items精品文档LOOP NEXT_DISPOP SIPOP CXPOP DX RETDISPLAY_MENU ENDPSCREEN_INIT PROC NEAR;set screen mode 80*25 characterPUSH AXMOV AH,0MOV AL,02H INT 10HPOP AX RETSCREEN_INIT ENDPCURSOR_SET PROC NEAR;set cursor BH PAGE,DH ROW,DL COLUMNPUSH AXMOV AH,02H INT 10HPOP AX RETCURSOR_SET ENDPSTRING_DISPLAY PROC NEAR;display string DX ADDRESSPUSH AXMOV AH,09H INT 21HPOP AX RETSTRING_DISPLAY ENDPCLEAR_SCREEN PROC NEAR;clear screenPUSH AXMOV AX,3 INT 10HPOP AX RETCLEAR_SCREEN ENDP。6欢迎下载精品文档GET_CHAR_DIR PROCPUSH DXMOV AH,06HMOV DL,0FFHINT 21HPOP DXRETGET_CHAR_DIR ENDPGET_CHAR_N PROC NEAR;AL=INPUT CHAR,NO DISPLAYMOV AH,07HINT 21HRETGET_CHAR_N ENDPGET_CHAR PROC NEAR;AL=IMPUT CHARPUSH DXMOV AH,01H INT 21HPUSH AXMOV DL,0DHMOV AH,02H INT 21HMOV DL,0AH INT 21HPOP AXPOP DX RETGET_CHAR ENDPGET_STRING PROC NEAR;DS:DXBUFFER2,CNT-BUF2,NUM-BUF2+1PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DILEA SI,BUFFER1+2。10欢迎下精品文档LEA 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_OVERFLOWJMP NEXT_PRONEXT_NUM:MOV DI,ALINC DIINC BYTE PTR BUFFER2XOR AX,AXNEXT_PRO:INC SILOOP DEC_NEXTMOV DI,ALINC BYTE PTR BUFFER2JMP DH_OVERERROR_OVERFLOW:MOV BUFFER2,0DH_OVER:POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRET11。欢迎下精品文档DEC2HEX ENDPHEX2DEC PROC;INPUT:BUFFER2,NUM,BUFFER2+1,START;OUTPUT:BUFFER3,STRING,STACK:OR,3OR2PUSH 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 AH,AHLOOP HEX2DEC_INNERINC SIPOP DIPOP CXADD DI,DXMOV AH,BPMOV BYTE PTR DI,AHINC DILOOP HEX2DEC_OUTTER12。欢迎下精品文档HEX_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 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 L1。13欢迎下精品文档ADJUST_OVER:MOV SI,DICALL STR_ENDPOP DIPOP SIPOP BXPOP AXRETSTR_NUM_ADJUST ENDPSORTING PROC;SORTPUSH AXPUSH CXPUSH DXPUSH DISORT_AGAIN:LEA DX,TIPNUMCALL STRING_DISPLAYCALL GET_STRINGCALL DEC2HEXXOR CH,CHMOV CL,BUFFER2JCXZ SORT_ERRORDEC CXJCXZ SORT_COMPLETESORT_OUTTER:LEA DI,BUFFER2+1PUSH CXSORT_INNER:MOV AL,DICMP AL,DI+1JBE SORT_NOPROCESSXCHG AL,DI+1MOV DI,ALSORT_NOPROCESS:INC DILOOP SORT_INNERPOP CXLOOP SORT_OUTTERSORT_COMPLETE:MOV AH,03HMOV AL,PUSH AX14。欢迎下精品文档 CALL HEX2DEC CALL STR_NUM_ADJUSTLEA DX,BUFFER1+2 CALL STRING_DISPLAYLEA DX,BUFFER3 CALL STRING_DISPLAY SORT_TIP:LEA DX,ANYKEY CALL STRING_DISPLAY CALL GET_CHAR_NCMP AL,1BH JNZ SORT_AGAIN JZ SORT_OVERSORT_ERROR:LEA DX,INPUT_ERRORCALL STRING_DISPLAYJMP SORT_TIPSORT_OVER:POP DIPOP DXPOP CXPOP AX RETSORTING ENDPSET_TIME PROC;TIME SET SERVICEPUSH AXPUSH CXPUSH DXSETTIME_AGAIN:CALL CLEAR_SCREENLEA DX,QUESTIONCALL STRING_DISPLAY REFRESH:MOV AH,2CHINT 21HMOV BUFFER2,3MOV BUFFER2+1,CHMOV BUFFER2+2,CLMOV BUFFER2+3,DHMOV AH,02HMOV AL,:15。欢迎下精品文档PUSH AXCALL HEX2DECMOV AH,02HMOV BH,0MOV DH,0MOV DL,60INT 10HMOV BUFFER3+8,LEA DX,BUFFER3CALL STRING_DISPLAYCALL GET_CHAR_DIRJZ REFRESHCMP AL,YJNZ NOSETLEA DX,INPUT_TIMECALL STRING_DISPLAYCALL GET_STRINGCALL DEC2HEXMOV AH,2DHMOV CH,BUFFER2+1MOV CL,BUFFER2+2MOV DH,BUFFER2+3MOV DL,0INT 21HCMP AL,0HJZ SET_TIME_SUCCLEA DX,INPUT_ERRORCALL STRING_DISPLAYJMP NOSETSET_TIME_SUCC:LEA DX,SUCCESSCALL STRING_DISPLAYNOSET:LEA DX,ANYKEYCALL STRING_DISPLAYCALL GET_CHAR_NCMP AL,1BHJNZ SETTIME_AGAINPOP DXPOP CXPOP AX RETSET_TIME ENDP16。欢迎下精品文档EXIT_TOSYS PROCMOV AH,4CH INT 21H RETEXIT_TOSYS ENDPCODE ENDSEND START。17欢迎下精品文档运行结果运行结果主程序界面子服务一:。18欢迎下精品文档子服务二:子服务三:(注:第二次输入非法输入,给出错误提示信息)。19欢迎下精品文档子服务四:。20欢迎下精品文档子服务五:总结总结本程序设计严格遵循模块化设计思想,模块内部内聚性好,模块之间耦合性低,模块的复用性高,程序结构清晰,易于调试和功能扩展。程序结构较为简单,经过了较为可靠的测试,对于不合法输入具有一定程度的处理能力,程序的健壮性较好。另外,在程序设计过程中,由于存储器寻址的类型不明确或不匹配而产生的的错误让我印象极为深刻,不得不引起注意。21欢迎下