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

下载本文档

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

文档简介

1、 实 验 报 告课程名称微型计算机原理及其应用实验项目子程序设计学生姓名朱轲信学生学号201530281598专业/班级信息工程冯秉铨实验班实验成绩电子与信息学院实验中心制二一七年版1 / 26预习报告一、 实验目的、学习子程序的定义和调用方法。、掌握子程序、子程序嵌套的结构。、掌握子程序的程序设计、编制及调试方法。二、 实验设备微机一台、TDS-MD微机一台三、 实验内容及步骤程序采用菜单式选择,可接收用户输入的命令(15),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字09组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,

2、其它字符不变,并在屏幕上显示。用户按任一键,重做,按ESC键,返回主菜单。按2键完成找最大值(二选一)、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。按3键完成排序(二选一)、接收用户输入的可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示。、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。按4键显示时间首

3、先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。用户按任一键,重新对时,按ESC键,返回主菜单。按5键,结束程序运行,返回系统提示符。四、 流程图与程序代码流程图:流程图1主菜单 流程图2-过程一 流程图3过程二 流程图4过程三 流程图5过程四代码:STACK SEGMENT STACK 'STACK'DW 100 DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTORG 350

4、0H;数据段主要保存一些字符串以及定义一些字符串变量COPYRIGHT DB '-ALL PROGRAMED BY MRZHU-',0DH,0AH,'$'COMMON DB 'Please input 1 to 5 to select a function',0DH,0AH,'$'S1 DB '1.Input a string,then convert the small letters to big letters',0DH,0AH,'$'S2 DB '2.Find the biggest

5、-ASCII-code character',0DH,0AH,'$'S3 DB '3.Sort the character by ASCII code by decreasing order',0DH,0AH,'$'S4 DB '4.display the ticking time',0DH,0AH,'$'S5 DB '5.Exit the program',0DH,0AH,'$'CR_LF DB 0DH,0DH,'$'IN_MAIN DB 'Now

6、input a number(1-5): ','$'MAIN_ERROR DB 0DH,0AH,'ERROR:Please input a correct number;',0DH,0AH,'$'PRO_1_S1 DB 0DH,0AH,'Now input a string(number or letter):',0DH,0AH,'$'PRO_1_S2 DB 0DH,0AH,'The string has been changed to: ','$'PRO_2_S1 DB 0

7、DH,0AH,'Now input a string(any symbol): ',0DH,0AH,'$'PRO_2_S2 DB 0DH,0AH,'The biggest-ASCII-code symbol is: ','$'PRO_3_S1 DB 0DH,0AH,'Now input a string(any symbol): ',0DH,0AH,'$'PRO_3_S2 DB 0DH,0AH,'The string has been sorted: ','$'PRO

8、_4_S1 DB 0DH,0AH,'Setting time (XX:XX:XX <Hours:Minutes:Seconds>): ',0DH,0AH,'$'PRO_4_S2 DB 0DH,0AH,'SETTING DONE! ',0DH,0AH,'$'PRO_4_S3 DB 0DH,0AH,'TIME_NOW(Press any key to stop): ',0DH,0AH,'$'PRO_4_ERROR_LEN DB 0DH,0AH,'!ERROR(Length overf

9、low): Please input in the correct format!',0DH,0AH,'$'PRO_4_ERROR_NOT_NUM DB 0DH,0AH,'!ERROR(Not number or not ":"): Please input in the correct format!',0DH,0AH,'$'PRO_4_ERROR_NUM_OVER DB 0DH,0AH,'!ERROR(Number overflow): Please input the correct number!

10、9;,0DH,0AH,'$'PRO_END_S DB 0DH,0AH,'Press any key to continue except ESC',0DH,0AH,'$'STRING1 DB 50 DB ? DB 50 DUP(?)STRING2 DB 50DB ?DB 50 DUP(?)STRING3 DB 50DB ?DB 50 DUP(?)STRING4 DB 50DB ?DB 50 DUP(?)DATA ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACKSTART:M

11、OV AX,STACKMOV SS,AXMOV SP,OFFSET TOPPUSH DSSUB AX,AXPUSH AX;初始化堆栈MOV AX,DATAMOV DS,AXMENU:MOV DX,OFFSET COPYRIGHTMOV AH,9INT 21HMOV DX,OFFSET COMMONMOV AH,9INT 21HMOV DX,OFFSET S1MOV AH,9INT 21HMOV DX,OFFSET S2MOV AH,9INT 21HMOV DX,OFFSET S3MOV AH,9INT 21HMOV DX,OFFSET S4MOV AH,9INT 21HMOV DX,OFFSE

12、T S5MOV AH,9INT 21HMOV DX,OFFSET CR_LFMOV AH,9INT 21HIN_A_NUM:MOV DX,OFFSET IN_MAINMOV AH,9INT 21H ;显示主菜单信息MOV AH,01HINT 21H ;输入一个字符CMP AL,'1' JE P1CMP AL,'2'JE P2CMP AL,'3'JE P3CMP AL,'4'JE P4CMP AL,'5'JE P5_EXIT ;判断输入的字符并跳转MOV DX,OFFSET MAIN_ERROR MOV AH,9IN

13、T 21H JMP IN_A_NUM ;其他字符时输出提醒并跳转到重新输入P1:CALL PRO_1MOV DX,OFFSET CR_LFMOV AH,9INT 21H ;换行JMP MENUP2:CALL PRO_2MOV DX,OFFSET CR_LFMOV AH,9INT 21H ;换行JMP MENUP3:CALL PRO_3MOV DX,OFFSET CR_LFMOV AH,9INT 21H ;换行JMP MENUP4:CALL PRO_4MOV DX,OFFSET CR_LFMOV AH,9INT 21H ;换行JMP MENUP5_EXIT:RET;返回DOSMAIN ENDP;

14、MAIN段结束PRO_1 PROC NEAR;过程一PRO_1_START:MOV DX,OFFSET PRO_1_S1MOV AH,9INT 21H;输出提示语MOV DX,OFFSET STRING1MOV AH,0AHINT 21H;把STRING1的字符串首地址给DX,输入一个字符串MOV CX,0MOV CL,STRING11MOV BX,1LOOP1:;循环,将小写字母改为大写INC BXMOV AL,STRING1BXCMP AL,61HJB NEXT1CMP AL,7AHJA NEXT1SUB AL,20HMOV STRING1BX,ALNEXT1:LOOP LOOP1INC

15、BXMOV STRING1BX,'$'MOV DX,OFFSET PRO_1_S2MOV AH,9INT 21H;输出提示的句子MOV DX,OFFSET STRING12MOV AH,9INT 21H;输出改变后的字符串MOV DX,OFFSET CR_LFMOV AH,9INT 21H ;换行MOV DX,OFFSET PRO_END_S;输出通用结束提示语MOV AH,9INT 21HMOV AH,01HINT 21H;输入一个字符,实现跳转的判断CMP AL,1BHJE NEXT1_2JMP PRO_1_START;如果是ESC则不跳转到子程序开头,是则跳转NEXT1_

16、2:RETPRO_1 ENDPPRO_2 PROC NEAR;过程二PRO_2_START:MOV DX,OFFSET PRO_2_S1;输出提示语MOV AH,9INT 21HMOV DX,OFFSET STRING2;把STRING2的字符串首地址给DX,接收一个字符串MOV AH,0AHINT 21HMOV CX,0MOV CL,STRING21MOV BX,1MOV AL,0LOOP2:INC BXCMP AL,STRING2BXJAE NEXT2_1;AL大于等于字符ASCII值时跳转MOV AL,STRING2BXNEXT2_1:LOOP LOOP2INC BXMOV SI,BX;

17、把BX的值放到SI,也就是指向回车的位置MOV BL,AL ;把AL放到BL,防止中断指令时破坏ALMOV DX,OFFSET PRO_2_S2MOV AH,9INT 21H;输出提示语MOV DL,BLMOV AH,2INT 21H;显示最大ASCII的字符MOV DX,OFFSET PRO_END_S;输出通用结束提示语MOV AH,9INT 21HMOV AH,01HINT 21H;输入一个字符,实现跳转的判断CMP AL,1BHJE NEXT2_2JMP PRO_2_START;如果是ESC则不跳转到子程序开头,是则跳转NEXT2_2:RETPRO_2 ENDPPRO_3 PROC N

18、EAR;过程三PRO_3_START: MOV DX,OFFSET PRO_3_S1;输出提示语MOV AH,9INT 21HMOV DX,OFFSET STRING3;把STRING3的字符串首地址给DX,接收一个字符串MOV AH,0AHINT 21HMOV CX,0MOV CL,STRING31 ;把字符串里字符个数赋给CXDEC CX ;实际比较的次数为CX-1CMP CX,0JE NO_SORTEDLOOP3_1:;下面的LOOP3_1是冒泡排序MOV BX,CX ;把CX的值存到BX,防止内层循环破坏CXMOV SI,2LOOP3_2:MOV AL,STRING3SICMP AL,

19、STRING3SI+1JAE NEXT3_1XCHG AL,STRING3SI+1XCHG AL,STRING3SINEXT3_1:INC SILOOP LOOP3_2MOV CX,BXLOOP LOOP3_1NO_SORTED:MOV BX,0MOV BL,STRING31;ADD BL,2MOV STRING3BX,'$'将$存入改变后的字符串以作结束标志MOV DX,OFFSET PRO_3_S2;输出提示语MOV AH,9INT 21HMOV DX,OFFSET STRING32;输出改变后的字符串MOV AH,9INT 21HMOV DX,OFFSET PRO_END

20、_S;输出通用结束提示语MOV AH,9INT 21HMOV AH,01HINT 21H;输入一个字符,实现跳转的判断CMP AL,1BHJE NEXT3_2JMP PRO_3_START;如果是ESC则不跳转到子程序开头,是则跳转NEXT3_2:RETPRO_3 ENDPPRO_4 PROC NEAR ;过程四PRO_4_START:MOV DX,OFFSET PRO_4_S1;输出提示语MOV AH,9INT 21HMOV DX,OFFSET STRING4;把STRING4的字符串首地址给DX,接收一个字符串MOV AH,0AHINT 21HMOV BX,0MOV BL,STRING41

21、;ADD BL,2MOV STRING4BX,'$'将$存入改变后的字符串以作结束标志CALL PRO_4_IFERROR ;调用判断子程序来判断是否输入了正确的格式CMP BX,0JE PRO_4_ERROR_1 ;BX=0则为长度溢出CMP BX,1JE PRO_4_ERROR_2 ;BX=1则输入的字符有误JMP PRO_4_NO_ERRORPRO_4_ERROR_1:MOV DX,OFFSET PRO_4_ERROR_LEN;输出提示语MOV AH,9INT 21HJMP PRO_4_STARTPRO_4_ERROR_2:MOV DX,OFFSET PRO_4_ERRO

22、R_NOT_NUM;输出提示语MOV AH,9INT 21HJMP PRO_4_STARTPRO_4_NO_ERROR:;下面各段把时间的ASCII转为无符号数,并判断MOV BH,STRING42 ;对时的处理MOV BL,STRING43SUB BH,30HSUB BL,30HMOV AL,BHMOV DL,10MUL DLMOV BH,AL ;BH乘以10ADD BH,BL ;BH+BL->BH将ASCII转换成无符号数CMP BH,0JB PRO_4_EOOOR_NUM_HRCMP BH,24JA PRO_4_EOOOR_NUM_HRJMP PRO_4_NOERROR_NUM_H

23、RPRO_4_EOOOR_NUM_HR:MOV DX,OFFSET PRO_4_ERROR_NUM_OVER;输出提示语MOV AH,9INT 21HJMP PRO_4_STARTPRO_4_NOERROR_NUM_HR:MOV CH,BH ;把BH值放入CH,即设置时的入口参数MOV BH,STRING45 ;对分的处理MOV BL,STRING46SUB BH,30HSUB BL,30HMOV AL,BHMOV DL,10MUL DLMOV BH,AL ;BH乘以10ADD BH,BL ;BH+BL->BH将ASCII转换成无符号数CMP BH,0JB PRO_4_EOOOR_NUM

24、_MINCMP BH,60JA PRO_4_EOOOR_NUM_MINJMP PRO_4_NOERROR_NUM_MINPRO_4_EOOOR_NUM_MIN:MOV DX,OFFSET PRO_4_ERROR_NUM_OVER;输出提示语MOV AH,9INT 21HJMP PRO_4_STARTPRO_4_NOERROR_NUM_MIN:MOV CL,BH ;把BH值放入CL,即设置分的入口参数MOV BH,STRING48 ;对秒的处理MOV BL,STRING49SUB BH,30HSUB BL,30HMOV AL,BHMOV DL,10MUL DLMOV BH,AL ;BH乘以10A

25、DD BH,BL ;BH+BL->BH将ASCII转换成无符号数CMP BH,0JB PRO_4_EOOOR_NUM_SECCMP BH,60JA PRO_4_EOOOR_NUM_SECJMP PRO_4_NOERROR_NUM_SECPRO_4_EOOOR_NUM_SEC:MOV DX,OFFSET PRO_4_ERROR_NUM_OVER;输出提示语MOV AH,9INT 21HJMP PRO_4_STARTPRO_4_NOERROR_NUM_SEC:MOV DH,BH ;把BH值放入DH,即设置秒的入口参数MOV DL,0 ;初始化1/100秒MOV AH,2DHINT 21H ;

26、设置时间MOV DX,OFFSET PRO_4_S2;输出提示语MOV AH,9INT 21HMOV DX,OFFSET PRO_4_S3;输出提示语MOV AH,9INT 21HLOOP4_1: ;循环显示时间MOV AH,2CHINT 21H ;获取系统时间,CH:CL:DH:DL H:M:S:1/100STime_set: ;十六进制转ASCII码MOV AX,0 ;时MOV AL,CHMOV BL,10DIV BLADD AL,30H ;时的高位ADD AH,30H ;时的低位MOV STRING42,ALMOV STRING43,AHMOV AX,0 ;分MOV AL,CLMOV B

27、L,10DIV BLADD AL,30H ;高位ADD AH,30H ;低位MOV STRING45,ALMOV STRING46,AHMOV AX,0 ;秒MOV AL,DHMOV BL,10DIV BLADD AL,30H ;高位ADD AH,30H ;低位MOV STRING48,ALMOV STRING49,AHMOV DX,OFFSET STRING42MOV AH,9INT 21HMOV DL,0DH ;换行,便于下次显示MOV AH,02HINT 21HMOV AH,0BHINT 21HCMP AL,0JE LOOP4_1MOV DX,OFFSET PRO_END_S;输出通用结

28、束提示语MOV AH,9INT 21HMOV AH,01HINT 21H;输入一个字符,实现跳转的判断CMP AL,1BHJE NEXT4_10JMP PRO_4_START;如果是ESC则不跳转到子程序开头,是则跳转NEXT4_10:RETPRO_4 ENDPPRO_4_IFERROR PROC NEARMOV BX,2CMP STRING41,8JZ NEXT4_1MOV BX,0 ;用BX保存错误类型,并返回RETNEXT4_1:CMP STRING42,30H ;检查第一个数字JB NEXT4_2_NO_NUMCMP STRING42,39HJA NEXT4_2_NO_NUMJMP NEXT4_2NEXT4_2_NO_NUM:MOV BX,1RETNEXT4_2:CMP STRING43,30H ;检查第二个数字JB NEXT4_3_NO_NUMCMP STRING43,39HJA NEXT4_3_NO_NUMJMP NEXT4_3NEXT4_3_NO_NUM:MOV BX,1RETNEXT4_3:CMP STRING44,3AH ;检查引号JE NEXT4_4MOV BX,1RETNEXT

温馨提示

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

评论

0/150

提交评论