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' && chRelated Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.