Skip to main content

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)

All Microprocessor chapter 3 questions →