1、汇编语言实验报告 2分类统计字符个数一、实验内容:通过分支程序设计实现字母、数字及其它字符的分类统计计数。二、实验要求:程序接受用户键入的一行字符(字符个数不超过 80 个,该字符串用回车符结束) ,并按字母、数字及其它字符分类计数,然后将结果存入以 letter、digit 和 other 为名的存储单元中。输出可以用十六进制数形式。可以进一步考虑更细节的统计分类。说明:数据变量的定义,单个字符的输入、字符串的输出、结果数字的输出,都是需要考虑的问题。分类主要是数字:09,字母AZ 和az ,其它。对应的 ASCII 码为 30H39H, 41H5AH, 61H7AH,.1、单个字符的输入,
2、可以使用 DOS 中断功能 01:MOV AH,01HINT 21H ; 输入符号的 ASCII 代码在 AL 寄存器中2、字符串的输出,可以使用 DOS 中断功能 09:LEA DX, message ; message 需要事先定义好,必须是以$结尾的字符串MOV AH, 09HINT 21H3、字符串的输入,可以使用 DOS 中断功能 0AH,但需要事先定义空间 string,在数据段中有 string DB 80, ?, 80 DUP(?)LEA DX, stringMOV AH, 0AHINT 21H4、计数得到的是二进制数值,在输出时要考虑转换成哪种进制形式的字符来显示。三、实验源
3、代码如下:DATAS SEGMENTSTRING1 DBPlease input a string:$ ;输入提示信息STRING2 DBNumber of chars:$ ;各类字符提示信息STRING3 DBNumber of digits:$STRING4 DBNumber of others:$CHARS DB 0 ;字母DIGIT DB 0 ;数字OTHERS DB 0 ;其他DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,
4、DATASMOV DS,AXLEA DX,STRING1 ;显示输入提示信息 Please input a stringMOV AH,09HINT 21HMOV CX,100 ;设置循环次数足够大L1:MOV AH,01H ;中断调用,单字符输入INT 21H ;输入符号的 ASCII 代码在 AL 寄存器中CMP AL,0DH ;若输入回车符则结束JZ OVER2 CMP AL,30H ;若39H(9),跳转进一步比较JA HIGHER1JMP DIGITAL ;DIGIT+HIGHER1:CMP AL,41H ;若 IF5AH(Z),跳转继续比较JA HIGHER2JMP CHAR ;AL
5、PHAU+HIGHER2:CMP AL,61H ;若 IF7AH(z),OTHERS+JA OTHERJMP CHAR ;ALPHAU+JMP OVER ;比较结束OTHER: INC OTHERS ;OTHERS+JMP OVER ;比较结束CHAR: INC CHARS ;ALPHAL+JMP OVER ;比较结束DIGITAL:INC DIGIT ;DIGIT+JMP OVER ;比较结束JMP OVER ;比较结束 OVER:NOPLOOP L1 ;循环,输入下一字符OVER2:CALL ENDLINE ;回车换行LEA DX,STRING2 ;字符串的输出 Number of cha
6、rsMOV AH,09HINT 21HXOR AX,AXMOV AL,CHARS ;将统计的数字送 AXCALL DISPLAY ;调用输出两位数字的子程序CALL ENDLINELEA DX,STRING3 ;字符串的输出 Number of digitsMOV AH,09HINT 21H XOR AX,AXMOV AL,DIGIT ;将统计的数字送 AXCALL DISPLAY ;调用输出两位数字的子程序CALL ENDLINELEA DX,STRING4 ;字符串的输出 Number of othersMOV AH,09HINT 21HXOR AX,AXMOV AL,OTHERS ;将统
7、计的数字送 AXCALL DISPLAY ;调用输出两位数字的子程序MOV AH,4CHINT 21HENDLINE PROC NEAR;控制输出格式,输出回车换行子程序MOV AH,02HMOV DL,0AHINT 21H ;输出换行符MOV AH,02HMOV DL,0DH INT 21H ;输出回车符RETENDLINE ENDPDISPLAY PROC NEAR;输出两位数字的子程序(输出两位数字为十进制)MOV BL,10 DIV BL ;AX/BL,AL=商,AH余数PUSH AX ;保存 AX 中的信息MOV DL,ALADD DL,30HMOV AH,02HINT 21H ;输出十位数POP AX ;出栈送 AXMOV DL,AHADD DL,30HMOV AH,02HINT 21H ;输出个位数RETDISPLAY ENDP CODES ENDSEND START四、实验运行结果如下:(附截图)注:两位数为十进制