汇编——字符统计

;编制一段完整的程序,从键盘上输入一个以‘$’结尾的字符串,
;然后对其中的数字字符(0~9)和非数字字符个数分别进行统计,
;并以十进制形式输出显示统计结果。

;编制一段完整的程序,从键盘上输入一个以‘$’结尾的字符串,
;然后对其中的数字字符(0~9)和非数字字符个数分别进行统计,
;并以十进制形式输出显示统计结果。
DATAS SEGMENT
    ;此处输入数据段代码 
    
    STRINGA DB 80H 
    DB 0 
    DB 280H DUP('$')
   
    NUM DW 0
  	DIGITL DW 0
    INPUTSET DB 'PLEASE ENTER FOUR DIGITS!$'
    ERRORTIP DB 'THERE ARE NOT "$"$'
    NUMTIP DB 'THE NUMBER OF INTERGE IS:$'
    CHARTIP DB 'THE NUMBER OF CHAR IS:$'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
    DW 40H DUP(0)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    ;此处输入代码段代码
    ;初始化
    MOV AX,STACKS;调用堆栈的命令
    MOV SS,AX
    LEA SP,TOP
    
  FIRST: 
  	MOV AX,0
  	MOV NUM,AX
  	MOV DIGITL,AX
  
    ;输入提示
    MOV DX,OFFSET INPUTSET
    MOV AH,09H
    INT 21H
    
    MOV DL,0AH;回车
    MOV AH,2
    INT 21H
    MOV DL,0DH
    MOV AH,2
    INT 21H
    
    ;输入字符串A
    LEA DX,STRINGA
    MOV AH,0AH
    INT 21H
    
    
     MOV DL,0AH;回车
     MOV AH,02H
    INT 21H
    MOV DL,0DH
    MOV AH,2
    INT 21H
 
   ;指针初始化
   XOR CX,CX
    MOV CL,STRINGA+1;字符长度
    MOV SI,0
   JCX:
   INC SI
    LOOP JCX
;数组的下标从0开始,字符串的前两个地址用来存放数组首地址和偏移量,所以取刚刚输入的最后一位要SI加1
    INC SI
    ;判断是不是‘$‘
    
    CMP STRINGA[SI],'$'
    JNZ DONT
    
   ;输入正常,开始统计	
   XOR CX,CX
    MOV CL,STRINGA+1
    MOV SI,2
NEXT:
	
	MOV AL,STRINGA[SI]
    
     ;0~9
    CMP AL,'0'
    JB STAT_CHAR
    
    CMP AL,'9'
    JA  STAT_CHAR
  
    XOR BX,BX
   	MOV BX,NUM
   	INC BX
   	MOV NUM,BX
    JMP SEEWHAT
    
  STAT_CHAR:
    
    XOR BX,BX
   	MOV BX,DIGITL
   	INC BX
   	MOV DIGITL,BX
    ;输出这个字符,便于后期检查
 SEEWHAT:
    ;MOV DL,AL
    ;MOV AH,02H
    ;INT 21H

  	INC SI
  
    LOOP NEXT
  
  	
   
     ;转十进制
     LEA DX,NUMTIP 
     MOV AH,09H
     INT 21H
     
     XOR AX,AX
     MOV AX,NUM
     XOR BX,BX
   	MOV BX,10
   	XOR CL,CL
   ML1:
   	XOR DX,DX
   DIV BX
   ADD DX,30H
    
  	PUSH DX;压入栈中
  	INC CL;记录共有几个
  	CMP AX,0
  	JNE ML1
  	
    	
 MW1I:
 	POP DX
 	
 	MOV AH,02H
  	INT 21H
  	
	LOOP MW1I
	
	LEA DX,CHARTIP 
     MOV AH,09H
     INT 21H
	
  XOR AX,AX
  MOV AX,DIGITL
  DEC AX
     XOR BX,BX
   	MOV BX,10
   	XOR CL,CL
 ML1I:
   	XOR DX,DX
   DIV BX
   ADD DX,30H
    
  	PUSH DX;压入栈中
  	INC CL;记录共有几个
  	CMP AX,0
  	JNE ML1I
  	
    	
 MW1:
 	POP DX
 	
 	MOV AH,02H
  	INT 21H
  	
	LOOP MW1
  
  
    MOV DL,' '
    MOV AH,02H
  	INT 21H
   
   
  JMP EXIT
  
 
   
   
   ;错误提示   
    DONT:
    MOV DX,OFFSET ERRORTIP
    MOV AH,09H
    INT 21H
    
    MOV DL,0AH;回车
   	MOV AH,02H
   	INT 21H
   	MOV DL,0DH
  	MOV AH,2
   	INT 21H
    
    JMP FIRST
    
    
 
    
    
   
   ;退出
     EXIT:  
      MOV DL,0AH;回车
    MOV AH,2
    INT 21H
    MOV DL,0DH
    MOV AH,2
    INT 21H
     JMP FIRST
     
     ;MOV AH,4CH
    ;INT 21H
CODES ENDS
    END START

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值