统计一串字符串中字符"&"出现的次数
DATAS SEGMENT
BUF DB 20,?,20 DUP('$')
LEN EQU $-BUF
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA DX,BUF
MOV AH,10 ;输入
INT 21H
mov dl,0ah ;换行
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
MOV BL,0 ;用于记字符的个数
MOV CX,LEN
MOV DI, OFFSET BUF
MOV AL, '&';将要查找的字符存入AL
L1:
REPNZ SCASB ;逐个查找, ZF=1时结束循环 不相等即为0
JNZ L2 ;若ZF=0,不相等的时候跳转
INC BL ;若ZF=1 ,BX 自增一
L2:
CMP CX,0 ;若CX=0 ,则结束程序
JA L1 ;若CX大于零,则继续循环
ADD BL,30H ;将BL 中的值转换成可显示结果
MOV DL,BL ;显示计算结果
MOV AH,02
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
结果图示例:
输入一个字符串,统计其中空格和A的个数,并将结果显示在屏幕上。
DATAS SEGMENT
BUF DB 30 DUP('$')
LEN EQU $-BUF
BUF1 DB 0DH,0AH,10 DUP('$');此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA DX,BUF
MOV AH,0AH
MOV BX,0
INT 21H
MOV CX,LEN
MOV AL,' '
LK:
REPNZ SCASB
JNZ L1
INC BX
L1:
CMP CX,0
JNZ LK
L11:
LEA DI,BUF1
ADD BX,30H
MOV [DI+2],BX
MOV DI,0
MOV BX,0
MOV AL,'A'
LEA DX,BUF
MOV CX,LEN
LA:
REPNZ SCASB
JNZ L2
INC BX
L2:
CMP CX,0
JNZ LA
L22:
LEA DI,BUF1
ADD BX,30H
MOV [DI+3],BX
LEA DX,BUF1
MOV AH,09H
INT 21H
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
结果图示例(输出的第一个数为空格的个数,第二个数为A的个数):
从键盘输入一串可显示字符(以回车符结束),并按字母、数字、空格分类计数,然后显示出这三类统计的结果。
DATAS SEGMENT
BUF1 DB 30H,0DH,0AH
BUF2 DB 030H,0DH,0AH
BUF3 DB 30H,0DH,0AH,'$';此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
SHURU:
MOV AH,01H
INT 21H
CMP AL,0DH
JE SHUCHU
CMP AL,20H
JE B3
CMP AL,3AH
JB B2
B1:
INC BUF1
JMP SHURU
B2:
INC BUF2
JMP SHURU
B3:
INC BUF3
JMP SHURU
SHUCHU:
LEA DX,BUF1
MOV AH,09H
INT 21H
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
输出结果示例: