TITLE READ AND COUNT CHARACTERS ;DOSSEG ;Use for DOS Debug .MODEL SMALL .STACK 64H .DATA REQ DB 'Enter a String:',0AH,0DH,'$' ENST DB 'Entered string- ','$' UC DB 0AH,0DH,'Uppercase Characters- ','$' LC DB 0AH,0DH,'Lowercase Characters- ','$' DG DB 0AH,0DH, 'Digits- ','$' OT DB 0AH,0DH,'Others- ','$'
MAX DB 50H ACT DB ? CHAR DB 50H DUP (?) COUNTS DB 4H DUP (0) TEMP DB 3H DUP (?) DIVS DB 0AH
.CODE MAIN PROC MOV AX,@DATA MOV DS,AX MOV AH,09H ;Displays Request LEA DX,REQ INT 21H
MOV AH,0AH ;Reads String LEA DX, MAX INT 21H
MOV CH,00H MOV CL,ACT MOV DI,00H
Agn: CMP CHAR[DI],'0' JB Others CMP CHAR[DI],'9' JA CmpUp INC COUNTS[2] ;Increases Digit's Count JMP NxtChar
CmpUp: CMP CHAR[DI],'A' JB Others CMP CHAR[DI],'Z' JA CmpLo INC COUNTS[0] ;Increases Uppercase Character's Count JMP NxtChar
CmpLo: CMP CHAR[DI],'a' JB Others CMP CHAR[DI],'z' JA Others INC COUNTS[1] ;Increases Lowercase Character's Count JMP NxtChar
Others: INC COUNTS[3] ;Increases Other's Count NxtChar: INC DI LOOP Agn MOV CHAR[DI],'$' MOV AX,0600H ;Clear Screen MOV BH,07H MOV CX,0000H MOV DX,184FH INT 10H MOV AH,02H ;Set Cursor Position MOV BH,00H ;Page MOV DX,00H INT 10H
MOV AH,09H ;Displays First Line of Output LEA DX,ENST INT 21H LEA DX,CHAR INT 21H
LEA DX,UC ;Displays Second Line of Output INT 21H MOV DI,00H CALL DISPCOUNT MOV AH,09H ;Displays Third Line of Output LEA DX,LC INT 21H MOV DI,01H CALL DISPCOUNT MOV AH,09H ;Displays Forth Line of Output LEA DX,DG INT 21H MOV DI,02H CALL DISPCOUNT
MOV AH,09H ;Displays Fifth Line of Output LEA DX,OT INT 21H MOV DI,03H CALL DISPCOUNT
MOV AX,4C00H INT 21H MAIN ENDP
DISPCOUNT PROC;Displays the Content of array 'COUNTS' as indicated by 'DI'
MOV SI,00H MOV AH,00H MOV AL,COUNTS[DI] Rediv: DIV DIVS MOV TEMP[SI],AH INC SI MOV AH,00H TEST AL,0FFH JNZ Rediv MOV AH,02H Nxt: DEC SI MOV DL,TEMP[SI] ADD DL,30H INT 21H TEST SI,0FFFFH JNZ Nxt
RET DISPCOUNT ENDP
END MAIN
|