您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 微机原理课设参考资料之一:软件流程与软件程序的例子
-0-微机原理与接口技术——程序与流程编写程序实现下列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”,结束程序的运行,返回操作系统。解答过程:※主程序的编程思路:此程序共5个功能,可采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地址分别标号为G1,G2,G3,G4,G5。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。首先,通过调用子程序MENU,设置显示器,并输出提示文档。接着,读取‘1’-‘5’之间的ASCII表示数。然后,通过跳转表TABLE实现由输入参数转入相应的程序段。由于-1-表中按“字”存放数据,则每个数据的位移量是:0、2、4、6、8。对于输入参数N,计算位移量的公式是N=(N-1)*2。当输入‘1’时,跳转到标号G1。调用子程序CHGLTR,完成将输入字符串中的小写字母变换成大写字母。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G1;当输入‘2’时,跳转到标号G2。调用子程序MAXLTR,完成在输入字符串中找最大值。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G2;当输入‘3’时,跳转到标号G3。调用子程序SORTNUM,完成输入数据组的排序。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G3。当输入‘4’时,跳转到标号G4。调用子程序TIMCHK,完成时间的显示。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G4。当输入‘5’时,跳转到标号G5。结束程序的运行,返回操作系统。其流程框图见图3-1。-2-图3-1主程序流程框图START初始化调用子程序MENU,显示主界面设置光标位置(41,10)带回显的控制台输入(AL)←输入字符(AL)‘1’(AL)‘5’将跳转表TABLE的偏移地址送入(BX)(AL)←(AL)–‘1’(AL)←(AL)*2AL按符号扩展成AX(BX)←TABLE(BX)←(BX)+(AX)ABCEENDDN=1N=2N=3N=4N=5NNYY-3-※子程序MENU的编程思路:设置显示器显示方式为80*25彩色文本方式,清屏。逐行设置光标位置,使提示文档左对齐整体居中。输出1-5的提示文档,再输出输入N的提示。其流程框图见图3-2。图3-2子程序MENU流程框图START初始化清屏设置光标位置(5,5)显示提示字符串STRING1设置光标位置(5,6)显示提示字符串STRING2M设置光标位置(5,7)显示提示字符串STRING3设置光标位置(5,8)显示提示字符串STRING4MN设置光标位置(5,9)显示提示字符串STRING5设置光标位置(5,10)显示提示字符串STRINGN子程序MENU返回N图3-1(续)主程序流程框图调用子程序MAXLTR带回显的控制台输入(AL)←输入字符BE(AL)=ESC?YN调用子程序TIMCHK带回显的控制台输入(AL)←输入字符DE(AL)=ESC?YN调用子程序SORTNUM带回显的控制台输入(AL)←输入字符CE(AL)=ESC?YN调用子程序CHGLTR带回显的控制台输入(AL)←输入字符AE(AL)=ESC?YN注意:子程序不要用START开头!-4-START初始化清屏设置光标位置(5,5)显示提示字符串IN_STR设置光标位置(5,6)KEYBUF←输入字符串在字符串尾加结束标志’$’设置光标位置(5,7)显示提示字符串PRESTR显示输入的字符串(BX)←KEYBUF+2(BX)←(BX)+1((BX))←((BX))∧0DFH子程序CHGLTR返回(AL)←输入字符串长度AL按符号扩展成AX(CX)←(AX)((BX))≥‘a’(CX)←(CX)–1(CX)=0?设置光标位置(5,8)显示提示字符串NEWSTR显示变换后的字符串设置光标位置(5,9)显示提示字符串HINSTRYNYN图3-3子程序CHGLTR流程框图※子程序CHGLTR的编程思路:设置显示器显示方式为80*25彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。在输入字符串尾加结束标志$,输出输入字符串。从前往后,依次取字符串中的每个字符,若其为小写字母,则将其ASCII码减去20H。输出变换后的字符串。最后输出说明文档。其流程框图见图3-3。-5-※子程序MAXLTR的编程思路:设置显示器显示方式为80*25彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。在输入字符串尾加结束标志$,输出输入字符串。预设字符串中最大值为0。从前往后,依次取字符串中的每个字符,若其大于当前最大值,则进行替换,即可得到字符串中的最大值,并输出。最后输出说明文档。其流程框图见图3-4。START初始化清屏设置光标位置(5,5)显示提示字符串IN_STR设置光标位置(5,6)KEYBUF←输入字符串在字符串尾加结束标志’$’设置光标位置(5,7)显示提示字符串OUT_STR显示输入的字符串设置光标位置(5,8)显示提示字符串MAXCHR(DL)←0(BX)←KEYBUF+2(BX)←(BX)+1(DL)←((BX))子程序MAXLTR返回(AL)←输入字符串长度AL按符号扩展成AX(CX)←(AX)((BX))(DL)(CX)←(CX)–1(CX)=0?显示字符(DL)设置光标位置(5,9)显示提示字符串HINSTRYNYN图3-4子程序MAXLTR流程框图-6-※子程序SORTNUM的编程思路:设置显示器显示方式为80*25彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入数据组提示文档,读取输入数据组字符串并将其放入KEYBUF。调用子程序CIN_INT,将字符串转换成数据串。判断数据串是否有错误或者为空,若是,则重新输入数据组。调用子程序MPSORT,采用冒泡法对数据串进行排序。再调用子程序INT_OUT,输出排序后的数据组。最后输出说明文档。其流程框图见图3-5。※子程序CIN_INT的编程思路:入口参数为:无;出口参数为:AL(有无错误标志,0为有,1为无)。从前往后,依次取字符串中的每个字符进行判断。CH表示数据组数据个数,AL表示当前数据x,DL作为有无数据标志。若当前字符为空格,则转到ADDNUM,判断DL是否为1,若为1,则CH增1,调用子程序ADDNEW,增加新数x,然后DL、AL清零;否则判断当前字符c是否在‘0’-‘9’之间,若不是,则判错,将AL置0,子程序CIN_INT返回;否则,DL置1,x=x*10+c-‘0’,判断x是否超过255,若是,则判错,将AL置0,子程序CIN_INT返回;否则,对下一个字符进行操作。字符串判断结束后,若DL为1,则有新数x未加至数据组,调用子程序ADDNEW,增加新数x。将数据组个数CH放入NUMBUF,将AL置1。其流程框图见图3-6。※子程序ADDNEW的编程思路:入口参数为:CH(数据组数据个数)、AL(当前数据x);出口参数为:无。取出数据组NUMBUF的首地址,加上数据组数据个数,即为当前数据x的地址,将x放入该地址。START初始化清屏设置光标位置(5,5)显示提示字符串IN_NUM设置光标位置(5,6)KEYBUF←输入字符串子程序SORTNUM返回调用子程序CIN_INT(AL)=0?设置光标位置(5,9)显示提示字符串HINSTRNY设置光标位置(5,7)显示提示字符串OUT_NUM设置光标位置(5,8)调用子程序MPSORT调用子程序INT_OUT图3-5子程序SORTNUM流程框图-7-其流程框图见图3-7。-8-NSTART初始化(CL)←输入字符串长度(SI)←KEYBUF+2(CH)←0(DH)←10(AL)←0(DL)←0子程序CIN_INT返回(DL)←1(AX)←(AL)*(DH)(BH)←0(BL)←((SI))(AX)←(AX)+(BX)(AX)←(AX)–‘0’((SI))=‘’?(CH)←(CH)+1调用子程序ADDNEWYNUMBUF←(CH)(AL)←1((SI))‘0’((SI))‘9’(AH)0(AL)←0(CH)←(CH)+1调用子程序ADDNEW(DL)←0(AL)←0(DL)≠1?YYYNNNYNRRR(SI)←(SI)+1(CL)←(CL)-1(CL)≠0?(DL)≠1?YYNNTRT图3-6子程序CIN_INT流程框图图3-7子程序ADDNEW流程框图START初始化BX、AX进栈(BX)←NUMBUF(AL)←(CH)AL按符号扩展成AX(BX)←(BX)+(AX)AX出栈((BX))←(AL)BX出栈子程序ADDNEW返回-9-图3-8子程序MPSORT流程框图STARTN子程序MPSORT返回CX、SI进栈(DL)←0(AL)≤1SI、CX出栈NY(AL)←((SI))(AL)≥((SI)–1)(CX)←(CX)–1(CX)=0?((BX))‘9‘(AL)←(NUMBUF)AL按符号扩展成AX(CX)←(AX)(SI)←NUMBUF(SI)←(SI)+(CX)(CX)←(CX)–1YY(AL)←→((SI–1))((SI))←(AL)(DL)←1(SI)←(SI)-1(CX)←(CX)–1(CX)=0?((BX))‘9‘(DL)=1?NNNYY※子程序MPSORT的编程思路:对N个数据进行从小到大排序,采用“冒泡法”:从前往后,每两个数据进行比较,当前者大于后者时,交换两者的次序;否则不变。经过N-1次比较,可以将最大值交换到第N个单元。接着对前N-1个数据,重复上述过程,使次大值交换到第N-1个单元;依此类推,若某次比较过程,无任何交换,则终止其后的所有比较过程。最多进行N-1次比较过程,可以完成数据的排序操作。其流程图见图3-8。-10-※子程序IN_OUT的编程思路:从数据组中依次取出每个数据,调用OUTNUM,将十进制数据转成十六进制进行输出,数据之间输出一个空格作为分隔符。其流程图见图3-9。※子程序OUTNUM的编程思路:入口参数:AL(待转换的数据),BL(转换进制数);出口参数:无。待转换数据x除以转换进制数,商为新的x,余数y为转换后的低位。保存y,调用子程序OUTNUM本身,对新的x进行进制转换并输入。取出y,对其进行输入,若低于10,则直接输出,否则转换成字母输出。其流程图见图3-10。START初始化(AL)←(NUMBUF)AL按符号扩展成AX(CX)←(AX)(BL)←10H(SI)←NUMBUF+1(AL)←((SI))调用子程序OUTNUM(SI)←(SI)+1显示字符‘’子程序INT_OUT返回NY(CX)←(CX)
本文标题:微机原理课设参考资料之一:软件流程与软件程序的例子
链接地址:https://www.777doc.com/doc-7245738 .html