汇编语言实验报告2分类统计字符个数

  • 格式:doc
  • 大小:61.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言实验报告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

四、实验运行结果如下:(附截图)注:两位数为十进制