华工微机实验报告实验四子程序的调用文档格式.docx
《华工微机实验报告实验四子程序的调用文档格式.docx》由会员分享,可在线阅读,更多相关《华工微机实验报告实验四子程序的调用文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
按1键完成字符串小写字母变大写字母
用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)
1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
按3键完成排序(二选一)
1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
按4键显示时间
首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:
×
(时):
(分):
(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
四、流程图与程序代码
流程图:
流程图1—主菜单
流程图2--过程一流程图3—过程二
流程图4—过程三流程图5—过程四
代码:
STACKSEGMENTSTACK'
STACK'
DW100DUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
ORG3500H
;
数据段主要保存一些字符串以及定义一些字符串变量
COPYRIGHTDB'
-------ALLPROGRAMEDBYMRZHU--------'
0DH,0AH,'
$'
COMMONDB'
Pleaseinput1to5toselectafunction'
S1DB'
1.Inputastring,thenconvertthesmallletterstobigletters'
S2DB'
2.Findthebiggest-ASCII-codecharacter'
S3DB'
3.SortthecharacterbyASCIIcodebydecreasingorder'
S4DB'
4.displaythetickingtime'
S5DB'
5.Exittheprogram'
CR_LFDB0DH,0DH,'
IN_MAINDB'
Nowinputanumber(1-5):
'
'
MAIN_ERRORDB0DH,0AH,'
ERROR:
Pleaseinputacorrectnumber;
'
PRO_1_S1DB0DH,0AH,'
Nowinputastring(numberorletter):
PRO_1_S2DB0DH,0AH,'
Thestringhasbeenchangedto:
PRO_2_S1DB0DH,0AH,'
Nowinputastring(anysymbol):
PRO_2_S2DB0DH,0AH,'
Thebiggest-ASCII-codesymbolis:
PRO_3_S1DB0DH,0AH,'
PRO_3_S2DB0DH,0AH,'
Thestringhasbeensorted:
PRO_4_S1DB0DH,0AH,'
Settingtime(XX:
XX:
XX<
Hours:
Minutes:
Seconds>
):
PRO_4_S2DB0DH,0AH,'
SETTINGDONE!
PRO_4_S3DB0DH,0AH,'
TIME_NOW(Pressanykeytostop):
PRO_4_ERROR_LENDB0DH,0AH,'
!
ERROR(Lengthoverflow):
Pleaseinputinthecorrectformat!
PRO_4_ERROR_NOT_NUMDB0DH,0AH,'
ERROR(Notnumberornot"
:
"
PRO_4_ERROR_NUM_OVERDB0DH,0AH,'
ERROR(Numberoverflow):
Pleaseinputthecorrectnumber!
PRO_END_SDB0DH,0AH,'
PressanykeytocontinueexceptESC'
STRING1DB50
DB?
DB50DUP(?
STRING2DB50
DB?
DB50DUP(?
STRING3DB50
STRING4DB50
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
MOVDX,OFFSETS1
MOVDX,OFFSETS2
MOVDX,OFFSETS3
MOVDX,OFFSETS4
MOVDX,OFFSETS5
MOVDX,OFFSETCR_LF
IN_A_NUM:
MOVDX,OFFSETIN_MAIN
INT21H;
显示主菜单信息
MOVAH,01H
INT21H;
输入一个字符
CMPAL,'
1'
JEP1
2'
JEP2
3'
JEP3
4'
JEP4
5'
JEP5_EXIT;
判断输入的字符并跳转
MOVDX,OFFSETMAIN_ERROR
INT21H
JMPIN_A_NUM;
其他字符时输出提醒并跳转到重新输入
P1:
CALLPRO_1
换行
JMPMENU
P2:
CALLPRO_2
P3:
CALLPRO_3
P4:
CALLPRO_4
P5_EXIT:
RET;
返回DOS
MAINENDP;
MAIN段结束
PRO_1PROCNEAR;
过程一
PRO_1_START:
MOVDX,OFFSETPRO_1_S1
INT21H;
输出提示语
MOVDX,OFFSETSTRING1
MOVAH,0AH
把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
MOVSTRING1[BX],'
MOVDX,OFFSETPRO_1_S2
输出提示的句子
MOVDX,OFFSETSTRING1[2]
输出改变后的字符串
MOVDX,OFFSETPRO_END_S;
输出通用结束提示语
输入一个字符,实现跳转的判断
CMPAL,1BH
JENEXT1_2
JMPPRO_1_START;
如果是ESC则不跳转到子程序开头,是则跳转
NEXT1_2:
RET
PRO_1ENDP
PRO_2PROCNEAR;
过程二
PRO_2_START:
MOVDX,OFFSETPRO_2_S1;
MOVDX,OFFSETSTRING2;
把STRING2的字符串首地址给DX,接收一个字符串
MOVCL,STRING2[1]
MOVAL,0
LOOP2:
CMPAL,STRING2[BX]
JAENEXT2_1;
AL大于等于字符ASCII值时跳转
MOVAL,STRING2[BX]
NEXT2_1:
LOOPLOOP2
MOVSI,BX;
把BX的值放到SI,也就是指向回车的位置
MOVBL,AL;
把AL放到BL,防止中断指令时