“统计键盘输入字符、数字个数”
实验报告
一、实验目的
1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。
2、通过循环结构程序熟悉汇编语言程序设计的主要方法。
3、了解和掌握程序设计过程中算法的选择。
4、掌握汇编语言的调试方法。
二、实验内容
从键盘输入一系列字符(每种字符不超过9)并以回车符结束,请统计出字母、数字及其它字符的个数,最后在屏幕上显示计数结果。
三、实验过程
1、编写程序,后附程序代码
2、测试程序
输入四组不同的测试字符串,得到NUMBER值为数字个数,CHAR值为字母个数,REST为符号个数。
三、结果分析和思考
结果分析:
由测试中可以看出,三种字符显示的个数范围是0~9,大于9之后的就会显示个数的数值加30H之后的数值对应的ASCII码值,这是因为显示个数的时候,我的思路是将个数分别存储在NUMBER,CHAR,REST中,然后显示它们的值加30H后所对应的ASCII码值,因此如果想要显示两位数、三位数的数值,就要在最后输出的时候改变输出的方法,将两位数、三位数的数值输出。
改进思路:
先将前面程序计算出的个数三位数放到AL中,然后调用除法指令DIV除以100得到百位数字,而后除以10得到十位数字,和余下的个位数字。就可以得到000~999显示范围的字符个数。
在调用除法的过程中,被除数在AX中,商在AL中,余数在AH中
以数字个数NUMBER为例:
MOV AL,NUMBER 将NUMBER送到AL
MOV AH,0 ;对应百位
MOV BL 100
DIV BL
MOV BL,AH ;余数在AH
MOV AH,2 ;显示最高位(除以100的余数为最高位,存在AH中)
ADD AL,30H
MOV DL,AL
INT 21H
MOV AL,BL ;对应十位
MOV AH,0
MOV BL,10
DIV BL
MOV BL,AH ;余数在AH
MOV AH,2 ;显示中间位(除以10的余数为中间位,存在AH中)
ADD AL,30H
MOV DL,AL
INT 21H
MOV DL,BL;对应个位数字
ADD DL,30H
MOV AH,2 ;显示个位
INT 21H
四、代码
DSEG SEGMENT
NUMBER DB 0 ;存储数字个数
CHAR DB 0 ;字母个数
REST DB 0 ;字符个数
STR1 DB 'NUMBER:','$' ;输出提示”NUMBER:”
STR2 DB ' CHAR:','$' ;输出提示”CHAR:”
STR3 DB ' REST:','$' ;输出提示”REST:”
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
AGAIN:
MOV AH,1
INT 21H
CMP AL,0DH ;判断字符是否为回车
JZ EXIT ;是回车,跳转到结束语句
CMP AL,'0' ;不是回车,判断是否大于’0’
JNL NEXT1 ;大于‘0’,跳转到NEXT1
INC REST ; 小于’0’,是字符,REST自增1
JMP AGAIN ;AGAIN循环
NEXT1:
CMP AL,'9' ;判断是否小于’9’
JBE N1 ;小于9,是数字,跳转到N1
CMP AL,65;大于9,不是数字,跟’a’比较
JNL NEXT2 ;大于’a’,跳转到NEXT2
INC REST ;小于’a’,是字符,REST自增1
JMP AGAIN;返回循环
NEXT2:
CMP AL,90 ;跟’z’作比较
JBE N2 ;小于’z’,是字母,跳转到N2
CMP AL,97 ;大于’z’,跟‘A’比较
JNL NEXT3 ;大于’A’跳转到NEST3
INC REST ;大于’z’,小于‘A’,是字符,REST自增1
JMP AGAIN ;返回循环
NEXT3:
CMP AL,122 ;跟’Z’比较
JBE N2 ;小于’Z’,是大写字母,跳转到N2
INC REST ;不是字母,是字符,REST自增1
JMP AGAIN ;返回循环
N1:
INC NUMBER ;判断为数字,NUMBER自增1
JMP AGAIN ;返回循环
N2:
INC CHAR ;判断为字母,CHAR自增1
JMP AGAIN ;返回循环
EXIT:
LEA DX,STR1
MOV AH,09H
INT 21H ;显示提示“NUMBER:”
MOV DL,NUMBER ;NUMBER送到DL
ADD DL,30H
MOV AH,2
INT 21H ;显示NUMBER的值
LEA DX,STR2
MOV AH,09H
INT 21H ;显示提示“CHAR:”
MOV DL,CHAR ;CHAR送到DL
ADD DL,30H
MOV AH,2
字符串截取数字部分 INT 21H ;显示CHAR的值
LEA DX,STR3
MOV AH,09H
INT 21H ;显示提示”REST:”
MOV DL,REST ;REST送到DL
ADD DL,30H
MOV AH,2
INT 21H ;显示REST的值
MOV AH,4CH
INT 21H ;程序结束
CSEG ENDS
END START
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论