华工微机实验报告实验四子程序的调用.docx
《华工微机实验报告实验四子程序的调用.docx》由会员分享,可在线阅读,更多相关《华工微机实验报告实验四子程序的调用.docx(24页珍藏版)》请在冰豆网上搜索。
华工微机实验报告实验四子程序的调用
实验报告
课程名称
微型计算机原理及其应用
实验项目
子程序设计
学生姓名
朱轲信
学生学号
8
专业/班级
信息工程冯秉铨实验班
实验成绩
电子与信息学院实验中心制
二〇一七年版
预习报告
一、实验目的
1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二、实验设备
微机一台、TDS-MD微机一台
三、实验内容及步骤
程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:
按1键完成字符串小写字母变大写字母
用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)
1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)
1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间
首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:
××(时):
××(分):
××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
四、流程图与程序代码
流程图:
流程图1—主菜单
流程图2--过程一流程图3—过程二
流程图4—过程三流程图5—过程四
代码:
STACKSEGMENTSTACK'STACK'
DW100DUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
ORG3500H
;数据段主要保存一些字符串以及定义一些字符串变量
COPYRIGHTDB'-------ALLPROGRAMEDBYMRZHU--------',0DH,0AH,'$'
COMMONDB'Pleaseinput1to5toselectafunction',0DH,0AH,'$'
S1DB'1.Inputastring,thenconvertthesmallletterstobigletters',0DH,0AH,'$'
S2DB'2.Findthebiggest-ASCII-codecharacter',0DH,0AH,'$'
S3DB'3.SortthecharacterbyASCIIcodebydecreasingorder',0DH,0AH,'$'
S4DB'4.displaythetickingtime',0DH,0AH,'$'
S5DB'5.Exittheprogram',0DH,0AH,'$'
CR_LFDB0DH,0DH,'$'
IN_MAINDB'Nowinputanumber(1-5):
','$'
MAIN_ERRORDB0DH,0AH,'ERROR:
Pleaseinputacorrectnumber;',0DH,0AH,'$'
PRO_1_S1DB0DH,0AH,'Nowinputastring(numberorletter):
',0DH,0AH,'$'
PRO_1_S2DB0DH,0AH,'Thestringhasbeenchangedto:
','$'
PRO_2_S1DB0DH,0AH,'Nowinputastring(anysymbol):
',0DH,0AH,'$'
PRO_2_S2DB0DH,0AH,'Thebiggest-ASCII-codesymbolis:
','$'
PRO_3_S1DB0DH,0AH,'Nowinputastring(anysymbol):
',0DH,0AH,'$'
PRO_3_S2DB0DH,0AH,'Thestringhasbeensorted:
','$'
PRO_4_S1DB0DH,0AH,'Settingtime(XX:
XX:
XXMinutes:
Seconds>):
',0DH,0AH,'$'
PRO_4_S2DB0DH,0AH,'SETTINGDONE!
',0DH,0AH,'$'
PRO_4_S3DB0DH,0AH,'TIME_NOW(Pressanykeytostop):
',0DH,0AH,'$'
PRO_4_ERROR_LENDB0DH,0AH,'!
!
ERROR(Lengthoverflow):
Pleaseinputinthecorrectformat!
',0DH,0AH,'$'
PRO_4_ERROR_NOT_NUMDB0DH,0AH,'!
!
ERROR(Notnumberornot":
"):
Pleaseinputinthecorrectformat!
',0DH,0AH,'$'
PRO_4_ERROR_NUM_OVERDB0DH,0AH,'!
!
ERROR(Numberoverflow):
Pleaseinputthecorrectnumber!
',0DH,0AH,'$'
PRO_END_SDB0DH,0AH,'PressanykeytocontinueexceptESC',0DH,0AH,'$'
STRING1DB50
DB?
DB50DUP(?
)
STRING2DB50
DB?
DB50DUP(?
)
STRING3DB50
DB?
DB50DUP(?
)
STRING4DB50
DB?
DB50DUP(?
)
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
MOVSP,OFFSETTOP
PUSHDS
SUBAX,AX
PUSHAX;初始化堆栈
MOVAX,DATA
MOVDS,AX
MENU:
MOVDX,OFFSETCOPYRIGHT
MOVAH,9
INT21H
MOVDX,OFFSETCOMMON
MOVAH,9
INT21H
MOVDX,OFFSETS1
MOVAH,9
INT21H
MOVDX,OFFSETS2
MOVAH,9
INT21H
MOVDX,OFFSETS3
MOVAH,9
INT21H
MOVDX,OFFSETS4
MOVAH,9
INT21H
MOVDX,OFFSETS5
MOVAH,9
INT21H
MOVDX,OFFSETCR_LF
MOVAH,9
INT21H
IN_A_NUM:
MOVDX,OFFSETIN_MAIN
MOVAH,9
INT21H;显示主菜单信息
MOVAH,01H
INT21H;输入一个字符
CMPAL,'1'
JEP1
CMPAL,'2'
JEP2
CMPAL,'3'
JEP3
CMPAL,'4'
JEP4
CMPAL,'5'
JEP5_EXIT;判断输入的字符并跳转
MOVDX,OFFSETMAIN_ERROR
MOVAH,9
INT21H
JMPIN_A_NUM;其他字符时输出提醒并跳转到重新输入
P1:
CALLPRO_1
MOVDX,OFFSETCR_LF
MOVAH,9
INT21H;换行
JMPMENU
P2:
CALLPRO_2
MOVDX,OFFSETCR_LF
MOVAH,9
INT21H;换行
JMPMENU
P3:
CALLPRO_3
MOVDX,OFFSETCR_LF
MOVAH,9
INT21H;换行
JMPMENU
P4:
CALLPRO_4
MOVDX,OFFSETCR_LF
MOVAH,9
INT21H;换行
JMPMENU
P5_EXIT:
RET;返回DOS
MAINENDP;MAIN段结束
PRO_1PROCNEAR;过程一
PRO_1_START:
MOVDX,OFFSETPRO_1_S1
MOVAH,9
INT21H;输出提示语
MOVDX,OFFSETSTRING1
MOVAH,0AH
INT21H;把STRING1的字符串首地址给DX,输入一个字符串
MOVCX,0
MOVCL,STRING1[1]
MOVBX,1
LOOP1:
;循环,将小写字母改为大写
INCBX
MOVAL,STRING1[BX]
CMPAL,61H
JBNEXT1
CMPAL,7AH
JANEXT1
SUBAL,20H
MOVSTRING1[BX],AL
NEXT1:
LOOPLOOP1
INCBX
MOVSTRING1[BX],'$'
MOVDX,OFFSETPRO_1_S2
MOVAH,9
INT21H;输出提示的句子
MOVDX,OFFSETSTRING1[2]
MOVAH,9
INT21H;输出改变后的字符串
MOVDX,OFFSETCR_LF
MOVAH,9
INT21H;换行
MOVDX,OFFSETPRO_END_S;输出通用结束提示语
MOVAH,9
INT21H
MOVAH,01H
INT21H;输入一个字符,实现跳转的判断
CMPAL,1BH
JENEXT1_2
JMPPRO_1_START;如果是ESC则不跳转到子程序开头,是则跳转
NEXT1_2:
RET
PRO_1ENDP
PRO_2PROCNEAR;过程二
PRO_2_START:
MOVDX,OFFSETPRO_2_S1;输出提示语
MOVAH,9
INT21H
MOVDX,OFFSETSTRING2;把STRING2的字符串首地址给DX,接收一个字符串
MOVAH,0AH
INT21H
MOVCX,0
MOVCL,STRING2[1]
MOVBX,1
MOVAL,0
LOOP2:
INCBX
CMPAL,STRING2[BX]
JAENEXT2_1;AL大于等于字符ASCII值时跳转
MOVAL,STRING2[BX]
NEXT2_1:
LOOPLOOP2
INCBX
MOVSI,BX;把BX的值放到SI,也就是指向回车的位置
MOVBL,AL;把AL放到BL,防止中断指令时