安徽新华学院
《微机原理与接口技术》
课程设计
字符串分类统计
一、摘要……………………………………3
二、系统设计………………………………4
1、内容…………………………………4
2、思路…………………………………4
3、程序设计……………………………6
4、调试结果……………………………12
三、系统总结………………………………13
四、人员分工………………………………14
五、参考文献………………………………15
一、摘要
本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。比如你输入一串数字“12345,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。
二、系统设计
1、内容
从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。
2、思路
1.首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。
2.在数据段中定义各种字符提示信息以便程序清晰明白。
3.定义数据缓冲区用于存放输入的字符串,定义NUM区用于存放统计的大写字符、小写字符、数字以及其它字符的个数。定义OTHERCHARBIGCHARSMALLCHAR以及堆栈用于存放统计的相应字符保存,以便后来输出。
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号功能获取您从键盘输入的数,判断是否为Yy如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。
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小时内删除。