软件流程与软件程序的例子课设参考资料之一.docx

上传人:b****7 文档编号:9858028 上传时间:2023-02-07 格式:DOCX 页数:42 大小:515.59KB
下载 相关 举报
软件流程与软件程序的例子课设参考资料之一.docx_第1页
第1页 / 共42页
软件流程与软件程序的例子课设参考资料之一.docx_第2页
第2页 / 共42页
软件流程与软件程序的例子课设参考资料之一.docx_第3页
第3页 / 共42页
软件流程与软件程序的例子课设参考资料之一.docx_第4页
第4页 / 共42页
软件流程与软件程序的例子课设参考资料之一.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

软件流程与软件程序的例子课设参考资料之一.docx

《软件流程与软件程序的例子课设参考资料之一.docx》由会员分享,可在线阅读,更多相关《软件流程与软件程序的例子课设参考资料之一.docx(42页珍藏版)》请在冰豆网上搜索。

软件流程与软件程序的例子课设参考资料之一.docx

软件流程与软件程序的例子课设参考资料之一

微机原理与接口技术——程序与流程

编写程序实现下列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实现由输入参数转入相应的程序段。

由于表中按“字”存放数据,则每个数据的位移量是:

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。

※子程序MENU的编程思路:

注意:

子程序不要用START开头!

设置显示器显示方式为80*25彩色文本方式,清屏。

逐行设置光标位置,使提示文档左对齐整体居中。

输出1-5的提示文档,再输出输入N的提示。

其流程框图见图3-2。

※子程序CHGLTR的编程思路:

设置显示器显示方式为80*25彩色文本方式,清屏。

设置光标位置,使提示文档左对齐整体居中。

输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。

在输入字符串尾加结束标志$,输出输入字符串。

从前往后,依次取字符串中的每个字符,若其为小写字母,则将其ASCII码减去20H。

输出变换后的字符串。

最后输出说明文档。

其流程框图见图3-3。

※子程序MAXLTR的编

程思路:

设置显示器显示方式为80*25彩色文本方式,清屏。

设置光标位置,使提示文档左对齐整体居中。

输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。

在输入字符串尾加结束标志$,输出输入字符串。

预设字符串中最大值为0。

从前往后,依次取字符串中的每个字符,若其大于当前最大值,则进行替换,即可得到字符串中的最大值,并输出。

最后输出说明文档。

其流程框图见图3-4。

※子程序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放入该地址。

其流程框图见图3-7。

※子程序MPSORT的编程思路:

对N个数据进行从小到大排序,采用“冒泡法”:

从前往后,每两个数据进行比较,当前者大于后者时,交换两者的次序;否则不变。

经过N-1次比较,可以将最大值交换到第N个单元。

接着对前N-1个数据,重复上述过程,使次大值交换到第N-1个单元;依此类推,若某次比较过程,无任何交换,则终止其后的所有比较过程。

最多进行N-1次比较过程,可以完成数据的排序操作。

其流程图见图3-8。

※子程序IN_OUT的编程思路:

从数据组中依次取出每个数据,调用OUTNUM,将十进制数据转成十六进制进行输出,数据之间输出一个空格作为分隔符。

其流程图见图3-9。

※子程序OUTNUM的编程思路:

入口参数:

AL(待转换的数据),BL(转换进制数);出口参数:

无。

待转换数据x除以转换进制数,商为新的x,余数y为转换后的低位。

保存y,调用子程序OUTNUM本身,对新的x进行进制转换并输入。

取出y,对其进行输入,若低于10,则直接输出,否则转换成字母输出。

其流程图见图3-10。

※子程序TIMCHK的编程思路:

设置显示器显示方式为80*25彩色文本方式,清屏。

设置光标位置,输出设置时间提示文档。

读取输入时间字符串并将其放入KEYBUF。

分别判断时、分、秒是否在有效数字范围,若有效,则设置新的系统时间。

调用子程序TIME,在屏幕的右上角实时显示时间。

其流程框图见图3-11。

※子程序TIME的编程思路:

设置显示器显示方式为80*25彩色文本方式,清屏。

设置光标位置,输出说明文档。

实时显示时间:

设置光标至屏幕右上角;读取系统时间,调用子程序SHOWNUM分别对时、分、秒进行显示,并用‘:

’作分隔符;设置光标等待位置,并进行延时;检查键盘状态,若无键盘输入,则重复上述步骤显示时间,否则子程序TIME返回。

其流程框图见图3-12。

 

※子程序SHOWNUM的编程思路:

入口参数:

AL(待显示的数据);出口参数:

无。

待显示数据x除以10,商为y,余数为z。

将数字y、z分别转换成字符数字,然后输出。

其流程框图见图3-13。

四、程序代码

STACKSEGMENTSTACK

DB256DUP(?

TOPLABELWORD

STACKENDS

DATASEGMENT

TABLEDWG1,G2,G3,G4,G5

STRING1DB'1.Changesmalllettersintocapitallettersofstring;',0DH,0AH,'$'

STRING2DB'2.Findthemaximumofstring;',0DH,0AH,'$'

STRING3DB'3.Sortfordatas;',0DH,0AH,'$'

STRING4DB'4.ShowTime;',0DH,0AH,'$'

STRING5DB'5.Exit.',0DH,0AH,'$'

STRINGNDB'Inputthenumberyouselect(1-5):

$'

IN_STRDB'Inputthestring(includingletters&numbers,lessthan60letters):

',0DH,0AH,'$'

PRESTRDB'Originalstring:

$'

NEWSTRDB'Newstring:

$'

OUT_STRDB'Thestringis$'

MAXCHRDB'Themaximumis$'

IN_NUMDB'Inputthenumbers(0-255,nomorethan20numbers):

',0DH,0AH,'$'

OUT_NUMDB'Sortednumbers:

',0DH,0AH,'$'

IN_TIMDB'Correctthetime(HH:

MM:

SS):

$'

HINTSTRDB'PressESC,gobacktothemenu;orpressanykeytoplayagain!

$'

KEYBUFDB61

DB?

DB61DUP(?

NUMBUFDB?

DB20DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOP

MAIN:

CALLFARPTRMENU;设置显示器

AGAIN:

MOVAH,2

MOVBH,0;页号

MOVDL,41;列号

MOVDH,10;行号

INT10H;光标位置设置

MOVAH,1

INT21H

CMPAL,'1'

JBAGAIN

CMPAL,'5'

JAAGAIN

SUBAL,'1';N-1

SHLAL,1;(N-1)*2

CBW;AL->AX

LEABX,TABLE

ADDBX,AX

JMPWORDPTR[BX]

G1:

CALLFARPTRCHGLTR

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG1

G2:

CALLFARPTRMAXLTR

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG2

G3:

CALLFARPTRSORTNUM

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG3

G4:

CALLFARPTRTIMCHK

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG4

G5:

MOVAH,4CH

INT21H

MENUPROCFAR;显示主界面

;设置显示器方式

MOVAH,0

MOVAL,3;

MOVBL,0;

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING1

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING2

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,7;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING3

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,8;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING4

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,9;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING5

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,10;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRINGN

INT21H

RET

MENUENDP

CHGLTRPROCFAR;将输入字符串中小写字母便换成大写字母

RECHG:

;设置显示器方式

MOVAH,0

MOVAL,3

MOVBL,0

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;输入提示光标位置设置

MOVAH,9

LEADX,IN_STR

INT21H;输入字符串提示

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;输入字符串光标位置设置

MOVAH,0AH

LEADX,KEYBUF

INT21H;输入字符串

CMPKEYBUF+1,0

JZRECHG;判断输入字符串是否为空串

LEABX,KEYBUF+2

MOVAL,KEYBUF+1

CBW

MOVCX,AX

ADDBX,AX

MOVBYTEPTR[BX],'$';在输入字符串尾加结束标志$

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,7;行号

INT10H;源字符串提示光标位置设置

MOVAH,9

LEADX,PRESTR

INT21H;输出源字符串提示

MOVAH,9

LEADX,KEYBUF+2

INT21H;输出源字符串

LEABX,KEYBUF+2

LCHG:

CMPBYTEPTR[BX],61H

JBNOCHG

ANDBYTEPTR[BX],0DFH

NOCHG:

INCBX

LOOPLCHG;将字符串中小写字母转换成大写字母

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,8;行号

INT10H;新字符串提示光标位置设置

MOVAH,9

LEADX,NEWSTR

INT21H;输出新字符串提示

MOVAH,9

LEADX,KEYBUF+2

INT21H;输出新字符串

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,9;行号

INT10H;提示信息光标位置设置

MOVAH,9

LEADX,HINTSTR

INT21H;输出提示信息

RET

CHGLTRENDP

MAXLTRPROCFAR;在输入字符串中找出最大值

REMAX:

;设置显示器方式

MOVAH,0

MOVAL,3

MOVBL,0

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;输入提示光标位置设置

MOVAH,9

LEADX,IN_STR

INT21H;输入字符串提示

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;输入字符串光标位置设置

MOVAH,0AH

LEADX,KEYBUF

INT21H;输入字符串

CMPKEYBUF+1,0

JZREMAX;判断输入字符串是否为空串

LEABX,KEYBUF+2

MOVAL,KEYBUF+1

CBW

MOVCX,AX

ADDBX,AX

MOVBYTEPTR[BX],'$';在输入字符串位加结束标志$

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,7;行号

INT10H;源字符串提示光标位置设置

MOVAH,9

LEADX,OUT_STR

INT21H;输出字符串提示

MOVAH,9

LEADX,KEYBUF+2

INT21H;输出字符串

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,8;行号

INT10H;新字符串提示光标位置设置

MOVAH,9

LEADX,MAXCHR

INT21H;输出字符串中最大值提示

MOVDL,0

LEABX,KEYBUF+2

LCMP:

CMP[BX],DL

JBNOLCHG

MOVDL,[BX]

NOLCHG:

INCBX

LOOPLCMP;找出字符串中最大字符,放入DL

MOVAH,2

INT21H;输出字符串中最大字符

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,9;行号

INT10H;提示信息光标位置设置

MOVAH,9

LEADX,HINTSTR

INT21H;输出提示信息

RET

MAXLTRENDP

SORTNUMPROCFAR;对输入数据组排序

RESORT:

;设置显示器方式

MOVAH,0

MOVAL,3

MOVBL,0

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;输入提示光标位置设置

MOVAH,9

LEADX,IN_NUM

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;输入数据组光标位置设置

MOVAH,0AH

LEADX,KEYBUF

INT21H;输入数据组字符串

CALLCIN_INT;字符串转换成数据串

CMPAL,0

JZRESORT;判断数据串是否有错

CMPNUMBUF,0

JZRESORT;判断数据串是否为空

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,7;行号

INT10H;输出提示光标位置设置

MOVAH,9

LEADX,OUT_NUM

INT21H;输出数据串提示

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,8;行号

INT10H;输出数据组光标位置设置

CALLFARPTRMPSORT;数据组排序

CALLFARPTRINT_OUT;数据组的输出

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,9;行号

INT10H;提示信息光标位置设置

MOVAH,9

LEADX,HINTSTR

INT21H;输出提示信息

RET

SORTNUMENDP

CIN_INTPROCNEAR;读入整型数

;入口参数:

;出口参数为:

AL(有无错误标志,0为有,1为无)

MOVCL,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1