Come si scrive un programma per scoprire l'intervallo di tempo tra due eventi consecutivi utilizzando il linguaggio di programmazione 8086?
.MODELLO PICCOLO
.PISTA 100H
.DATI
STRING DB '$'; Stringa da visualizzare
MSG1 DB 0DH, 0AH, 'Inserisci la prima volta:$'; messaggio 1
MSG2 DB 0DH, 0AH, 'Inserisci la seconda volta:$'; messaggio 2
RISULTATO DB 0DH, 0AH, 'L'intervallo di tempo è:$'; messaggio 3
MSG3 DB 0DH, 0AH, '$'; messaggio 4
INGRESSO1 DB 2 DUP (?); buffer di input per la prima volta
INGRESSO2 DB 2 DUP (?); buffer di input per la seconda volta
USCITA DB 5 DUP (?); buffer di uscita
CRLF DB 0DH, 0AH, '$'; Ritorno a capo e avanzamento riga
.CODICE
PROC PRINCIPALE; Procedura principale
MOV AX, @DATI; Inizializza il segmento dati
MOV DS, AX
LEA DX, MSG1; Visualizzare il messaggio 1
MOV AH, 9
INT 21H
MOV AH, 1; Ottieni la prima volta
INT 21H
MOV AL, AH; Risparmia ora in AL
MOV BL, DL; Risparmia minuto in BL
MOV AH, 0; Cancella AH e AL
MOV AL, 0
MOV CX, 10; Moltiplicare l'ora per 10
MUL CX
MOVDL, AL; Risparmia ora in DL
USCITA MOV, DL; Memorizza l'ora nel buffer di output
USCITA MOV+1, ':'; Memorizza ":" nel buffer di output
MOV AH, 1; Prendi il minuto
INT 21H
USCITA MOV+2, BL; Memorizza i minuti nel buffer di output
USCITA MOV+3, ':'; Memorizza ":" nel buffer di output
LEA DX, USCITA; Visualizza la prima volta
MOV AH, 9
INT 21H
LEA DX, MSG2; Visualizzare il messaggio 2
MOV AH, 9
INT 21H
MOV AH, 1; Ottieni la seconda volta
INT 21H
MOV CH, AH; Risparmia ora in CH
MOVDH,DL; Risparmia minuti in DH
MOV AH, 0; Cancella AH e AL
MOV AL, 0
MOV CX, 10; Moltiplicare l'ora per 10
MUL CX
MOVDL, AL; Risparmia ora in DL
CMPDL,USCITA; Confronta gli orari
JB SUB_ORE; Se la 2a ora
SUB CH,USCITA; Sottrai la 2a ora dalla 1a ora
MOVDL, CH; Salva la differenza in DL
MOV AH, 0; Cancella AH e AL
MOV AL, 0
MOV CX, 10; Moltiplicare il minuto per 10
MUL CX
MOVDL, AL; Risparmia minuti in DL
CMPDL, USCITA+2; Confronta i minuti
JB SUB_MINUTI; Se 2° minuto <1° minuto, sottrai i minuti
SUB DH,USCITA+2; Sottrai il 2° minuto dal 1° minuto
MOVDL, DH; Salva la differenza in DL
JMP SALTA; Passa a saltare la visualizzazione dell'intervallo di tempo 'negativo'
SUB_ORE:; Sottrarre ore se necessario
MOVDL,24; Aggiungi 24 ore alla 2a ora
AGGIUNGI CH, DL
SUB CH, USCITA; Sottrai la 2a ora dalla 1a ora
MOVDL, CH; Salva la differenza in DL
SUB_MINUTI:; Sottrarre minuti se necessario
MOVDL,60; Aggiungere 60 minuti al 2° minuto
AGGIUNGI DH, DL
SUB DH, USCITA+2; Sottrai il 2° minuto dal 1° minuto
MOVDL, DH; Salva la differenza in DL
SALTARE:
USCITA MOV+4, DL; Memorizza la differenza minima nel buffer di output
LEA DX, USCITA; Visualizza l'intervallo di tempo
MOV AH, 9
INT 21H
LEA DX, RISULTATO; Visualizzare il messaggio 3
MOV AH, 9
INT 21H
MOV AH, 4CH; Esci con il codice di ritorno 0
INT 21H
ENDP PRINCIPALE; Fine della procedura principale
```