2025-05-27 16:03:52 +08:00

57 lines
1.9 KiB
NASM
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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