>> Tecnologia eletrônica >  >> Áudio pessoal >> rádio-relógio

Como você escreve um programa para descobrir o intervalo de tempo entre dois eventos consecutivos usando a linguagem de programação 8086?

```
.MODELO PEQUENO
.PILHA 100H
.DADOS
STRING BD '$'; String a ser exibida
MSG1 DB 0DH, 0AH, 'Insira a 1ª vez:$'; mensagem 1
MSG2 DB 0DH, 0AH, 'Insira a 2ª vez:$'; mensagem 2
RESULT DB 0DH, 0AH, 'O intervalo de tempo é:$'; mensagem 3
MSG3 DB 0DH, 0AH, '$'; mensagem 4
ENTRADA1 BD 2 DUP (?); buffer de entrada pela 1ª vez
ENTRADA2 BD 2 DUP (?); buffer de entrada pela 2ª vez
SAÍDA DB 5 DUP (?); buffer de saída
CRLF DB 0DH, 0AH, '$'; Retorno de carro e alimentação de linha

.CÓDIGO
PROC PRINCIPAL; Procedimento principal

MOV AX, @DADOS; Inicializar segmento de dados
MOV DS, AX

LEA DX, MSG1; Exibir mensagem 1
MOV AH, 9
INT 21H

MOVAH, 1; Obtenha a 1ª vez
INT 21H
MOV AL, AH; Economize hora em AL
MOVBL,DL; Economize minuto em BL
MOVAH, 0; Limpar AH e AL
MOV AL, 0
MOV CX, 10; Multiplique a hora por 10
MUL CX
MOV DL, AL; Economize horas em DL
SAÍDA MOV, DL; Armazenar hora no buffer de saída
SAÍDA MOV+1, ':'; Armazene ':' no buffer de saída

MOVAH, 1; Obtenha o minuto
INT 21H
SAÍDA MOV+2, BL; Armazene minutos no buffer de saída
SAÍDA MOV+3, ':'; Armazene ':' no buffer de saída

LEA DX, SAÍDA; Exibir pela 1ª vez
MOV AH, 9
INT 21H

LEA DX, MSG2; Exibir mensagem 2
MOV AH, 9
INT 21H

MOVAH, 1; Obtenha a 2ª vez
INT 21H
MOVCH, AH; Economize horas em CH
MOVDH,DL; Economize minutos em DH
MOVAH, 0; Limpar AH e AL
MOV AL, 0
MOV CX, 10; Multiplique a hora por 10
MUL CX
MOV DL, AL; Economize horas em DL
CMP DL, SAÍDA; Comparar horários
JB SUB_HOURS; Se 2ª hora <1ª hora, subtraia as horas

SUBCH,SAÍDA; Subtraia a 2ª hora da 1ª hora
MOV DL, CH; Salvar diferença em DL

MOVAH, 0; Limpar AH e AL
MOV AL, 0
MOV CX, 10; Multiplique minuto por 10
MUL CX
MOV DL, AL; Economize minutos em DL
CMP DL, SAÍDA+2; Comparar minutos
JB SUB_MINUTES; Se 2º minuto <1º minuto, subtraia os minutos

SUB DH,SAÍDA+2; Subtraia o 2º minuto do 1º minuto
MOV DL, DH; Salvar diferença em DL

JMP Pular; Salte para pular a exibição do intervalo de tempo 'negativo'

SUB_HORAS:; Subtraia horas se necessário
MOVDL, 24; Adicione 24 horas à 2ª hora
ADICIONAR CH, DL
SUB CH, SAÍDA; Subtraia a 2ª hora da 1ª hora
MOV DL, CH; Salvar diferença em DL

SUB_MINUTES:; Subtraia minutos se necessário
MOVDL, 60; Adicione 60 minutos ao segundo minuto
ADICIONAR DH, DL
SUBDH, SAÍDA+2; Subtraia o 2º minuto do 1º minuto
MOV DL, DH; Salvar diferença em DL

PULAR:
SAÍDA MOV+4, DL; Armazene a diferença de minutos no buffer de saída
LEA DX, SAÍDA; Exibir intervalo de tempo
MOV AH, 9
INT 21H

LEA DX, RESULTADO; Exibir mensagem 3
MOV AH, 9
INT 21H

MOVAH, 4CH; Sair com código de retorno 0
INT 21H

PRINCIPAL PEND; Fim do procedimento principal
```