LPT1D EQU 3BCH LPT1S EQU LPT1D+1 .MODEL SMALL .STACK 100H .DATA TELLER DB 1 TABEL DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH .CODE ;Hoofdprogramma. MOV AX,@DATA MOV DS,AX MOV [TELLER],0 ;teller:=0 BEGIN: MOV AL,[TELLER] ;lees teller in AL CALL SEGM7 ;zet AL om naar 7 segmentscode CALL LPTOUT ;schrijf AL naar U7 t/m U0 CALL LPTIN ;lees I3 t/m I0 in AL AND AL,03H ;maskeer I3 en I2 MOV BL,AL ;waarde I1 en I0 in BL WACHT: CALL LPTIN ;lees I3 t/m I0 in AL AND AL,03H ;maskeer I3 en I2 XOR AL,BL ;wacht tot er iets veranderd JE WACHT AND AL,02H ;als I1 veranderd is CMP AL,02H ;dan JE EINDE ; spring naar EINDE INC [TELLER] ;teller:=teller+1 CMP [TELLER],9 ;als teller>9 JBE BEGIN ;dan MOV [TELLER],0 ; teller:=0 JMP BEGIN ;spring naar BEGIN EINDE: MOV AH,4CH ;terug naar OS INT 21H ;Subroutine LPTIN. ;Register AL bevat na afloop de waarde op I3 t/m I0 van LPT1. LPTIN: MOV DX,LPT1S IN AL,DX AND AL,78H MOV CL,3 SHR AL,CL RET ;Subroutine LPTOUT. ;Schrijf de inhoud van register AL naar U7 t/m U0 van LPT1. LPTOUT: MOV DX,LPT1D OUT DX,AL RET ;Subroutine SEGM7. ;Zet de inhoud van AL om naar 7 segmentscode. SEGM7: MOV BX,OFFSET TABEL MOV AH,0 ADD BX,AX MOV AL,[BX] RET END