- 2072 Asoj · 8 marks
8086 ALP: vowels and consonants separately
Short answer
Read string using DOS 0Ah, classify each character as vowel, consonant, or other; display vowels then consonants on separate lines. Example Hello World gives vowels eoo and consonants HllWrld.
Write an assembly language program to read a string from the user and display vowels and consonants separately.
Method: read the string with function 0Ah. The procedure SHOWCLS scans the string and displays only the characters whose class (returned by CLASSIFY) equals the class in BH: 1 for vowels, 2 for consonants. It is called twice, so vowels appear on the first line and consonants on the second. Spaces, digits and symbols are ignored.
.MODEL SMALL
.STACK 100H
DISPSTR MACRO MSG ; display a '$'-terminated string
LEA DX,MSG
MOV AH,09H
INT 21H
ENDM
CLRSCR MACRO ; clear screen and home the cursor
MOV AX,0600H ; scroll whole window (AL=0 -> blank it)
MOV BH,07H ; normal attribute
MOV CX,0000H ; upper-left corner (row 0, col 0)
MOV DX,184FH ; lower-right corner (row 24, col 79)
INT 10H
MOV AH,02H ; set cursor position
MOV BH,00H ; page 0
MOV DX,0000H ; row 0, col 0
INT 10H
ENDM
.DATA
MSG1 DB 'Enter a string: $'
MSGV DB 13,10,'Vowels : $'
MSGC DB 13,10,'Consonants : $'
BUF DB 80, ?, 80 DUP(0) ; DOS buffered-input area (max, actual, chars)
CRLF DB 13,10,'$'
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
DISPSTR MSG1 ; prompt
LEA DX,BUF ; read the string with DOS function 0Ah
MOV AH,0AH
INT 21H
DISPSTR MSGV
MOV BH,1 ; class 1 = vowels
CALL SHOWCLS
DISPSTR MSGC
MOV BH,2 ; class 2 = consonants
CALL SHOWCLS
MOV AH,4CH ; return to DOS
INT 21H
MAIN ENDP
; ---- display characters of the string whose class = BH
SHOWCLS PROC
LEA SI,BUF+2
MOV CL,BUF+1
MOV CH,0
JCXZ SCEND
SC1:MOV DL,[SI]
CALL CLASSIFY ; AL = class of DL
CMP AL,BH
JNE SC2
MOV AH,02H ; display DL
INT 21H
SC2:INC SI
LOOP SC1
SCEND:RET
SHOWCLS ENDP
; ---- classify the character in DL
; returns AL = 1 vowel, 2 consonant, 0 not a letter (DL unchanged)
CLASSIFY PROC
MOV AL,DL
OR AL,20H ; fold to lower case (valid for letters)
CMP AL,'a'
JB NOTLET
CMP AL,'z'
JA NOTLET
CMP AL,'a'
JE VOW
CMP AL,'e'
JE VOW
CMP AL,'i'
JE VOW
CMP AL,'o'
JE VOW
CMP AL,'u'
JE VOW
MOV AL,2 ; consonant
RET
VOW:MOV AL,1 ; vowel
RET
NOTLET:MOV AL,0 ; not a letter
RET
CLASSIFY ENDP
END MAIN
Example: input Hello World → Vowels: eoo, Consonants: HllWrld.
✓ Answer checked by Claude Opus 5.5 (high effort)
Related questions
- 8086 ALP: count vowels and display string · Microprocessor, chapter 3
- 8086 ALP: count vowels, consonants, numerals · Microprocessor, chapter 3
- 8086 ALP: vowels to uppercase, counts · Microprocessor, chapter 3
- 8086 ALP: largest and smallest, display · Microprocessor, chapter 3
- 8086 ALP: alternate case display · Microprocessor, chapter 3
- 8086 assembly language operators · Microprocessor, chapter 3 · asked 3×