Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; multi-segment executable file template.
- include 'emu8086.inc' ;include la libreria di funzioni standard
- data segment
- ; add your data here!
- user db "admin" ;username originale
- psw db "password" ;password originale
- arrayuser db 20 dup (0) ;username da inserire (stringa di 20 caratteri inizializzati a 0)
- arraypsw db 20 dup (0) ;password da inserire (stringa di 20 caratteri inizializzati a 0)
- pkey db 10, 13, "premi un tasto per continuare...$"
- ends
- stack segment
- dw 128 dup(0) ;roba inutile che non utilizzeremo mai
- ends
- code segment
- start:
- ; set segment registers:
- mov ax, data ;altra roba inutile
- mov ds, ax
- mov es, ax
- ; add your code here
- call pthis ;funzione di libreria che stampa quello che ho scitto dopo
- db "Inserisci username: ", 0
- call inserimentouser ;vedi procedura
- uscitaciclo: ;etichetta di uscita ciclo da inserimentouser
- call a_capo ;come l'altra call pthis
- call pthis
- db "Inserisci password: ", 0
- call inserimentopsw ;vedi procedura
- confronto: ;uscita dalla procedura inserimentopsw
- call confrontouser ;vedi procedura
- call confrontopsw ;vedi procedura
- ;se confrontouser e confrontopsw non sono saltate ad errore
- ;stampa il messaggio
- call a_capo
- call pthis
- db "Login effettuato con successo", 0
- call a_capo
- jmp fine ;impedisce di stampare anche il messaggio di errore
- ;saltando all'etichetta "fine"
- errore:
- call a_capo ;se le username o password sono sbagliati
- call pthis ;stampa il messaggio di errore
- db "Errore! Username o password non corretti!", 0
- call a_capo
- fine:
- lea dx, pkey ;roba inutile
- mov ah, 9
- int 21h ; output string at ds:dx
- ; wait for any key....
- mov ah, 1
- int 21h
- mov ax, 4c00h ; exit to operating system.
- int 21h
- ends
- inserimentouser proc
- xor si, si ;xor si, si azzera SI, utilizzato come indice del vettore arrayuser
- label_inserimentouser:
- mov ah, 1 ;mov ah, 1 e int 21h permettono di acquisire un carattere da tastiera
- int 21h ;il carattere inserito finisce in al
- mov arrayuser[si], al ;sposta al nel vettore
- cmp arrayuser[si], 13 ;se il carattere e' invio, l'inserimento finisce
- je uscitaciclo
- inc si ;incrementa l'indice
- cmp si, 20 ;se si e' raggiunta la dimensione massima, l'inserimento finisce
- je uscitaciclo
- jmp label_inserimentouser ;ritorna a label_inserimentouser ed esegue il ciclo
- ret
- inserimentouser endp
- inserimentopsw proc
- xor si, si ;azzeramento indice
- label_inserimentopsw: ;mov ah, 7 e int 21h permettono l'acquisizione di un carattere
- mov ah, 7 ;senza che questo venga mostrato sullo schermo
- int 21h ;il carattere finisce in al
- mov arraypsw[si], al ;muove al nel vettore
- cmp arraypsw[si], 13 ;se e' stato inserito un invio, esce dal ciclo
- je confronto
- mov ah, 2 ;mov ah, 2 mov dl, '*' int 21h stampano l'asterisco
- mov dl, '*'
- int 21h
- inc si ;incrementa l'indice
- cmp si, 20 ;se si e' raggiunta la dimensione massima
- je confronto ;esce dal ciclo
- jmp label_inserimentopsw ;ripete il ciclo
- ret
- inserimentopsw endp
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- confrontouser proc
- xor si, si ;azzera l'indice
- mov cx, 5 ;contatore del ciclo (verra' eseguito 5 volte) perche' 5 e' la lunghezza di "admin"
- label_confrontouser:
- mov al, arrayuser[si] ;muove un elemento del vettore inserito in al
- mov bl, user[si] ;muove un elemento del vettore gia' presente in bl
- cmp al, bl ;compara i due caratteri, se non sono uguali
- jne errore ;salta al messaggio di errore
- inc si
- loop label_confrontouser ;loop riesegue il ciclo e decrementa cx, quando cx e' 0 la procedura termina automaticamente
- ret
- confrontouser endp
- confrontopsw proc ;azzera l'indice
- xor si, si ;contatore del ciclo (verra' eseguito 8 volte) perche' 8 e' la lunghezza di "password"
- mov cx, 8
- label_confrontopsw:
- mov al, psw[si] ;muove un carattere della password originale in al
- cmp arraypsw[si], al ;compara un carattere della password inserita con al
- jne errore ;se non sono uguali salta al messaggio di errore
- inc si ;senno' incrementa l'indice
- loop label_confrontopsw ;riesegue il ciclo e decrementa cx fino a che cx=0
- ret
- confrontopsw endp
- a_capo proc
- mov ah, 2 ;come per l'asterisco, solo che 10 e 13
- mov dl, 10 ;stampano insieme l'invio
- int 21h
- mov ah, 2
- mov dl, 13
- int 21h
- ret
- a_capo endp
- DEFINE_PTHIS ;dice al programma che verra' utilizzata la funzione pthis
- end start ; set entry point and stop the assembler.
Add Comment
Please, Sign In to add comment