DATA_SEG     SEGMENT
   MESSAGE       DB        'BUFFER OVERFLOW',0DH,0AH
                  .
                  .
                  .
DATA_SEG     ENDS
COM_SEG      SEGMENT       COMMON
    BUFFER       DB        82 DUP(?)           ;RESERVE BUFFER AREA
    COUNT        DW         ?                  ;AND COUNT
COM_SEG      ENDS
                  .
                  .
                  .
    IN_BUFF      EQU       52H                 ;ASSIGN NAMES TO
    OUT_BUFF     EQU       53H                 ;INTERFACE REGISTER
    STATUS       EQU       54H                 ;ADDRESS
    RRDY         EQU       00000010B           ;AND READY BITS
    TRDY         EQU       00000001B           ;IN STATUS REGISTER
                  .
                  .
                  .
  ASSUME   DS:DATA_SEG, ES:COM_SEG
                 MOV  AX, DATA_SEG              ;INITIALIZE THE DS
                 MOV  DS, AX                    ;AND ES REGISTERS
                 MOV  AX, COM_SEG
                 MOV  ES, AX
                  .
                  .
                  .
                 MOV  DI, OFFSET BUFFER         ;INITIALIZATION NEEDED
                 MOV  COUNT, DI
                 MOV  CX, 81                    ;FOR INPUT
                 CLD                            ;CLEAR DF FOR AUTOINCREMENT
    NEXT_IN:     IN   AL, STATUS                ;IDLE UNTIL CHARACTER
                 TEST AL, RRDY                  ;IS PUT IN INPUT
                 JZ   NEXT_IN                   ;BUFFER REGISTER
                 IN   AL, IN_BUFF               ;INPUT CHARACTER
                 OR   AL, 0                     ;CHECK PARITY AND
                 JPE  NO_ERROR                  ;BRANCH TO ERROR
                 JMP  NEAR PTR ERROR            ;IF PARITY IS ODD
    NO_ERROR:    AND  AL, 7FH                   ;ELSE, CLEAR PARITY BIT
                 STOSB                          ;MOVE CHARACTER TO BUFFER
                 CMP  AL, 0DH                   ;CHECK FOR CARRIAGE RETURN
                 LOOPNE NEXT_IN                 ;LOOP IF NO CR OR OVERFLOW
                 JNE  OVERFLOW                  ;BRANCH ON OVERFLOW
                 MOV  AL, 0AH                   ;APPEND LINE FEED
                 STOSB
                 SUB  DI, COUNT
                 MOV  COUNT, DI                 ;STORE NO. OF CHARACTERS
                  .
                  .
                  .
    OVERFLOW:    MOV  SI, OFFSET MESSAGE        ;INITIALIZATION NEEDED
                 MOV  CX, 17                    ;FOR OUTPUT
    NEXT_OUT:    IN   AL, STATUS                ;IDLE UNTIL OUTPUT
                 TEST AL,TRDY                   ;BUFFER REGISTER
                 JZ   NEXT_OUT                  ;IS EMPTY
                 LODSB                          ;OUTPUT CHARACTER
                 OUT OUT_BUFF, AL
                 LOOP NEXT_OUT
                  .
                  .
                  .
                      Figure 6-6  Programmed I/O example   

PRETHODNA FOLIJA SADRZAJ SLEDECA FOLIJA