.model small .stack .data .code .startup inicio1: mov dx,379h in al,dx cmp al , 5eh je comeca1 jmp inicio1 inicio2: mov dx,379h in al,dx cmp al , 6eh je comeca2 jmp inicio2 comeca1: call pegarhora ;chama procedimento que pega a hora do sistema ;registradores recebem os valores do primeiro horario mov ah,ch ;ah recebe hora mov al,cl ;al recebe minutos push ax ;armazena ax no topo da pilha mov bx,dx push bx ;mov bh,dh ;bh recebe segundos ;mov bl,dl ;bl recebe centesimos de segundo xor cx,cx xor dx,dx jmp inicio2 comeca2: call pegarhora ;chama procedimento que pega a hora do sistema pop bx pop ax ;ax recebe o topo da pilha sub ch,ah ;nova hora recebe nova hora menos hora antiga mov ah,ch ;ah recebe a diferença de horas sub cl,al ;novo minuto recebe novo minuto menos minuto antigo mov al,cl ;al recebe a diferença de minutos sub dh,bh ;novo segundo recebe novo segundo menos segundo antigo mov bh,dh ;bh recebe a diferença de segundos sub dl,bl ;novo centesimo recebe novo centesimo menos centesimo antigo mov bl,dl ;bl recebe a diferença de centesimos de segundo volta: cmp bl,100d ;compara a diferença de centesimos de segundos com 100 jg somacentesimo ;se bl for maior do que 100, pula para somacentesimo cmp bh,60d ;compara a diferença de segundos com 60 jg somasegundo ;se bh for maior do que 60, pula para somacentesimo cmp al,60d ;compara a diferença de minutos com 60 jg somaminuto ;se al for maior do que 60, pula para somaminuto cmp ah,24d ;compara a diferença de horas com 24 jg somahora ;se ah for maior do que 24, pula para somahora jmp transformatempo somacentesimo: ;soma os centesimos com 100 add bl,100d sub bh,1 jmp volta ;desvia para volta somasegundo: ;soma os segundos com 60 add bh,60d sub al,1 jmp volta ;desvia para volta somaminuto: ;soma os minutos com 60 add al,60d sub ah,1 jmp volta ;desvia para volta somahora: ;soma a hora resultante com 24 add ah,24d jmp volta ;desvia para volta transformatempo: ;tranforma o tempo em centesimos de segundo e como hora e minutos ;são desnecessários, uma vez que o veículo passa muito rapido pela ;lombada, não será necessária sua conversão cmp bh,0 je depois xor ax,ax ;zera o registrador ax xor ch,ch ;zera o registrador ch xor dx,dx ;zera o registrador dx mov dl, bh ;dl recebe os segundos ciclo: cmp ch,100d ;loop continua até ch ser 100, ou seja, multiplicação por 100 je depois add ax, dx ;ax eh somado 100 vezes com dl, para transformar segundos em centesimos add ch,1d jmp ciclo depois: mov bh,0 ;os segundos sao zerados mov dx,ax ;dx recebe o valor final da multiplicação add dx,bx ;dx, que possui a transformação de segundos em centésimos, ;agora soma com os centésimos já existentes mov ax, 4500d ;ax é o numerador, e recebe 4000d, que é a distância, para ser dividida pelo tempo xor cx,cx voltada: sub ax,dx add cx,1 cmp ax,dx jge voltada jmp inicio1 fim: xor ax, ax ;registrador a é zerado mov ax,4c00h ;programa é finalizado int 21h ;interrupção do infra vermelho, pegando o horario pegarhora PROC mov ah, 2ch ;funçao de pegar a hora int 21h RET ;dh = (segundos) da hora atual pegarhora ENDP end