DATA SEGMENT CHAR DB 'A' HINT1 DB 'Please enter a string: $' HINT2 DB 10, 27H, 'A', 27H, ' occured time: $' TIMES DB 0 MAXLEN DB 100 LEN DB 0 TABLE DB 100 DUP (0) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, OFFSET HINT1 ; 将HINT1的偏移地址赋给DX准备输出 MOV AH, 9 ; 输出 INT 21H LEA DX, MAXLEN ; 0AH功能会获取DS:[DX](已定义为MAXLEN)作为输入缓冲区最大容量 MOV AH, 0AH ; 调用0AH功能,将输入的字符串长度存入DS:[DX+1](已定义为LEN) INT 21H ; 将字符串存入从DS:DX+2开始的空间(已定义为TABLE) CALL CNT ; 统计字符“A”的数量,结果在TIMES中 MOV DX, OFFSET HINT2 ; 将HINT2的偏移地址赋给DX准备输出 MOV AH, 9 ; 输出 INT 21H MOV AL, TIMES ADD AL, '0' ; TIMES += '0' (将数字信息转换成字符) MOV DL, AL MOV AH, 02H ; 显示单个字符 INT 21H MOV AH,4CH INT 21H CNT PROC NEAR MOV CX, 0 MOV CL, LEN MOV SI, -1 ; SI是遍历TABLE的下标 MOV AL, CHAR ; 要比较的字符移到AL中(CMP不能比较两个内存单元) LP: INC SI CMP AL, TABLE[SI] JNE BACK ; 不相等则跳过INC TIMES,重新循环 INC TIMES BACK: LOOP LP ; LOOP先将CX -= 1,然后判断是否为0,为0就退出循环 RET CNT ENDP CODE ENDS END START