汇编语言实验报告2分类统计字符个数
- 格式:doc
- 大小:61.00 KB
- 文档页数:5
汇编语言实验报告2
分类统计字符个数
一、实验容:通过分支程序设计实现字母、数字及其它字符的分类统计计数。
二、实验要求:程序接受用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。输出可以用十六进制数形式。
可以进一步考虑更细节的统计分类。
说明:数据变量的定义,单个字符的输入、字符串的输出、结果数字的输出,都是需要考虑的问题。分类主要是数字:’0’~’9’,字母’A’~’Z’和’a’~’z’,其它。对应的ASCII码为30H~39H, 41H~5AH, 61H~7AH,...
1、单个字符的输入,可以使用DOS中断功能01:
MOV AH,01H
INT 21H ; 输入符号的ASCII代码在AL寄存器中
2、字符串的输出,可以使用DOS中断功能09:
LEA DX, message ; message需要事先定义好,必须是以’$’结尾的字符串
MOV AH, 09H
INT 21H
3、字符串的输入,可以使用DOS中断功能0AH,但需要事先定义空间string,在数据段中有string DB 80, ?, 80 DUP(?)
LEA DX, string
MOV AH, 0AH
INT 21H
4、计数得到的是二进制数值,在输出时要考虑转换成哪种进制形式的字符来显示。
三、实验源代码如下:
DATAS SEGMENT
STRING1 DB'Please input a string:$' ;输入提示信息
STRING2 DB'Number of chars:$ ';各类字符提示信息
STRING3 DB'Number of digits:$'
STRING4 DB'Number of others:$'
CHARS DB 0 ;字母
DIGIT DB 0 ;数字
OTHERS DB 0 ;其他
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STRING1 ;显示输入提示信息Please input a string
MOV AH,09H
INT 21H
MOV CX,100 ;设置循环次数足够大
L1:MOV AH,01H ;中断调用,单字符输入
INT 21H ;输入符号的ASCII代码在AL寄存器中
CMP AL,0DH ;若输入回车符则结束
JZ OVER2
CMP AL,30H ;若<30H(0),OTHERS++
JB OTHER
CMP AL,39H ;若>39H(9),跳转进一步比较
JA HIGHER1
JMP DIGITAL ;DIGIT++
HIGHER1:CMP AL,41H ;若IF<41H(A),OTHERS++ JB OTHER
CMP AL,5AH ;若IF>5AH(Z),跳转继续比较
JA HIGHER2
JMP CHAR ;ALPHAU++
HIGHER2:CMP AL,61H ;若IF<61H(a),OTHERS++ JB OTHER
CMP AL,7AH ;若IF>7AH(z),OTHERS++
JA OTHER
JMP 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:NOP
LOOP L1 ;循环,输入下一字符
OVER2:CALL ENDLINE ;回车换行
LEA DX,STRING2 ;字符串的输出Number of chars MOV AH,09H
INT 21H
XOR AX,AX
MOV AL,CHARS ;将统计的数字送AX
CALL DISPLAY ;调用输出两位数字的子程序
CALL ENDLINE
LEA DX,STRING3 ;字符串的输出Number of digits MOV AH,09H
INT 21H
XOR AX,AX
MOV AL,DIGIT ;将统计的数字送AX
CALL DISPLAY ;调用输出两位数字的子程序
CALL ENDLINE
LEA DX,STRING4 ;字符串的输出Number of others
MOV AH,09H
INT 21H
XOR AX,AX
MOV AL,OTHERS ;将统计的数字送AX
CALL DISPLAY ;调用输出两位数字的子程序
MOV AH,4CH
INT 21H
ENDLINE PROC NEAR;控制输出格式,输出回车换行子程序
MOV AH,02H
MOV DL,0AH
INT 21H ;输出换行符
MOV AH,02H
MOV DL,0DH
INT 21H ;输出回车符
RET
ENDLINE ENDP
DISPLAY PROC NEAR;输出两位数字的子程序(输出两位数字为十进制)MOV BL,10
DIV BL ;AX/BL,AL=商,AH=余数
PUSH AX ;保存AX中的信息
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H ;输出十位数
POP AX ;出栈送AX
MOV DL,AH
ADD DL,30H
MOV AH,02H
INT 21H ;输出个位数
RET
DISPLAY ENDP
CODES ENDS
END START
四、实验运行结果如下:(附截图)注:两位数为十进制