资源描述:
《统计键盘输入字符、数字个数”.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、“统计键盘输入字符、数字个数”实验报告一、实验目的1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。2、通过循环结构程序熟悉汇编语言程序设计的主要方法。3、了解和掌握程序设计过程中算法的选择。4、掌握汇编语言的调试方法。二、实验内容从键盘输入一系列字符(每种字符不超过9)并以回车符结束,请统计出字母、数字及其它字符的个数,最后在屏幕上显示计数结果。三、实验过程1、编写程序,后附程序代码2、测试程序输入四组不同的测试字符串,得到NUMBER值为数字个数,CHAR值为字母个数,REST为符号个数。三、结果分析和思考结果分析:由测试中可以看出,三种字符显示的个数范围是0~9,
2、大于9之后的就会显示个数的数值加30H之后的数值对应的ASCII码值,这是因为显示个数的时候,我的思路是将个数分别存储在NUMBER,CHAR,REST中,然后显示它们的值加30H后所对应的ASCII码值,因此如果想要显示两位数、三位数的数值,就要在最后输出的时候改变输出的方法,将两位数、三位数的数值输出。改进思路:先将前面程序计算出的个数三位数放到AL中,然后调用除法指令DIV除以100得到百位数字,而后除以10得到十位数字,和余下的个位数字。就可以得到000~999显示范围的字符个数。在调用除法的过程中,被除数在AX中,商在AL中,余数在AH中以数字个数NUMBER为例:
3、MOVAL,NUMBER将NUMBER送到ALMOV AH,0;对应百位MOVBL100DIVBLMOVBL,AH;余数在AHMOV AH,2 ;显示最高位(除以100的余数为最高位,存在AH中)ADD AL,30H MOV DL,AL INT 21HMOVAL,BL;对应十位MOVAH,0MOVBL,10DIVBLMOVBL,AH;余数在AHMOVAH,2;显示中间位(除以10的余数为中间位,存在AH中)ADDAL,30HMOVDL,ALINT21HMOVDL,BL;对应个位数字ADDDL,30HMOVAH,2;显示个位INT21H四、代码DSEGSEGMENTNUM
4、BERDB0;存储数字个数CHARDB0;字母个数RESTDB0;字符个数STR1DB'NUMBER:','$';输出提示”NUMBER:”STR2DB'CHAR:','$';输出提示”CHAR:”STR3DB'REST:','$';输出提示”REST:”DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXAGAIN:MOVAH,1INT21HCMPAL,0DH;判断字符是否为回车JZEXIT;是回车,跳转到结束语句CMPAL,'0';不是回车,判断是否大于’0’JNLNEXT1;大于‘0’,跳转到N
5、EXT1INCREST;小于’0’,是字符,REST自增1JMPAGAIN;AGAIN循环NEXT1:CMPAL,'9';判断是否小于’9’JBEN1;小于9,是数字,跳转到N1CMPAL,65;大于9,不是数字,跟’a’比较JNLNEXT2;大于’a’,跳转到NEXT2INCREST;小于’a’,是字符,REST自增1JMPAGAIN;返回循环NEXT2:CMPAL,90;跟’z’作比较JBEN2;小于’z’,是字母,跳转到N2CMPAL,97;大于’z’,跟‘A’比较JNLNEXT3;大于’A’跳转到NEST3INCREST;大于’z’,小于‘A’,是字符,REST自增1
6、JMPAGAIN;返回循环NEXT3:CMPAL,122;跟’Z’比较JBEN2;小于’Z’,是大写字母,跳转到N2INCREST;不是字母,是字符,REST自增1JMPAGAIN;返回循环N1:INCNUMBER;判断为数字,NUMBER自增1JMPAGAIN;返回循环N2:INCCHAR;判断为字母,CHAR自增1JMPAGAIN;返回循环EXIT:LEADX,STR1MOVAH,09HINT21H;显示提示“NUMBER:”MOVDL,NUMBER;NUMBER送到DLADDDL,30HMOVAH,2INT21H;显示NUMBER的值LEADX,STR2MOVAH,09
7、HINT21H;显示提示“CHAR:”MOVDL,CHAR;CHAR送到DLADDDL,30HMOVAH,2INT21H;显示CHAR的值LEADX,STR3MOVAH,09HINT21H;显示提示”REST:”MOVDL,REST;REST送到DLADDDL,30HMOVAH,2INT21H;显示REST的值MOVAH,4CHINT21H;程序结束CSEGENDSENDSTART