统计字符出现次数-汇编语言

统计一串字符串中字符"&"出现的次数

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

输出结果示例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值