LPT1D EQU 3BCH LPT1S EQU LPT1D+1 .MODEL SMALL .STACK 100H .DATA CODE DB 0, 4, 7, 1, 3, 2 .CODE ;Hoofdprogramma. MOV AX,@DATA MOV DS,AX MOV AL,0 CALL LPTOUT ;U7 t/m U0 := 0; MOV SI,0 ;SI:=0; MOV BX,OFFSET CODE ;BX wijst naar het eerste cijfer LUS: CALL CODEIN ;lees cijfer CMP AL,[BX+SI] ;vergelijk met door BX+SI aangewezen cijfer JNE ERROR ;ga naar ERROR als niet gelijk INC SI ;SI:=SI+1 CMP SI,6 ;alle cijfers gehad? JNE LUS ;nee: ga naar LUS MOV AL,1 CALL LPTOUT ;ja: U0:=1 JMP EINDE ;ga naar EINDE ERROR: MOV AL,2 CALL LPTOUT ;U1:=1 EINDE: MOV AH,4CH ;terug naar OS INT 21H ;Subroutine CODEIN. ;Wacht tot I3 hoog wordt ;Register AL bevat na afloop de waarde op I2 t/m I0 van LPT1. CODEIN: MOV DX,LPT1S WACHT0: IN AL,DX AND AL,40H ;lees I3 JNE WACHT0 ;wacht tot I3=0 CALL ADENDER ;wacht tot dender voorbij is WACHT1: IN AL,DX AND AL,40H ;lees I3 JE WACHT1 ;wacht rot I3=1 CALL ADENDER ;wacht tot dender voorbij is IN AL,DX AND AL,38H ;lees I2 t/m I0 MOV CL,3 SHR AL,CL ;AL:=I2 t/m I0 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 ADENDER ;Wacht totdat het denderen van de schakelaar voorbij is. ADENDER:MOV CX,0H TIJDV: DEC CX JNE TIJDV RET END