安徽新华学院
《微机原理与接口技术》
课程设计
字符串分类统计
目 录
一、摘要……………………………………3
二、系统设计………………………………4
1、内容…………………………………4
2、思路…………………………………4
3、程序设计……………………………6
4、调试结果……………………………12
三、系统总结………………………………13
四、人员分工………………………………14
五、参考文献………………………………15
一、摘要
本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。
二、系统设计
1、内容
从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。
2、思路
(1).首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。
(2).在数据段中定义各种字符提示信息以便程序清晰明白。
(3).定义数据缓冲区用于存放输入的字符串,定义NUM区用于存放统计的大写字符、小写字符、数字以及其它字符的个数。定义OTHERCHAR、BIGCHAR、SMALLCHAR以及堆栈用于存放统计的相应字符保存,以便后来输出。
(4).首先调用DOS 10号功能用DX指定BUF区,将输入的字符串保存到BUF区中。
(5).将BUF+1的内容取出来,判断是否为0,如果为0表示没有输入任何字符,则程序跳到NEXTLAP(输出提示信息You do not input any string!),然后显示字符串(Do you want to input a string again(Y/N)?)然后调用DOS 1号功能获取您从键盘输入的数,判断是否为Y或y如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。
(6).如果输入了字符串,则调用DOS 2号功能将BUF里的内容输出来(2号功能可以输出$符号而9号功能遇到$符号就终止)。
(7).取字符出来进行比较统计,如果它比30H大且比39H小则为数字,如果比41H大且比5AH小则为大写字符,如果比61H大且比7AH小则为小写字符,如果不是这三种情况则为其它字符。
注:DX存数字个数,BX存小写字母个数,DI存大写字母个数,BP存其它字符个数。
(8).将数字个数、大写字母个数、小写字母个数、其它字符个数依次放入NUM区。
(9).依次输出各字符:
a.判断数字个数是否为0,如果为0则输出提示没有此类数据,否则输出数字个数以及有哪些数字。
b.判断大写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出大写字符的个数以及输入的哪些大写字符。
c.判断小写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出小写字符的个数以及输入的哪些小写字符。
d.判断其它字符个数是否为0,如果为0则输出提示没有此类数据,否则输出其它字符的个数以及输入的哪些其它字符。
(10).然后将程序跳到NEXTLAP继续执行,依次下去。
流程图:
3、程序设计
shuchu MACRO ;定义宏,用来输出统计其它字符、数字、大小写
个数
LOCAL NEXT
MOV AH,0
MOV BL,10
DIV BL
MOV DL,AL
MOV BH,AH ;将余数暂时存放在BH中
CMP AL,0
JZ NEXT
OR DL,30h
MOV AH,2
INT 21H
NEXT:
MOV DL,BH
OR DL,'0' ;输出余数
MOV AH,2
INT 21H
dismsg CRLF ;回车换行
ENDM
dismsg MACRO message ;输出字符串
LEA DX,message
MOV AH,9
INT 21H
ENDM
DATAS SEGMENT
STR DB 'The input string is:$'
STR1 DB 'Please input a string:$'
STR2 DB 'The integer is:$'
STR3 DB 'The bigchar is:$'
STR4 DB 'The smallchar is:$'
STR5 DB 'The otherchar is:$'
STR6 DB 'The date of integer is null!$'
STR7 DB 'The date of otherchar is null!$'
STR8 DB 'The data of bigchar is null!$'
STR9 DB 'The data of smallchar is null!$'
NUM2 DB 'The number of integer is:$'
NUM3 DB 'The number of bigchar is:$'
NUM4 DB 'The number of smallchar is:$'
NUM5 DB 'The number of otherchar is:$'
NUM6 DB 'Do you want to input a string again?(Y/N):$'
NUM7 DB 'You do not input any string!$'
NUM8 DB 'Please input correct command!$'
BUF DB 100 ;定义缓冲区用来存放输入的字符串
DB ?
DB 100 DUP (24H)
CRLF DB 0AH,0DH,'$'
NUM DB 4 DUP(?)
BIGCHAR DB 100 DUP(24H),0AH,0DH,'$'
SMALLCHAR DB 100 DUP(24H),0AH,0DH,'$'
OTHERCHAR DB 100 DUP(24H),0AH,0DH,'$'
TAIL DB ? ;用来存放其它字符的个数
DATAS ENDS
STACKS SEGMENT
STACK1 DW 100 DUP(24H)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
字符串常量池原理 ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
AGAIN1:
MOV AX,STACKS
MOV SS,AX
MOV SP,OFFSET TOP
MOV AX,DATAS
MOV DS,AX
MOV CX,100
AGAIN2:
LEA SI,BIGCHAR
MOV [SI],24H
LEA DI,SMALLCHAR
MOV [DI],24H
LEA BX,OTHERCHAR
MOV [BX],24H
INC SI
INC DI
INC BX
LOOP AGAIN2
dismsg STR1 ;显示输入提示信息
MOV AH,10 ;输入字符串
LEA DX,BUF
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论