Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write an EXE program that accepts a string from the keyboard, counts the number

ID: 670482 • Letter: W

Question

Write an EXE program that accepts a string from the keyboard, counts the number of capital and small alphabets, digits, and other symbols excluding spaces and tabs , and echoes the string and its count information on the screen. can we do it using jmp, loop cmp functions ? I have the code where in they tried to map the whole ascii table by creating a table in data segment as below. Can i get it without using table but just comparing , looping using asciii values. Thank you


STACK_SEG SEGMENT STACK USE16
DB 100 DUP(?)
STACK_SEG ENDS

DATA_SEG SEGMENT 'DATA' USE16
;CREATE THE TABLE
SYM1   DB 9 DUP (02H)
TAB   DB 0
SYM2   DB 22 DUP (02H)
SPACE   DB 00H
SYM3   DB 15 DUP (02H)
NUM   DB 10 DUP (04H)
SYM4   DB 7 DUP (02H)
A_CAP   DB 26 DUP (06H)
SYM5     DB 6 DUP (02H)
LCASE    DB 26 DUP (08H)
SYM6   DB 133 DUP (02H)


;REGISTERS TO HOLD VALUES
NOTSYM   DW 0000H
SYMBOL   DW 0000H
NUMBER   DW 0000H
CAPITAL   DW 0000H
LOWER   DW 0000H

OUTMSG1   DB 'ENTER A STRING: $'
OUTMSG2 DB 0DH,0AH,'INPUT STRING: $'
OUTMSG3   DB 0DH,0AH,'CONTAINS: $'
NUMBERS DB ' NUMBERS', 0DH,0AH,'$'
SYMBOLS DB ' SYMBOLS', 0DH,0AH,'$'
CAPS    DB ' CAPITALS',0DH,0AH,'$'
LCASEs   DB ' LOWER CASE',0DH,0AH,'$'
SIZE   DB 255
COUNT   DB ?
INCHAR   DB 100 DUP ('$')
NEWLINE DB 0DH,0AH,'$'
DATA_SEG ENDS

CODE_SEG SEGMENT PARA 'CODE' PUBLIC USE16
ASSUME CS:CODE_SEG, DS:DATA_SEG, SS:STACK_SEG
MAIN PROC FAR
PUSH DS ;INITIATE THE PROGRAM
XOR AX,AX
PUSH AX
MOV AX,DATA_SEG
MOV DS,AX

;----------PRINT INPUT STRING: -----------------
LEA DX,OUTMSG1 ;PRINT MESSAGE
MOV AH,9
INT 21H

;----------READ IN STRING AND STORE AT INCHAR
   LEA DX,SIZE
MOV AH,0AH ;READ A STRING
INT 21H

   MOV CX,0

;----------GO THROUGH THE ARRAY-------------------
   MOV CL,COUNT       ;SET THE COUNTER
   TEST CL,0FFH
   JZ FINISH
   LEA DI,INCHAR
L1:           
   MOV BL,BYTE PTR [DI]   ;MOVE ASCII BYTE INTO BX
   MOV BH, 00H       ;CLEAR THE TOP OF BX
   MOV BL, BYTE PTR [BX]   ;GO TO TABLE AND GET NEW ADDRESS
   MOV BH, 01H       ;FINISH THE ADDRESS
   INC WORD PTR [BX]   ;INCREMENT THE VARIABLE
   INc DI
  
   LOOP L1


;-----------PRINT CONTAINS------------------
FINISH: LEA DX,OUTMSG2 ;PRINT A MESSAGE
MOV AH,9
INT 21H

   LEA DX,INCHAR        ; PRINT THE ENTERED STRING
   MOV AH,9
INT 21H

   LEA DX,OUTMSG3       ;PRINT CONTAINS
   MOV AH,9
INT 21H

;----------PRINT NUMBERS
   MOV AX,NUMBER
   AAM
   ADD AX, 3030H
   MOV BX, AX
  
   ;PRINT HIGH NUMBER  
MOV DL,BH ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT LOW NUMBER
   MOV DL,BL ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT THE WORD NUMBERS
   LEA DX,NUMBERS ;PRINT A MESSAGE
MOV AH,9
INT 21H

;---------PRINT SYMBOLS
   MOV AX,SYMBOL
   AAM
   ADD AX, 3030H
   MOV BX, AX
  
   ;PRINT HIGH NUMBER  
MOV DL,BH ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT LOW NUMBER
   MOV DL,BL ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT THE WORD SYMBOLS
   LEA DX,SYMBOLS ;PRINT A MESSAGE
MOV AH,9
INT 21H

;---------PRINT CAPS
   MOV AX,CAPITAL
   AAM
   ADD AX, 3030H
   MOV BX, AX
  
   ;PRINT HIGH NUMBER  
MOV DL,BH ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT LOW NUMBER
   MOV DL,BL ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT THE WORD CAPITAL
   LEA DX,CAPS ;PRINT A MESSAGE
MOV AH,9
INT 21H
  
;---------PRINT LOWER CASE
   MOV AX,LOWER
   AAM
   ADD AX, 3030H
   MOV BX, AX
  
   ;PRINT HIGH NUMBER  
MOV DL,BH ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT LOW NUMBER
   MOV DL,BL ;OUTPUT THE CHARACTER TO THE SCREEN
MOV AH,2
INT 21H

   ;PRINT THE WORD LOWER CASE
   LEA DX,LCASEs ;PRINT A MESSAGE
MOV AH,9
INT 21H

MOV DX,OFFSET NEWLINE
MOV AH,9 ;MOVE CURSOR TO NEXT LINE
INT 21H

RET
MAIN ENDP
CODE_SEG ENDS
END MAIN
  

  

Explanation / Answer

include void main() { char str [81]; int nletter, ndigit, nspace, nother; /* char counts */ int i; clrscr(); printf("Enter a line of text: "); gets(str); /* count characters in string str */ nletter = ndigit = nspace = nother = 0;/* init counts */ i = 0; while (str[i] != '') { char ch= str[i]; if (ch>= 'A' && ch='a' && ch= '0' && ch
Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote