汇编语言:使用简化段源程序结构对字符串进行分类

    技术2022-07-11  119

    汇编语言:使用简化段源程序结构对字符串进行分类

    题目要求运行截图 编程平台代码实现

    题目要求

    使用简化段源程序结构,从键盘输入一系列字符(最多可以输入280个字符,以回车符结束),并按字母、数字及其他字符分类计数,最后显示这三类的计数结果。

    运行截图

    编程平台

    Masm for Windows 集成实验环境 2012.5

    代码实现

    .model small .stack .data buffer DW 280,0,280 DUP(?);存放输入的缓冲区 ;缓冲区解析: ;第一个280代表能存储的最大数据量; ;0代表已储存的数据个数; ;第二个280代表当前用来存储数据的空间大小,一般与最大数据量相等。 hint DB 'Enter up to 280 characters, ending with a carriage return: $' break DB 13,10,'$';换行 letters DB 'Letters: $' digits DB 'Digits: $' others DB 'Other characters: $' .code MAIN PROC MOV AX,@data MOV DS,AX LEA DX,hint;输入前提示 MOV AH,9H INT 21H LEA DX,buffer;定位到输入缓冲区 MOV AH,0AH;输入一串字符到缓冲区中,遇到回车时自动停止输入 INT 21H LEA DX,break;换行 MOV AH,9H INT 21H LEA BX,buffer CALL CLASSIFY;分类统计BX所指向的缓冲区中数据 PUSH DI PUSH SI PUSH AX LEA DX,letters;输出字母前提示 MOV AH,9H INT 21H POP AX;获得字母个数 CALL OUTPUTDATA;以十进制形式输出AX中的数据 LEA DX,break;换行 MOV AH,9H INT 21H LEA DX,digits;输出数字前提示 MOV AH,9H INT 21H POP AX;获得数字个数 CALL OUTPUTDATA;以十进制形式输出AX中的数据 LEA DX,break;换行 MOV AH,9H INT 21H LEA DX,others;输出其他字符前提示 MOV AH,9H INT 21H POP AX;获得其他字符个数 CALL OUTPUTDATA;以十进制形式输出AX中的数据 MOV AH,4CH INT 21H MAIN ENDP ;子程序 ;功能:分类统计BX所指向的缓冲区中数据。 ;入口参数:BX存放要分类的缓冲器的首地址。 CLASSIFY PROC MOV AX,0;AX统计字母个数 MOV SI,0;SI统计数字个数 MOV DI,0;DI统计其他字符个数 INC BX;BX指向缓冲区中存放数据个数的偏移地址 MOV CL,[BX];CX存放缓冲区数据个数 MOV CH,0 CMP CX,0;检查是否无输入 JE finish INC BX;BX指向第一个字符的偏移地址 lop: MOV DL,[BX] CMP DL,30H;与“0”比较 JB oth CMP DL,39H;与“9”比较 JBE dig CMP DL,41H;与“A”比较 JB oth CMP DL,5AH;与“Z”比较 JBE let CMP DL,61H;与“a”比较 JB oth CMP DL,7AH;与“z”比较 JG oth let:;当前字符为字母 INC AX JMP cont dig:;当前字符为数字 INC SI JMP cont oth:;当前字符为其他字符 INC DI cont: INC BX LOOP lop finish: RET CLASSIFY ENDP ;子程序 ;功能:以十进制形式输出0和正整数。 ;入口参数:AX存放要输出的数据。 OUTPUTDATA PROC MOV BX,10 MOV CX,0;记录要输出的位数 lop1: MOV DX,0 DIV BX PUSH DX;余数入栈 INC CX CMP AX,0 JNE lop1 lop2: POP DX ADD DL,30H;转换成ASCII码 MOV AH,2H INT 21H LOOP lop2 RET OUTPUTDATA ENDP end

    如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

    Processed: 0.009, SQL: 9