Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-04-2009, 12:08   #1
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
[assembler] aiutatemi! inserimento e controllo password

Ciao a tutti , preannuncio che sono un pivello alle prime armi , ho appena iniziato lo studio di assembler 8086, uso il programma emu8086, e sto trovando un po' di difficolta nella risoluzione di alcuni esercizi. So che voi siete i migliori.
L'esercizio dice:
- programma che consente di inserire una password di 8 caratteri
e di confrontarla con una password memorizzata nel segmento dati
- il programma non deve visualizzare la password mentre viene inserita
- ogni carattere deve essere sostituito a video con un '*'
- se la password e' corretta il programma deve stampare un messaggio di benvenuto, altrimenti un messaggio di errore
Questo è il codice che ho scritto:
Codice:
Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansiro'
    
code segment
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio  
    mov cx,8

caratteri:

    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    
    mov al,'*'
    int 10h
    loop caratteri; stampa asterischi quando inserisci un carattere
    
    
    cmp al,san ; confronto con password
    
    jne pas_sba
    
    lea dx,accapo
    mov ah,9
    int 21h ; vai a capo
    
    lea dx,msg2
    mov ah,9
    int 21h; visualizza messaggio di benvenuto
    jmp fine
    
pas_sba:
    lea dx,msg3
    mov ah,9
    int 21h ; visualizza messaggio
    
fine:
Che ne pensate? Dove sbaglio?
Grazie in anticipo.
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 13:55   #2
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
ho aggiustato qualcosa ma non so se il confronto è giusto

Sono riuscito a mettere gli asterischi ogni volta che inserisco una parola, ma non capisco, se come ho fatto i confronti sia giusto .

Inserisco il codice:

Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansirot', 8 dup(00h) 
    password db 8 dup(00h,00h,00h,00h,00h,00h,00h,00h)  
    
    
code segment
    
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio  
    mov cx,0000h
    mov di,0

caratteri:
    
    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    
    cmp cx,8 ; contatore
    je confr
    mov al,'*'
    mov ah,0Eh
    int 10h ; stampa asterisco dopo ogni inserimento
    
    ;copia i caratteri in un vettore 

    mov password[di],al; dovrebbe salvare la password nella stringa 
    inc di
    inc cx
    jmp caratteri ; salta a caratteri
    
       
    
confr:
    mov ax,san
    mov bx,password  
    cmp ax,bx; dovrebbe confrontare la password immessa con quella del di san
    jne errore; se non è uguale salta a errore 
    
benvenuto:
    lea dx,msg2
    mov ah,9
    int 21h; stampa benvenuto
    jmp fine
    
errore:
    lea dx,msg3
    mov ah,9
    int 21h ; stampa errore
fine: 
ret
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 14:03   #3
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Guarda, non sei molto lontano.
Un problema che salta subito all'occhio e' che AL, risultato dell'input da tastiera, sarebbe bene che lo usassi in qualche modo prima di sovrascriverci '*', altrimenti ovviamente perdi l'informazione dell'input digitato dall'utente.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 14:51   #4
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
Grazie mille , non me ne ero proprio accorto. Ora esce.
Inserisco il codice:
Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansirot', 8 dup(00h) 
    password db 8 dup(00h,00h,00h,00h,00h,00h,00h,00h)
    
    
code segment
    
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio  
    mov cx,0
    mov di,0
    
    lea dx,accapo
    mov ah,9
    int 21h; va a capo
    
caratteri:
    
    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    mov password[di],al; inserice la parola immessa nel vettore password
    
    cmp cx,8 ; contatore
    
    je confr ; se il contatore arriva a otto salta a confr
    mov al,'*'
    mov ah,0Eh
    int 10h ; stampa asterisco dopo ogni inserimento
    
    
    ;copia i caratteri in un vettore 

    
    inc di ; incrementa il contatore di
    inc cx ; incrementa il contatore cx
    jmp caratteri
    
       
    
confr:
    mov ax,san ; mette la password giusta ovvero san nel registro ax
    mov bx,password ; mette la password inserita dall'utente nel registro bx
    cmp ax,bx; confronta ax con bx  
    jne errore ; se non sono uguali salta a errore 
    
benvenuto:
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg2 
    mov ah,9
    int 21h; stampa benvenuto
    jmp fine
    
errore: 
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg3
    mov ah,9
    int 21h; stampa errore
fine:
   ret
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 15:16   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
il confronto e' sbagliato.
ax e bx sono 2 registri ciascuno a 16 bit.
Ti pare che basti confrontare tra loro i contenuti, qualunque cosa contengano, per capire se 2 password (ciascuna lunga 8 caratteri = 8 byte = 64bit) sono uguali?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 17:52   #6
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
L'unica cosa che mi viene in mente e di prendere singolarmente ogni carattere e di confrontarli in un ciclo:

Tipo questo:
Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansirot',2 dup(00h)
    password db 10 dup(00h)
    
    
code segment
    
messaggio:
        
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio 
     
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    
    mov cx,0
    mov di,0
    
caratteri:
    cmp cx,7 ; contatore
    je confronto ; se il contatore arriva a otto salta a confronto 
     
    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    mov password[di],al; inserice la parola immessa nel vettore password
    
    
    mov al,'*'
    mov ah,0Eh
    int 10h ; stampa asterisco dopo ogni inserimento
    
    
    ;copia i caratteri in un vettore 

    
    inc di ; incrementa il contatore di
    inc cx ; incrementa il contatore cx
    jmp caratteri
    
       
    
  
indici:

mov cx,0
mov di,0
mov si,0

confronto:
	cmp cx,7 
	je benvenuto; salta a controllo se sono uguali
	inc cx; incrementa un contatore
		
	mov ah,san[si] ; mette una lettera alla volta in ah
    mov al,password[di] ; mette una lettera alla volta in al
    
    inc di
    inc si
	
	
    cmp ah,al; confronta ah con al  
    jne errore; salta se non e' uguale a errore
    
    inc si
    inc di
    jmp confronto    
       
benvenuto:
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg2 
    mov ah,9
    int 21h; stampa benvenuto
    jmp fine
    
errore: 
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg3
    mov ah,9
    int 21h; stampa errore 
    jmp fine
    

    
fine:
   ret
Il problema però è che mi da sempre benvenuto anche se la password è sbagliata.
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 18:33   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
fai che fare
INC di
INC si
una volta sola per ogni ciclo, non due.

Anzi, poiche' sia DI che SI che CX (sia nel ciclo di acquisizione che in quello di confronto) valgono sempre lo stesso identico valore, potresti usarne anche solo uno dei tre
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 18:54   #8
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
Ho fatto come hai detto tu , ho sostituito tutti gli indici con si, però il confronto non mi esce, mi dice sempre benvenuto .
C'è qualche altro metodo per i confronti tra stringhe? Sono proprio in confusione .

Questo è il codice:

Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansirot',2 dup(00h)
    password db 10 dup(00h)
    
    
code segment
    
messaggio:
        
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio 
     
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    
    mov si,0
    
caratteri:
    cmp si,7 ; contatore
    je confronto ; se il contatore arriva a otto salta a confronto 
     
    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    mov password[si],al; inserice la parola immessa nel vettore password
    
    
    mov al,'*'
    mov ah,0Eh
    int 10h ; stampa asterisco dopo ogni inserimento
    
    
    ;copia i caratteri in un vettore 

    
    inc si ; incrementa il contatore di
    
    jmp caratteri
    
      
indici:

mov si,0

confronto:
	cmp si,7 
	je benvenuto; salta a controllo se sono uguali
	
	inc si; incrementa contatore
		
	mov ah,san[si] ; mette una lettera alla volta in ah
    mov al,password[si] ; mette una lettera alla volta in al
        
    cmp ah,al; confronta ah con al  
    jne errore; salta se non e' uguale a errore
        
    jmp confronto    
       
benvenuto:
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg2 
    mov ah,9
    int 21h; stampa benvenuto
    jmp fine
    
errore: 
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg3
    mov ah,9
    int 21h; stampa errore 
    jmp fine
    

    
fine:
   ret
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 19:41   #9
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 16:29.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 20:08   #10
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Mi attizza l'assembler
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 00:02   #11
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
Ti riferisci a 7 che devo sostituirlo con 8?
così:
Codice:
caratteri:
    cmp si,8 ; contatore
    je confronto ; se il contatore arriva a otto salta a confronto
Codice:
confronto:
	cmp si,8
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 10:30   #12
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 16:29.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 11:54   #13
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
Tu dici che devo sostituire contatore con indici?
così:
Codice:
Codice:
caratteri:
    cmp si,8 ; contatore
    je indici; se il contatore arriva a otto salta a indici

Codice:
indici:

mov si,0

confronto:
	cmp si,8
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 12:03   #14
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da ~FullSyst3m~ Guarda i messaggi
Mi attizza l'assembler
ma non eri il paladino del pitone? pussa via e torna al "piano di sopra"
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 12:33   #15
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 16:29.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 12:58   #16
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
Il problema adesso è che mi da due errori quando lo avvio:

- non mi stampa l'inizio ovvero: Inserire password di 8 caratteri:
- adesso mi dice sempre Password Sbagliata anche quando la password è giusta

non capisco l'errore dove sia

inserisco il codice:
Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansirot',2 dup(00h)
    password db 10 dup(00h)
    
    
code segment
    
messaggio:
        
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio 
     
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    
    mov si,0
    
caratteri:
    cmp si,8 ; contatore
    je indici ; se il contatore arriva a otto salta a confronto 
     
    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    mov password[si],al; inserice la parola immessa nel vettore password
    
    
    mov al,'*'
    mov ah,0Eh
    int 10h ; stampa asterisco dopo ogni inserimento
    
    
    ;copia i caratteri in un vettore 

    
    inc si ; incrementa il contatore di
    
    jmp caratteri
    
      
indici:

mov si,0

confronto:
	cmp si,8 
	je benvenuto; salta a controllo se sono uguali
	
	inc si; incrementa contatore
		
	mov ah,san[si] ; mette una lettera alla volta in ah
    mov al,password[si] ; mette una lettera alla volta in al
        
    cmp ah,al; confronta ah con al  
    jne errore; salta se non e' uguale a errore
        
    jmp confronto    
       
benvenuto:
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg2 
    mov ah,9
    int 21h; stampa benvenuto
    jmp fine
    
errore: 
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg3
    mov ah,9
    int 21h; stampa errore 
    jmp fine
    

    
fine:
   ret
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 17:39   #17
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 16:30.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 20:12   #18
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
Dici così:
Codice:
data ends

code segment
    ASSUME DS:data
     
messaggio:
    mov ax,data
    mov ds, ax
qui metto l'intero codice:
Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansirot',2 dup(00h)
    password db 10 dup(00h)
    
data ends

code segment
    ASSUME DS:data
     
messaggio:
    mov ax,data
    mov ds, ax
    
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio 
     
    lea dx,accapo
    mov ah,9
    int 21h; va a capo
       
    mov si,0; mette a zero il contatore si
    
caratteri:
    cmp si,8 ; contatore
    je indici ; se il contatore arriva a otto salta a indici 
     
    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    mov password[si],al; inserice la parola immessa nel vettore password
    
    mov al,'*'
    mov ah,0Eh
    int 10h ; stampa asterisco dopo ogni inserimento
         
    inc si ; incrementa il contatore si
    
    jmp caratteri; salta sempre a caratteri
    
      
indici:

mov si,0; inizializza il contatore si

confronto:
	cmp si,8 
	je benvenuto; salta a benvenuto se sono uguali
	
	inc si; incrementa contatore
		
	mov ah,san[si] ; mette una lettera alla volta in ah
    mov al,password[si] ; mette una lettera alla volta in al
        
    cmp ah,al; confronta ah con al  
    jne errore; salta se non e' uguale a errore
        
    jmp confronto; salta sempre a confronto    
       
benvenuto:
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg2 
    mov ah,9
    int 21h; stampa benvenuto
    jmp fine
    
errore: 
    lea dx,accapo
    mov ah,9
    int 21h; va a capo

    lea dx,msg3
    mov ah,9
    int 21h; stampa errore 
    jmp fine
    

    
fine:
   ret
Grazie mille!!! Mi esce!!
L'unica cosa è che non va a capo dopo ogni scritta.
pol88884 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 23:49   #19
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
ma non eri il paladino del pitone? pussa via e torna al "piano di sopra"
Non sono un paladino del pitone dai
Mi piace come linguaggio, ma mi piace anche Java e assembler mi attizza
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 12:37   #20
pol88884
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 27
Ho risolto l'ultimo problemino .
Qui il codice completo:
Codice:
; programma che consente di inserire una password di 8 caratteri
; e di confrontarla con una password memorizzata nel segmento dati
; il programma non deve visualizzare la password mentre viene inserita
; ogni carattere deve essere sostituito a video con un '*'
; se la password e' corretta il programma deve stampare un messaggio di
; benvenuto altrimenti un messaggio di errore 

data segment
    msg1 db 'Inserire password di 8 caratteri:',13,10,'$'
    msg2 db 'Ok!Benvenuto!$'
    msg3 db 'Password Sbagliata$'
    accapo db 13,10,'$'
    san db 'sansirot',2 dup(00h)
    password db 10 dup(00h)
    
data ends

code segment
    ASSUME DS:data
     
messaggio:
    mov ax,data
    mov ds, ax
    
    lea dx,msg1
    mov ah,9
    int 21h; visualizza messaggio 
     
    lea dx,accapo
    mov ah,9
    int 21h; va a capo
       
    mov si,0; mette a zero il contatore si
    
caratteri:
    cmp si,8 ; contatore
    je indici ; se il contatore arriva a otto salta a indici 
     
    mov ah,00h
    int 16h; legge carattere da tastiera  e lo mette in al
    mov password[si],al; inserice la parola immessa nel vettore password
    
    mov al,'*'
    mov ah,0Eh
    int 10h ; stampa asterisco dopo ogni inserimento
         
    inc si ; incrementa il contatore si
    
    jmp caratteri; salta sempre a caratteri
    
      
indici:

mov si,0; inizializza il contatore si

confronto:
	cmp si,8 
	je benvenuto; salta a benvenuto se sono uguali
	
	inc si; incrementa contatore
		
	mov ah,san[si] ; mette una lettera alla volta in ah
    mov al,password[si] ; mette una lettera alla volta in al
        
    cmp ah,al; confronta ah con al  
    jne errore; salta se non e' uguale a errore
        
    jmp confronto; salta sempre a confronto    
       
benvenuto:
    MOV AH,02h
    MOV DL,13
    INT 21h
    MOV AH,02h
    MOV DL,10
    INT 21h ; va a capo

    lea dx,msg2 
    mov ah,9
    int 21h; stampa benvenuto
    jmp fine
    
errore: 
    MOV AH,02h
    MOV DL,13
    INT 21h
    MOV AH,02h
    MOV DL,10
    INT 21h  ; va a capo

    lea dx,msg3
    mov ah,9
    int 21h; stampa errore 
    jmp fine
    

    
fine:
   ret
pol88884 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
NVIDIA RTX PRO 4500 Server Edition: la s...
Core Ultra 200 HX Plus: Intel mette il t...
Starfield arriva su PS5: data ufficiale,...
iPad Air 13" (M4) scende di prezzo: -100...
Oracle annuncia Java 26 con il Java Veri...
OPPO Find N6 è ufficiale: sottile...
Influencer sotto controllo Agcom: arriva...
Scontro in OpenAI sul ChatGPT per adulti...
Apple Watch Series 11 a 349€ e altri int...
Starlink rinnova i piani residenziali in...
POCO X8 Pro e Pro Max ufficiali: potenza...
Jensen Huang propone i token come nuovo ...
Realme 16 Pro e 16 Pro+ tra i più...
Dall'enciclopedia all'algoritmo: Encyclo...
Il CEO di Epic Games Tim Sweeney ha comp...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v