Enviado em 09/07/2017 - 01:11h
Boa noite a todos
mov dl,0ffh
mov ah,6h
int 21h
PILHA SEGMENT; Come?o da pilha
PILHA ENDS; Fim da pilha
DADOS SEGMENT; Come?o dos dados
min DB 00
segn DB 00
cent DB 00
coluna_ativa DB 00
TMP1 DB '0.5 seg$'
TMP2 DB '1.0 seg$'
TMP3 DB '1.5 seg$'
TMP4 DB '2.0 seg$'
MSG1 DB ' ?????????????????????????????????????????????????????????????????????????????',0AH,0DH
DB ' ? PISCA LEDS ? ',0AH,0DH
DB ' ?????????????????????????????????????????????????????????????????????????????',0AH,0DH
DB ' ',0AH,0DH
DB ' ',0AH,0DH
DB ' ???????????????????? ',0AH,0DH
DB ' ? A ? 0.5 segundos ? ',0AH,0DH
DB ' ? B ? 1.0 segundos ? ',0AH,0DH
DB ' ? C ? 1.5 segundos ? ',0AH,0DH
DB ' ? D ? 2.0 segundos ? ',0AH,0DH
DB ' ? S ? Parar Ciclo ? ',0AH,0DH
DB ' ? P ? Sair ? ',0AH,0DH
DB ' ????????????????????', 0AH,0DH
DB ' ',0AH,0DH
DB ' ',0AH,0DH
DB ' ??????????????????????????????? ',0AH,0DH
DB ' ? Tempo Selecionado ? ? ',0AH,0DH
DB ' ? Coluna Ativa ? ? ',0AH,0DH
DB ' ???????????????????????????????', 0AH,0DH
DB ' ',0AH,0DH
DB ' ',0AH,0DH
DB ' Insira um comando: ','$'
DADOS ENDS; Fim dos dados
CODIGO SEGMENT; Come?o do programa
ASSUME CS:CODIGO, DS:DADOS, SS:PILHA
delay:
push ax
push bx
push cx
push dx
mov ah,2ch; ler o tempo corrente
int 21h; CH=horas, CL=minutos, DH=segundos, DL=cent?simos
mov al, min
mov bh, segn
mov bl, cent
;somar o tempo corrente com o tempo de delay
mov ah,ch; horas
add al,cl; minutos
add bh,dh; segundos
add bl,dl; cent?simos
;corre??o de cent?simos, segundos, minutos e horas
cmp bl,100; o n?mero de cent?simos <100
jb secs
sub bl,100
inc bh
secs:
cmp bh,60; o n?mero de seg <60
jb mins
sub bh,60
inc al
mins:
cmp al,60; o n?mero de min <60
jb hrs
sub bh,60
inc ah
hrs:
cmp ah,24; o n?mero de horas <24
jne check
sub ah, ah
; esperar o valor de pausa
check:
push ax;
mov ah,2ch; ler o tempo real de novo
int 21h
pop ax
cmp cx,ax; comparar horas e minutos
ja quit
jb check
cmp dx,bx; comparar segundos e cent?simos
jb check
quit:
pop dx
pop cx
pop bx
pop ax
ret
limpa_tela:
MOV AH, 6h ; configura INT10 para scroll window up
MOV AL, 0h ; numero de linhas a limpar -> 0h = todas
MOV CH, 0h ; primeira linha
MOV CL, 0h ; primeira coluna
MOV DH, 24 ; ultima linha
MOV DL, 79 ; ultima coluna
MOV BH, 0AH ; Fundo Preto com letra verde ;
INT 10h
RET
tela:
MOV DX, OFFSET MSG1;
MOV AH, 9H; Registrador AH recebe o servi?o 9h do DOS para mostrar string
int 21h;
RET
posiciona_tela:
mov AH,2h; Posicionar o cursor
MOV BH,0H; Pagina zero
MOV DH,0H; Linha
MOV DL,0H; Coluna
int 10h ; Servi?o
ret
entrada:
MOV AH,01H; Servi?o para entrada de caracter
INT 21H;
AND AX,00FFH; m?scara para separar AL
ret
posiciona_tempo:
mov AH,2h; Posicionar o cursor
MOV BH,0H; Pagina zero
MOV DH,10H; Linha
MOV DL,2FH; Coluna
int 10h ; Servi?o
ret
posiciona_coluna:
push ax;
push bx
push dx;
mov AH,2h; Posicionar o cursor
MOV BH,0H; Pagina zero
MOV DH,11H; Linha
MOV DL,32H; Coluna
int 10h ; Servi?o
pop dx;
pop bx;
pop ax;
ret
zera_opcao:
mov ax,1h
mov dx, 300h
mov coluna_ativa,31h;
ret
printa_coluna:
push ax;
push dx;
mov dl,coluna_ativa;
mov ah,02h;
int 21h
pop dx;
pop ax;
ret
desliga_led:
push ax;
mov ax, 0h
out dx, ax
pop ax;
ret
move_led:
shl ax,1;
inc coluna_ativa;
cmp ax,20h;
ret
para_led:
push dx;
mov Dl, 0ffh
mov ah,6
int 21h
pop dx;
cmp al, 's'
ret
zera_ciclo:
mov ax,1
mov dx,300h;
mov coluna_ativa,31h;
ret
posiciona_cursor:
push ax;
push bx
push dx;
mov AH,2h; Posicionar o cursor
MOV BH,0H; Pagina zero
MOV DH,15H; Linha
MOV DL,33H; Coluna
int 10h ; Servi?o
pop dx;
pop bx;
pop ax;
ret
finaliza_ok:
MOV AH, 4CH;
INT 21H; chamada do DOS
ret
INICIO:
MOV AX, DADOS; OBRIGAT?RIO
MOV DS, AX; OBRIGAT?RIO
MOV AX,PILHA;
MOV SS,AX;
mov DX, 303h
mov AL, 80h
out DX,AL
start:
call limpa_tela;
call posiciona_tela
call tela;
call entrada;
CMP AX,'p';
je finaliza
cmp ax,'a';
jb start;
cmp ax,'d';
jg start;
push ax
call entrada;
cmp ax,0dh;
jne start;
pop ax;
CMP AX,'a';
je meio;
CMP AX,'b';
je um;
CMP AX,'c';
je um_meio;
CMP AX,'d';
je dois
finaliza:
mov ah,01h;
int 21h;
cmp al,0dh;
je finaliza_ok;
jmp start;
meio:
call posiciona_tempo;
mov ah,09h;
mov dx, OFFSET TMP1
int 21h;
call zera_opcao;
mov segn,0;
mov cent,50;
jmp sequencia;
um:
call posiciona_tempo;
mov ah,09h;
mov dx, OFFSET TMP2
int 21h;
call zera_opcao;
mov segn,1
mov cent,0;
jmp sequencia;
um_meio:
call posiciona_tempo;
mov ah,09h;
mov dx, OFFSET TMP3
int 21h;
call zera_opcao;
mov segn,1;
mov cent,50;
jmp sequencia;
dois:
call posiciona_tempo;
mov ah,09h;
mov dx, OFFSET TMP4
int 21h;
call zera_opcao;
mov segn,2;
mov cent,0;
sequencia:
call posiciona_coluna;
call printa_coluna
call posiciona_cursor;
out dx, ax
call delay;
call desliga_led;
call move_led;
jne sequencia;
call para_led;
je fim_ciclo
mov ah,0ch;
int 21h;
call zera_ciclo;
jmp sequencia;
fim_ciclo:
jmp start;
CODIGO ENDS; Fim do programa
END INICIO; Fim da rotina inicio
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Redirecioname... de pasta desktop em cliente Linux ingressado a um AD ... (0)
Trocando modo IDE por AHCI (0)
Notebook Novo. Aceita Duplo Boot? (4)
HD externo modelo SDK SSD com 15,26 TiB aparece como unidade não aloc... (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta