- 2071 Magh · 8 marks
8086 ALP: display only alphabetic characters
Short answer
Read the string with function 0Ah and clear the screen. Classify each character: return 1 for vowel, 2 for consonant, 0 for non-letter. Only display characters whose classification is nonzero using function 02h, so digits, spaces and symbols are skipped. Example: B.C.T 2079! outputs BCT.
Write a program to read a string and display only the alphabetic characters from the string in a clear screen.
Method: read the string, clear the screen and examine each character with CLASSIFY (it returns 0 for non-letters, 1 for vowels and 2 for consonants). Only characters with AL ≠ 0 are displayed, so digits, spaces and symbols are dropped.
.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: $'
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
CLRSCR
LEA SI,BUF+2
MOV CL,BUF+1
MOV CH,0
JCXZ EXIT
NEXT:
MOV DL,[SI]
CALL CLASSIFY ; AL = 0 -> not a letter
CMP AL,0
JE SKIP
MOV AH,02H ; letter -> display it
INT 21H
SKIP:
INC SI
LOOP NEXT
EXIT:
MOV AH,4CH ; return to DOS
INT 21H
MAIN 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 B.C.T 2079! → output BCT.
✓ Answer checked by Claude Opus 5.5 (high effort)
Related questions
- 8086 ALP: count vowels and display string · Microprocessor, chapter 3
- 8086 ALP: alternate case display · Microprocessor, chapter 3
- 8086 ALP: largest and smallest, display · Microprocessor, chapter 3
- 8086 ALP: count vowels, consonants, numerals · Microprocessor, chapter 3
- 8086 ALP: words on separate lines, centered · Microprocessor, chapter 3
- 8086 ALP: words on lines and word count · Microprocessor, chapter 3
- Rewrite string characters alphabetically · Computer Programming, chapter 7
- Display N characters using default arguments · Object Oriented Programming, chapter 3
- Display characters between given ranges · Computer Programming, chapter 5
- Check string consists of alphabet only · Computer Programming, chapter 7