As an example consider the processing components and their relationships illustrated in Fig. 6-10. The main program is to initialize the necessary interrupt pointers and then begin its normal processing. As it is executing, interrupt I/O is used to input a line of characters to a buffer that is pointed to by BUFF_POINT.

 INT_SEG    SEGMENT
  ASSUME  CS:INT_SEG, DS:DATA_SEG            ;PARAMETERS ARE ACCESSIBLE VIA DS
    IN_BUF      EQU  52H
    OUT_BUF     EQU  53H
    CONTROL     EQU  54H
    ENABLE_OUT  EQU  00000001B
    INT_ROUT:   PUSH AX                    ;SAVE REGISTERS
                PUSH BX
                IN   AL, IN_BUF            ;INPUT CHARACTER
                MOV  BX, BUFF_POINT        ;AND STORE IN
                MOV  [BX], AL              ;MEMORY BUFFER
                INC  BX                    ;INCREMENT BUFFER POINTER
                INC  COUNT                 ;AND COUNT
                MOV  BUFF_POINT, BX        ;STORE BUFFER POINTER
                CMP  AL, 0DH               ;CHECK FOR CARRIAGE
                JNZ  NO_CR                 ;RETURN AND
                MOV  BYTE PTR [BX+1], 0AH  ;APPEND A LINE FEED
                INC  COUNT
                MOV  CODE, 2               ;SET CODE TO 2 SO MAIN ROUTINE
                XOR  AL, AL                ;MAY CALL PROCEDURE LINE PROC
                OUT  CONTROL, AL           ;ALSO DISABLE INPUT DEVICE
                JMP  CONT
       NO_CR:   CMP  COUNT, 81             ;CHECK FOR OVERFLOW
                JB   CONT                  ;IF NO RETURN
                MOV  CODE, 1               ;OTHERWISE SET CODE TO 1
                MOV  MSGCOUNT, 0           ;ZERO MSGCOUNT
                MOV  AL, ENABLE_OUT        ;DISABLE INPUT AND ENABLE
                OUT  CONTROL, AL           ;OUTPUT
        CONT:   POP  BX                    ;RESTORE REGISTERS
                POP  AX
                IRET

;THE FOLLOWING INTERRUPT SERVICE ROUTINE OUTPUTS ONE CHARACTER
;FROM MESSAGE WHEN INTERRUPT FROM OUTPUT DEVICE OCCURS

    OVERFLOW:   PUSH AX                    ;SAVE REGISTERS
                PUSH BX
                MOV  BX, MSGCOUNT
                MOV  AL, MESSAGE[BX]       ;OUTPUT A CHARACTER
                OUT  OUT_BUF, AL
                INC  MSGCOUNT              ;INCREMENT COUNTER
                CMP  AL, OAH               ;LAST CHARACTER IN MESSAGE?
                JNE  RETURN                ;NO, RETURN, OTHERWISE
                XOR  AL, AL                ;DISABLE FURTHER INTERRUPT
                OUT  CONTROL, AL           ;FROM OUTPUT
      RETURN:   POP  BX                    ;RESTORE REGISTERS
                POP  AX
                IRET
INT_SEG    ENDS

             Figure 6-11 Interrupt routine for inputing a line of characters

PRETHODNA FOLIJA SADRZAJ SLEDECA FOLIJA