您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页统计键盘输入字符、数字个数”

统计键盘输入字符、数字个数”

来源:爱玩科技网


“统计键盘输入字符、数字个数” 实验报告

一、 实验目的

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 LEA DX,STR2

MOV AH,09H

INT 21H MOV DL,CHAR ADD DL,30H

MOV AH,2

INT 21H LEA DX,STR3 MOV AH,09H

;显示NUMBER的值

;显示提示“CHAR:”

;CHAR送到DL

;显示CHAR的值

INT 21H MOV DL,REST ADD DL,30H

MOV AH,2

INT 21H MOV AH,4CH

INT 21H CSEG ENDS

END START

;显示提示”REST:”

;REST送到DL

;显示REST的值

;程序结束

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务