您好,欢迎访问三七文档
精品文档。1欢迎下载汇编语言程序设计综合实验姓名:刘发强学号:140201990442016年12月25日精品文档。2欢迎下载题目功能及要求题目要求编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:原字符串例如:abcdgyt0092新字符串ABCDGYT0092按任一键重做;按Esc键返回主菜单。(2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:原字符串Themaximumis最大值.按任一键重做;按Esc键返回主菜单。(3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:原数值串新数值串按任一键重做;按Esc键返回主菜单。(4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。按任一键重新对时;按Esc键返回主菜单。(5)按数字键“5”,结束程序的运行,返回操作系统。程序功能及分析:程序主干:(1)主程序:通过调用屏幕初始化子程序、光标位置设定子程序、清屏子程序、菜单显示子程序、命令解析子程序完成显示器初始化,设置光标位置,打印程序菜单列表以及用户输入提示信息,并等待用户从键盘输入1~5进行菜单选择。用户输入错误会被要求重输。子程序跳转利用数据段转移地址查找表实现。从子服务退回时,重新开始上述操作。(2)子服务一:将字符串中的小写字母转换成大写字母,并输出到屏幕上。先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,后逐个判断字符是否为小写字母,如果是,则通过逻辑与进行转化,完成后,将结果放置到BUFFER2,后调用字符串输出子程序完成输出。然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。(3)子服务二:找出一字符串中ASCII码最大的字符并输出。先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,将AL赋初值为第一个字符,后将AL作为暂时最大值与各字符逐个比较,精品文档。3欢迎下载若小于则将其值赋给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’删除。精品文档。4欢迎下载汇编源程序STACKSEGMENT'STACK'DW4096DUP('C')TOPLABELWORDSTACKENDSDATASEGMENTTRANSFORMDB'1.TRANSFORM',0DH,0AH,'$'MAXDB'2.MAX',0DH,0AH,'$'SORTDB'3.SORT',0DH,0AH,'$'TIMEDB'4.TIME',0DH,0AH,'$'EXITDB'5.EXIT',0DH,0AH,'$'WAITINGDB'PLEASEINPUTNUM1-5TOSELECTSERVICE:',0DH,0AH,'$'TIPDB'PLEASEINPUTASTRING',0DH,0AH,'$'TIPNUMDB'PLEASEINPUTAGROUPOFDECIMAL',0DH,0AH,'$'ANYKEYDB'PRESSANYKEYTOCONTINUE',0DH,0AH,'$'MAXIMUMDB'THEMAXIMUMIS:$'INPUT_TIMEDB'PLEASEINPUTCURRENTTIMELIKEHH:MM:SS',0DH,0AH,'$'QUESTIONDB'DOYOUWANTTOSETTIME(Y/N)',0DH,0AH,'$'INPUT_ERRORDB'ERRORORINVALIDINPUT',0DH,0AH,'$'SUCCESSDB'SETTIMESUCCEED',0DH,0AH,'$'STRINGDWTRANSFORM,MAX,SORT,TIME,EXIT,WAITINGSERVICEDWTRANS,FIND_MAX,SORTING,SET_TIME,EXIT_TOSYSBUFFER1DB512DUP('C');INPUTBUFFERBUFFER2DB512DUP('C');PROCESSWORKSPACEBUFFER3DB512DUP('C');OUTPUTBUFFERDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXLEAAX,TOPMOVSP,AXCALLSCREEN_INITMAIN_AGAIN:CALLCLEAR_SCREENCALLDISPLAY_MENUCALLGET_CHARCALLORDER_PARSEJMPMAIN_AGAINMOVAH,4CHINT21H精品文档。5欢迎下载ORDER_PARSEPROCNEAR;RETURNAL=-1IFERRORELSEINVOKESERVICEPUSHAXPUSHBXANDAL,0FHCMPAL,1JBERROR_OVERCMPAL,5JAERROR_OVERLEABX,SERVICEDECALSHLAL,1XORAH,AHADDBX,AXCALLCLEAR_SCREENCALLwordptr[BX]POPBXPOPAXJMPOVER_ORDERERROR_OVER:MOVAL,0FFHOVER_ORDER:RETORDER_PARSEENDPDISPLAY_MENUPROCNEAR;displaymenuincludingfiveitemsPUSHDXPUSHCXPUSHSIMOVDH,0BHMOVDL,14HMOVCX,06HLEASI,STRINGNEXT_DIS:MOVBH,0CALLCURSOR_SETPUSHDXMOVDX,[SI]ADDSI,02HCALLSTRING_DISPLAYPOPDXINCDHLOOPNEXT_DIS精品文档。6欢迎下载POPSIPOPCXPOPDXRETDISPLAY_MENUENDPSCREEN_INITPROCNEAR;setscreenmode80*25characterPUSHAXMOVAH,0MOVAL,02HINT10HPOPAXRETSCREEN_INITENDPCURSOR_SETPROCNEAR;setcursorBHPAGE,DHROW,DLCOLUMNPUSHAXMOVAH,02HINT10HPOPAXRETCURSOR_SETENDPSTRING_DISPLAYPROCNEAR;displaystringDXADDRESSPUSHAXMOVAH,09HINT21HPOPAXRETSTRING_DISPLAYENDPCLEAR_SCREENPROCNEAR;clearscreenPUSHAXMOVAX,3INT10HPOPAXRETCLEAR_SCREENENDP精品文档。7欢迎下载GET_CHAR_DIRPROCPUSHDXMOVAH,06HMOVDL,0FFHINT21HPOPDXRETGET_CHAR_DIRENDPGET_CHAR_NPROCNEAR;AL=INPUTCHAR,NODISPLAYMOVAH,07HINT21HRETGET_CHAR_NENDPGET_CHARPROCNEAR;AL=IMPUTCHARPUSHDXMOVAH,01HINT21HPUSHAXMOVDL,0DHMOVAH,02HINT21HMOVDL,0AHINT21HPOPAXPOPDXRETGET_CHARENDPGET_STRINGPROCNEAR;DS:DX=STRINGPUSHAXPUSHDXPUSHBXPUSHSILEADX,BUFFER1MOVBUFFER1,0FFHMOVAH,0AHINT21HMOVBL,BUFFER1+1XORBH,BH精品文档。8欢迎下载LEASI,BUFFER1[BX+2]CALLSTR_ENDPOPSIPOPBXPOPDXPOPAXRETGET_STRINGENDPTRANSPROC;PUSHAXPUSHDXPUSHCXPUSHSIPUSHDILEADX,TIPCALLSTRING_DISPLAYAGAIN_TRANS:CALLGET_STRINGLEASI,BUFFER1+2LEADI,BUFFER2MOVCL,BUFFER1+1XORCH,CHJCXZOVER_TRANSNEXT_TRANS:MOVAL,BYTEPTR[SI]CMPAL,'a'JBNOPROCESSCMPAL,'z'JANOPROCESSANDAL,0DFHNOPROCESS:MOVBYTEPTR[DI],ALIN
本文标题:西电微机原理大作业
链接地址:https://www.777doc.com/doc-6003954 .html