Guest User

Untitled

a guest
Jun 10th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; multi-segment executable file template.
  2.  
  3. include 'emu8086.inc'                ;include la libreria di funzioni standard
  4.  
  5. data segment
  6.     ; add your data here!
  7.    
  8.     user db "admin"                  ;username originale
  9.     psw db "password"                ;password originale
  10.     arrayuser db 20 dup (0)          ;username da inserire (stringa di 20 caratteri inizializzati a 0)
  11.     arraypsw db 20 dup (0)           ;password da inserire (stringa di 20 caratteri inizializzati a 0)
  12.     pkey db 10, 13, "premi un tasto per continuare...$"
  13. ends
  14.  
  15. stack segment
  16.     dw   128  dup(0)                ;roba inutile che non utilizzeremo mai
  17. ends
  18.  
  19. code segment
  20. start:
  21. ; set segment registers:
  22.    
  23.     mov ax, data                     ;altra roba inutile
  24.     mov ds, ax
  25.     mov es, ax
  26.  
  27.     ; add your code here
  28.    
  29.    
  30.     call pthis                       ;funzione di libreria che stampa quello che ho scitto dopo
  31.     db "Inserisci username: ", 0
  32.     call inserimentouser             ;vedi procedura
  33.  
  34. uscitaciclo:                         ;etichetta di uscita ciclo da inserimentouser
  35.     call a_capo                      ;come l'altra call pthis
  36.     call pthis
  37.     db "Inserisci password: ", 0
  38.     call inserimentopsw              ;vedi procedura
  39.    
  40. confronto:                           ;uscita dalla procedura inserimentopsw
  41.     call confrontouser               ;vedi procedura
  42.     call confrontopsw                ;vedi procedura
  43.                                      
  44.                                      
  45.                                      ;se confrontouser e confrontopsw non sono saltate ad errore
  46.                                      ;stampa il messaggio
  47.     call a_capo
  48.     call pthis                      
  49.     db "Login effettuato con successo", 0
  50.     call a_capo    
  51.     jmp fine                          ;impedisce di stampare anche il messaggio di errore
  52.                                       ;saltando all'etichetta "fine"
  53.    
  54. errore:
  55.     call a_capo                       ;se le username o password sono sbagliati
  56.     call pthis                        ;stampa il messaggio di errore
  57.     db "Errore! Username o password non corretti!", 0
  58.     call a_capo
  59.    
  60.  
  61. fine:
  62.     lea dx, pkey                       ;roba inutile
  63.     mov ah, 9
  64.     int 21h        ; output string at ds:dx
  65.    
  66.     ; wait for any key....    
  67.     mov ah, 1
  68.     int 21h
  69.    
  70.     mov ax, 4c00h ; exit to operating system.
  71.     int 21h    
  72.  
  73.  
  74.  
  75. ends
  76.  
  77.  
  78. inserimentouser proc
  79.     xor si, si                         ;xor si, si azzera SI, utilizzato come indice del vettore arrayuser
  80. label_inserimentouser:    
  81.     mov ah, 1                          ;mov ah, 1   e int 21h permettono di acquisire un carattere da tastiera
  82.     int 21h                            ;il carattere inserito finisce in al
  83.     mov arrayuser[si], al              ;sposta al nel vettore
  84.     cmp arrayuser[si], 13              ;se il carattere e' invio, l'inserimento finisce
  85.     je uscitaciclo
  86.     inc si                             ;incrementa l'indice
  87.     cmp si, 20                         ;se si e' raggiunta la dimensione massima, l'inserimento finisce
  88.     je uscitaciclo
  89.     jmp label_inserimentouser          ;ritorna a label_inserimentouser ed esegue il ciclo
  90.     ret
  91. inserimentouser endp
  92.  
  93.            
  94.            
  95.            
  96.            
  97. inserimentopsw proc
  98.     xor si, si                          ;azzeramento indice
  99.  
  100. label_inserimentopsw:                   ;mov ah, 7  e int 21h permettono l'acquisizione di un carattere
  101.     mov ah, 7                           ;senza che questo venga mostrato sullo schermo
  102.     int 21h                             ;il carattere finisce in al
  103.     mov arraypsw[si], al                ;muove al nel vettore
  104.     cmp arraypsw[si], 13                ;se e' stato inserito un invio, esce dal ciclo
  105.     je confronto
  106.     mov ah, 2                           ;mov ah, 2 mov dl, '*' int 21h stampano l'asterisco
  107.     mov dl, '*'
  108.     int 21h
  109.     inc si                              ;incrementa l'indice
  110.     cmp si, 20                          ;se si e' raggiunta la dimensione massima
  111.     je confronto                        ;esce dal ciclo
  112.     jmp label_inserimentopsw            ;ripete il ciclo
  113.     ret
  114. inserimentopsw endp
  115.                  
  116.                  
  117. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                
  118.                  
  119.                  
  120. confrontouser proc
  121.     xor si, si                           ;azzera l'indice
  122.     mov cx, 5                            ;contatore del ciclo (verra' eseguito 5 volte) perche' 5 e' la lunghezza di "admin"
  123. label_confrontouser:    
  124.     mov al, arrayuser[si]                ;muove un elemento del vettore inserito in al
  125.     mov bl, user[si]                     ;muove un elemento del vettore gia' presente in bl
  126.     cmp al, bl                           ;compara i due caratteri, se non sono uguali
  127.     jne errore                           ;salta al messaggio di errore
  128.     inc si
  129.     loop label_confrontouser             ;loop riesegue il ciclo e decrementa cx, quando cx e' 0 la procedura termina automaticamente
  130.     ret
  131. confrontouser endp
  132.  
  133.  
  134. confrontopsw proc                        ;azzera l'indice
  135.     xor si, si                           ;contatore del ciclo (verra' eseguito 8 volte) perche' 8 e' la lunghezza di "password"
  136.     mov cx, 8
  137. label_confrontopsw:
  138.     mov al, psw[si]                      ;muove un carattere della password originale in al
  139.     cmp arraypsw[si], al                 ;compara un carattere della password inserita con al
  140.     jne errore                           ;se non sono uguali salta al messaggio di errore
  141.     inc si                               ;senno' incrementa l'indice
  142.     loop label_confrontopsw              ;riesegue il ciclo e decrementa cx fino a che cx=0
  143.     ret
  144. confrontopsw endp
  145.  
  146.  
  147. a_capo proc
  148.     mov ah, 2                            ;come per l'asterisco, solo che 10 e 13
  149.     mov dl, 10                           ;stampano insieme l'invio
  150.     int 21h
  151.     mov ah, 2
  152.     mov dl, 13
  153.     int 21h
  154.     ret
  155. a_capo endp
  156.  
  157.  
  158.  
  159.  
  160. DEFINE_PTHIS                             ;dice al programma che verra' utilizzata la funzione pthis
  161.  
  162.  
  163.  
  164. end start ; set entry point and stop the assembler.
Add Comment
Please, Sign In to add comment