Domanda

Mi è stato chiesto di creare un semplice loop in linguaggio assembly, ma sto avendo difficoltà come il ciclo non finisce quando dovrebbe, continua in un ciclo infinito.

devo dare la CEX una variabile che viene preso da ingresso, ma nel mio codice sotto anche quando specifico il contatore direttamente è ancora cade in un ciclo infinito.

Il mio codice è qui (AGGIORNATO):

Pastebin Codice

Il codice potrebbe contenere errori diversi dal ciclo attuale.

// A cura per la spiegazione dei requisiti di programmi ...

Il programma deve assumere un ingresso "n" che sarà utilizzato come il contatore di ciclo. Io poi prendere input "n" più numeri, quando un numero è positivo devo aggiungere che al postot variabile, quando negativo devo aggiungere che al negatot variabile. Dopo aver inserito il numero "n" stampo i risultati per ciascuna variabile e il programma termina.

Modifica 2:

Risolto il problema del ciclo cancellando correttamente la pila così ho aggiunto:

        add esp,8

e

next:   push ecx
        ...
pop ecx
loop next

Il che ha risolto il problema del ciclo.

È stato utile?

Soluzione

Ok, ho capito. . . Hai letto int il numero da parte dell'utente. Poi sulla linea 41 si sia salto di linea 47 o cadere fino alla linea 43.

Se si va alla riga 43, si raggiunge poi la linea 45 che passa per la linea 49 (fine). Se, invece, si è andato alla linea 47, cadrete attraverso alla linea 49 (fine).

In entrambi i casi, è quindi ciclo torna alla linea 29 (accanto).

Si prevede che il vostro registro ECX a diminuire ogni volta che viene raggiunto ciclo, e che rimanga inalterato durante la lavorazione del ciclo.

Hai provato spingendo ECX attorno alla riga 29, e popping a destra prima di ciclo?

Altri suggerimenti

Vedo due errori:

  • C'è un JG positive in là dopo si incrementa un puntatore di stack. Sei sicuro di voler controllare il risultato di armeggiare con il vostro stack frame, piuttosto che il valore del numero immesso?

  • jmp end non lo fa: Subito dopo arriva una end loop next. Non vedo alcuna condizione per chiudere il ciclo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top