Salve, per la scuola devo scrivere un programma misto C e Assembly, che faccia inserire una password ma che a video faccia comparire solo gli asterischi e non i caratteri inseriti. Si hanno tre tentativi per inserire la password giusta; superati questi, l'accesso viene negato.
Il problema è che non riesco a gestire un loop che, a quanto pare, non finisce mai e non ne capisco il motivo. Il tipo di loop è proprio "loop" (credo che ne esistano altri tipi), quello che se il contenuto del registro CX è uguale a 0, esce dal ciclo, altrimenti lo decrementa di uno.
Dovendo fare 8 cicli, ho precedentemente caricato in CX 8. Forse lo scrivo in modo sbagliato, non so.
Il codice che ho scritto è questo :
#pragma inline
#include <conio.h>
#include <stdio.h>
main() {
char cod_reg[7],cod_ins[7];
int i,err,tent;
int k=0;
for (i=0;i<8;i++) cod_reg[i]= 'a';
tent=3;
asm MOV CX,8;
printf("Inserisci il codice di 8 caratteri e premi invio.\n");
inizio:
asm{
MOV AH,08h;
INT 21h;
}
cod_ins[k]=_AL;
asm {
MOV DL,42d;
MOV AH,02h;
INT 21h;
}
k++;
asm loop inizio;
getch();
for(i=0;i<8;i++) if (cod_ins[i]!=cod_reg[i]) err=1;
if (err==1) {
if (tent==0){
printf("Tentativi terminati. Chiusura.\n");
}
else {
tent--;
printf("Codice non valido. Tentativi rimasti:%d",tent);
asm MOV CX,08d;
getch();
goto inizio;
}
}
else printf("Codice accettato! Ingresso...");
getch();
}
Sapreste aiutarmi?
Grazie