Aiuto con primo programma Assembly - LOOP

di il
3 risposte

Aiuto con primo programma Assembly - LOOP

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

3 Risposte

  • Re: Aiuto con primo programma Assembly - LOOP

    Tieni presente che tra l'istruzione in cui imposti il valore iniziale di CX e l'istruzione loop, esistono tante altre istruzioni (in C) che usano e modificano il registro CX.
  • Re: Aiuto con primo programma Assembly - LOOP

    Allora
    for (i=0;i<8;i++) cod_reg[i]= 'a';
    quali istruzioni deve eseguire ?
    dal listato non si capisce.
    devi mettere { dove inizia il loop e } dove finisce il loop.
    poi ti dò un consiglio non mischiare il codice assembler con il c perchè non si capisce un granchè
    tratta la parte assembler come se fosse una funzione cosi eviterai influenze del compilato c sull'assembler e potrai capire meglio dove stà l'errore.
  • Re: Aiuto con primo programma Assembly - LOOP

    smalldragon ha scritto:


    non mischiare il codice assembler con il c
    O meglio, non farlo se non sai esattamente cosa stai facendo.
Devi accedere o registrarti per scrivere nel forum
3 risposte