华工微机实验报告-实验四-子程序的调用_第1页
华工微机实验报告-实验四-子程序的调用_第2页
华工微机实验报告-实验四-子程序的调用_第3页
华工微机实验报告-实验四-子程序的调用_第4页
华工微机实验报告-实验四-子程序的调用_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-.z.实验报告课程名称微型计算机原理及其应用实验项目子程序设计学生姓名朱轲信学生**8专业/班级信息工程冯秉铨实验班实验成绩电子与信息学院实验中心制二〇一七年版-.z.预习报告实验目的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(")TOPLABELWORDSTACKENDSDATASEGMENTORG3500H;数据段主要保存一些字符串以及定义一些字符串变量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.E*ittheprogram',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(**:**:**<Hours:Minutes: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,'Pressanykeytocontinuee*ceptESC',0DH,0AH,'$'STRING1DB50 DB" DB50DUP(")STRING2DB50 DB" DB50DUP(")STRING3DB50 DB" DB50DUP(")STRING4DB50 DB" DB50DUP(")DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVA*,STACKMOVSS,A*MOVSP,OFFSETTOPPUSHDSSUBA*,A*PUSHA* ;初始化堆栈MOVA*,DATAMOVDS,A*MENU:MOVD*,OFFSETCOPYRIGHTMOVAH,9INT21HMOVD*,OFFSETCOMMONMOVAH,9INT21HMOVD*,OFFSETS1MOVAH,9INT21HMOVD*,OFFSETS2MOVAH,9INT21HMOVD*,OFFSETS3MOVAH,9INT21HMOVD*,OFFSETS4MOVAH,9INT21HMOVD*,OFFSETS5MOVAH,9INT21HMOVD*,OFFSETCR_LFMOVAH,9INT21HIN_A_NUM:MOVD*,OFFSETIN_MAINMOVAH,9INT21H;显示主菜单信息MOVAH,01HINT21H ;输入一个字符CMPAL,'1' JEP1CMPAL,'2'JEP2CMPAL,'3'JEP3CMPAL,'4'JEP4CMPAL,'5'JEP5_E*IT ;判断输入的字符并跳转MOVD*,OFFSETMAIN_ERRORMOVAH,9INT21HJMPIN_A_NUM;其他字符时输出提醒并跳转到重新输入P1:CALLPRO_1MOVD*,OFFSETCR_LFMOVAH,9INT21H ;换行JMPMENUP2:CALLPRO_2MOVD*,OFFSETCR_LFMOVAH,9INT21H ;换行JMPMENUP3:CALLPRO_3MOVD*,OFFSETCR_LFMOVAH,9INT21H;换行JMPMENUP4:CALLPRO_4MOVD*,OFFSETCR_LFMOVAH,9INT21H;换行JMPMENUP5_E*IT:RET ;返回DOSMAINENDP ;MAIN段结束PRO_1PROCNEAR ;过程一PRO_1_START:MOVD*,OFFSETPRO_1_S1 MOVAH,9INT21H ;输出提示语MOVD*,OFFSETSTRING1MOVAH,0AHINT21H ;把STRING1的字符串首地址给D*,输入一个字符串MOVC*,0MOVCL,STRING1[1]MOVB*,1LOOP1: ;循环,将小写字母改为大写INCB*MOVAL,STRING1[B*]CMPAL,61HJBNE*T1CMPAL,7AHJANE*T1SUBAL,20HMOVSTRING1[B*],ALNE*T1:LOOPLOOP1INCB*MOVSTRING1[B*],'$'MOVD*,OFFSETPRO_1_S2MOVAH,9INT21H ;输出提示的句子MOVD*,OFFSETSTRING1[2]MOVAH,9INT21H ;输出改变后的字符串MOVD*,OFFSETCR_LFMOVAH,9INT21H ;换行MOVD*,OFFSETPRO_END_S ;输出通用结束提示语MOVAH,9INT21H MOVAH,01HINT21H ;输入一个字符,实现跳转的判断CMPAL,1BHJENE*T1_2JMPPRO_1_START ;如果是ESC则不跳转到子程序开头,是则跳转NE*T1_2:RETPRO_1ENDPPRO_2PROCNEAR ;过程二PRO_2_START:MOVD*,OFFSETPRO_2_S1 ;输出提示语MOVAH,9INT21HMOVD*,OFFSETSTRING2 ;把STRING2的字符串首地址给D*,接收一个字符串MOVAH,0AHINT21HMOVC*,0MOVCL,STRING2[1]MOVB*,1MOVAL,0LOOP2:INCB*CMPAL,STRING2[B*]JAENE*T2_1 ;AL大于等于字符ASCII值时跳转MOVAL,STRING2[B*]NE*T2_1:LOOPLOOP2INCB*MOVSI,B* ;把B*的值放到SI,也就是指向回车的位置MOVBL,AL ;把AL放到BL,防止中断指令时破坏ALMOVD*,OFFSETPRO_2_S2 MOVAH,9INT21H ;输出提示语MOVDL,BLMOVAH,2INT21H ;显示最大ASCII的字符MOVD*,OFFSETPRO_END_S ;输出通用结束提示语MOVAH,9INT21H MOVAH,01HINT21H ;输入一个字符,实现跳转的判断CMPAL,1BHJENE*T2_2JMPPRO_2_START ;如果是ESC则不跳转到子程序开头,是则跳转NE*T2_2:RETPRO_2ENDPPRO_3PROCNEAR ;过程三PRO_3_START: MOVD*,OFFSETPRO_3_S1 ;输出提示语MOVAH,9INT21HMOVD*,OFFSETSTRING3 ;把STRING3的字符串首地址给D*,接收一个字符串MOVAH,0AHINT21HMOVC*,0MOVCL,STRING3[1] ;把字符串里字符个数赋给C*DECC* ;实际比较的次数为C*-1CMPC*,0JENO_SORTEDLOOP3_1: ;下面的LOOP3_1是冒泡排序MOVB*,C* ;把C*的值存到B*,防止内层循环破坏C*MOVSI,2LOOP3_2:MOVAL,STRING3[SI]CMPAL,STRING3[SI+1]JAENE*T3_1*CHGAL,STRING3[SI+1]*CHGAL,STRING3[SI]NE*T3_1:INCSILOOPLOOP3_2MOVC*,B*LOOPLOOP3_1NO_SORTED:MOVB*,0MOVBL,STRING3[1];ADDBL,2MOVSTRING3[B*],'$' ;将$存入改变后的字符串以作结束标志MOVD*,OFFSETPRO_3_S2 ;输出提示语MOVAH,9INT21HMOVD*,OFFSETSTRING3[2] ;输出改变后的字符串MOVAH,9INT21HMOVD*,OFFSETPRO_END_S ;输出通用结束提示语MOVAH,9INT21H MOVAH,01HINT21H ;输入一个字符,实现跳转的判断CMPAL,1BHJENE*T3_2JMPPRO_3_START ;如果是ESC则不跳转到子程序开头,是则跳转NE*T3_2:RETPRO_3ENDPPRO_4PROCNEAR ;过程四PRO_4_START:MOVD*,OFFSETPRO_4_S1 ;输出提示语MOVAH,9INT21HMOVD*,OFFSETSTRING4 ;把STRING4的字符串首地址给D*,接收一个字符串MOVAH,0AHINT21HMOVB*,0MOVBL,STRING4[1];ADDBL,2MOVSTRING4[B*],'$' ;将$存入改变后的字符串以作结束标志CALLPRO_4_IFERROR ;调用判断子程序来判断是否输入了正确的格式CMPB*,0JEPRO_4_ERROR_1 ;B*=0则为长度溢出CMPB*,1JEPRO_4_ERROR_2 ;B*=1则输入的字符有误JMPPRO_4_NO_ERRORPRO_4_ERROR_1:MOVD*,OFFSETPRO_4_ERROR_LEN ;输出提示语MOVAH,9INT21HJMPPRO_4_STARTPRO_4_ERROR_2:MOVD*,OFFSETPRO_4_ERROR_NOT_NUM ;输出提示语MOVAH,9INT21HJMPPRO_4_STARTPRO_4_NO_ERROR: ;下面各段把时间的ASCII转为无符号数,并判断MOVBH,STRING4[2] ;对时的处理MOVBL,STRING4[3]SUBBH,30HSUBBL,30HMOVAL,BHMOVDL,10MULDLMOVBH,AL ;BH乘以10ADDBH,BL ;BH+BL->BH将ASCII转换成无符号数CMPBH,0JBPRO_4_EOOOR_NUM_HRCMPBH,24JAPRO_4_EOOOR_NUM_HRJMPPRO_4_NOERROR_NUM_HRPRO_4_EOOOR_NUM_HR:MOVD*,OFFSETPRO_4_ERROR_NUM_OVER ;输出提示语MOVAH,9INT21HJMPPRO_4_STARTPRO_4_NOERROR_NUM_HR:MOVCH,BH ;把BH值放入CH,即设置时的入口参数MOVBH,STRING4[5] ;对分的处理MOVBL,STRING4[6]SUBBH,30HSUBBL,30HMOVAL,BHMOVDL,10MULDLMOVBH,AL ;BH乘以10ADDBH,BL ;BH+BL->BH将ASCII转换成无符号数CMPBH,0JBPRO_4_EOOOR_NUM_MINCMPBH,60JAPRO_4_EOOOR_NUM_MINJMPPRO_4_NOERROR_NUM_MINPRO_4_EOOOR_NUM_MIN:MOVD*,OFFSETPRO_4_ERROR_NUM_OVER ;输出提示语MOVAH,9INT21HJMPPRO_4_STARTPRO_4_NOERROR_NUM_MIN:MOVCL,BH ;把BH值放入CL,即设置分的入口参数MOVBH,STRING4[8] ;对秒的处理MOVBL,STRING4[9]SUBBH,30HSUBBL,30HMOVAL,BHMOVDL,10MULDLMOVBH,AL ;BH乘以10ADDBH,BL ;BH+BL->BH将ASCII转换成无符号数CMPBH,0JBPRO_4_EOOOR_NUM_SECCMPBH,60JAPRO_4_EOOOR_NUM_SECJMPPRO_4_NOERROR_NUM_SECPRO_4_EOOOR_NUM_SEC:MOVD*,OFFSETPRO_4_ERROR_NUM_OVER ;输出提示语MOVAH,9INT21HJMPPRO_4_STARTPRO_4_NOERROR_NUM_SEC:MOVDH,BH ;把BH值放入DH,即设置秒的入口参数MOVDL,0 ;初始化1/100秒MOVAH,2DHINT21H ;设置时间MOVD*,OFFSETPRO_4_S2 ;输出提示语MOVAH,9INT21HMOVD*,OFFSETPRO_4_S3 ;输出提示语MOVAH,9INT21HLOOP4_1: ;循环显示时间MOVAH,2CHINT21H ;获取系统时间,CH:CL:DH:DLH:M:S:1/100STime_set: ;十六进制转ASCII码MOVA*,0 ;时MOVAL,CHMOVBL,10DIVBLADDAL,30H ;时的高位ADDAH,30H ;时的低位MOVSTRING4[2],ALMOVSTRING4[3],AHMOVA*,0 ;分MOVAL,CLMOVBL,10DIVBLADDAL,30H ;高位ADDAH,30H ;低位MOVSTRING4[5],ALMOVSTRING4[6],AHMOVA*,0 ;秒MOVAL,DHMOVBL,10DIVBLADDAL,30H ;高位ADDAH,30H ;低位MOVSTRING4[8],ALMOVSTRING4[9],AHMOVD*,OFFSETSTRING4[2]MOVAH,9INT21HMOVDL,0DH ;换行,便于下次显示MOVAH,02HINT21HMOVAH,0BHINT21HCMPAL,0JELOOP4_1MOVD*,OFFSETPRO_END_S ;输出通用结束提示语MOVAH,9INT21H MOVAH,01HINT21H ;输入一个字符,实现跳转的判断CMPAL,1BHJENE*T4_10JMPPRO_4_START ;如果是ESC则不跳转到子程序开头,是则跳转NE*T4_10:RETPRO_4ENDPPRO_4_IFERRORPROCNEARMOVB*,2CMPSTRING4[1],8JZNE*T4_1MOVB*,0 ;用B*保存错误类型,并返回RETNE*T4_1:CMPSTRING4[2],30H ;检查第一个数字JBNE*T4_2_NO_NUMCMPSTRING4[2],39HJANE*T4_2_NO_NUMJMPNE*T4_2NE*T4_2_NO_NUM:MOVB*,1RETNE*T4_2:CMPSTRING4[3],30H ;检查第二个数字JBNE*T4_3_NO_NUMCMPSTRING4[3],39HJANE*T4_3_NO_NUMJMPNE*T4_3NE*T4_3_NO_NUM:MOVB*,1RETNE*T4_3:CMPSTRING4[4],3AH ;检查引号JENE*T4_4MOVB*,1RETNE*T4_4:CMPSTRING4[5],30H ;检查第三个数字JBNE*T4_5_NO_NUMCMPSTRING4[5],39HJANE*T4_5_NO_NUMJMPNE*T4_5NE*T4_5_NO_NUM:MOVB*,1RETNE*T4_5:CMPSTRING4[6],30H ;检查第四个数字JBNE*T4_6_NO_NUMCMPSTRING4[6],39HJANE*T4_6_NO_NUMJMPNE*T4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论