汇编语言实验报告2分类统计字符个数一、实验容:通过分支程序设计实现字母、数字及其它字符的分类统计计数。二、实验要求:程序接受用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。输出可以用十六进制数形式。可以进一步考虑更细节的统计分类。说明:数据变量的定义,单个字符的输入、字符串的输出、结果数字的输出,都是需要考虑的问题。分类主要是数字:’0’~’9’,字母’A’~’Z’和’a’~’z’,其它。对应的ASCII码为30H~39H,41H~5AH,61H~7AH,...1、单个字符的输入,可以使用DOS中断功能01:MOVAH,01HINT21H;输入符号的ASCII代码在AL寄存器中2、字符串的输出,可以使用DOS中断功能09:LEADX,message;message需要事先定义好,必须是以’$’结尾的字符串MOVAH,09HINT21H3、字符串的输入,可以使用DOS中断功能0AH,但需要事先定义空间string,在数据段中有stringDB80,?,80DUP(?)LEADX,stringMOVAH,0AHINT21H4、计数得到的是二进制数值,在输出时要考虑转换成哪种进制形式的字符来显示。三、实验源代码如下:DATASSEGMENTSTRING1DB'Pleaseinputastring:$';输入提示信息STRING2DB'Numberofchars:$';各类字符提示信息STRING3DB'Numberofdigits:$'STRING4DB'Numberofothers:$'CHARSDB0;字母DIGITDB0;数字OTHERSDB0;其他DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXLEADX,STRING1;显示输入提示信息PleaseinputastringMOVAH,09HINT21HMOVCX,100;设置循环次数足够大L1:MOVAH,01H;中断调用,单字符输入INT21H;输入符号的ASCII代码在AL寄存器中CMPAL,0DH;若输入回车符则结束JZOVER2CMPAL,30H;若30H(0),OTHERS++JBOTHERCMPAL,39H;若39H(9),跳转进一步比较JAHIGHER1JMPDIGITAL;DIGIT++HIGHER1:CMPAL,41H;若IF41H(A),OTHERS++JBOTHERCMPAL,5AH;若IF5AH(Z),跳转继续比较JAHIGHER2JMPCHAR;ALPHAU++HIGHER2:CMPAL,61H;若IF61H(a),OTHERS++JBOTHERCMPAL,7AH;若IF7AH(z),OTHERS++JAOTHERJMPCHAR;ALPHAU++JMPOVER;比较结束OTHER:INCOTHERS;OTHERS++JMPOVER;比较结束CHAR:INCCHARS;ALPHAL++JMPOVER;比较结束DIGITAL:INCDIGIT;DIGIT++JMPOVER;比较结束JMPOVER;比较结束OVER:NOPLOOPL1;循环,输入下一字符OVER2:CALLENDLINE;回车换行LEADX,STRING2;字符串的输出NumberofcharsMOVAH,09HINT21HXORAX,AXMOVAL,CHARS;将统计的数字送AXCALLDISPLAY;调用输出两位数字的子程序CALLENDLINELEADX,STRING3;字符串的输出NumberofdigitsMOVAH,09HINT21HXORAX,AXMOVAL,DIGIT;将统计的数字送AXCALLDISPLAY;调用输出两位数字的子程序CALLENDLINELEADX,STRING4;字符串的输出NumberofothersMOVAH,09HINT21HXORAX,AXMOVAL,OTHERS;将统计的数字送AXCALLDISPLAY;调用输出两位数字的子程序MOVAH,4CHINT21HENDLINEPROCNEAR;控制输出格式,输出回车换行子程序MOVAH,02HMOVDL,0AHINT21H;输出换行符MOVAH,02HMOVDL,0DHINT21H;输出回车符RETENDLINEENDPDISPLAYPROCNEAR;输出两位数字的子程序(输出两位数字为十进制)MOVBL,10DIVBL;AX/BL,AL=商,AH=余数PUSHAX;保存AX中的信息MOVDL,ALADDDL,30HMOVAH,02HINT21H;输出十位数POPAX;出栈送AXMOVDL,AHADDDL,30HMOVAH,02HINT21H;输出个位数RETDISPLAYENDPCODESENDSENDSTART四、实验运行结果如下:(附截图)注:两位数为十进制