Frage

Ich bin gebeten worden, eine einfache Schleife in Assemblersprache zu schaffen, aber ich habe Probleme, wie die Schleife endet nicht, wenn es sollte, es in einer Endlosschleife fortgesetzt wird.

Ich brauche die ECX eine Variable, der durch Eingabe genommen wird, aber in meinem Code unten, auch wenn ich den Zähler direkt spezifizieren, fällt noch in eine Endlosschleife.

Mein Code ist hier (AKTUALISIERT):

Pastebin-Code

Die Codefehler andere als die tatsächliche Schleife enthalten.

// Edited zur Erläuterung der Programme Anforderungen ...

Das Programm benötigt einen Eingang „n“ zu nehmen, die für die Schleife als Zähler verwendet werden. Ich nehme dann Eingabe „n“ mehr Zahlen, wenn eine positive Zahl ist Ich muss hinzufügen, dass auf die Variable postot, wenn negative I Notwendigkeit, die an die variable negatot hinzuzufügen. Nach dem „n“ Zahlen, die ich die Ergebnisse für jede Variable und das Programm beendet drucken eingegeben wurden.

Edit 2:

Fixed die Schleife Problem, indem der Stapel richtig Clearing so fügte ich hinzu:

        add esp,8

und

next:   push ecx
        ...
pop ecx
loop next

, die die Schleife Problem behoben.

War es hilfreich?

Lösung

Ok, ich habe es. . . Sie lesen die Nummer vom Benutzer int. Dann auf der Leitung 41 Sie entweder Sprung auf Linie 47 oder fallen durch die Linie 43.

Wenn Sie auf Linie gehen 43, erreichen Sie dann die Linie 45, die 49 (Ende) Zeile springt. Wenn stattdessen Sie ging 47 Zeile, fallen Sie durch die Linie 49 (Ende).

In beiden Fällen Sie dann die Schleife zurück zur Linie 29 (nächste).

Sie erwarten, dass Ihre ECX-Register jedes Mal Schleife zu verringern erreicht ist, und für sie bei der Verarbeitung der Schleife unverändert bleiben.

Haben Sie versucht, ECX an um die Linie schieben 29, und es richtig, bevor Sie Schleife knallen?

Andere Tipps

Ich sehe zwei Fehler:

  • Es gibt eine JG positive dort, nachdem Sie einen Stapelzeiger erhöhen. Sind Sie sicher, dass Sie das Ergebnis das Hantieren mit Ihrem Stack-Frame, anstatt den Wert der von Ihnen eingegebene Nummer?

  • überprüfen möchten
  • jmp end nicht: Gleich nach end einem loop next kommt. Ich sehe keine Bedingung der Schleife für beendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top