2016-10-19 3 views
0

Hallo ich arbeite an Assembly, mein Problem ist das folgende Ich muss wissen, ob es eine Möglichkeit gibt, einige Variablen in Assembly während der Verwendung von Rekursion zu verfolgen. Ich weiß, dass ich den Stapel verwenden kann, um Parameter an die rekursive Funktion zu übergeben, wenn ich es nenne. Zum Beispiel dieses Code in Python: Ich halte immer noch den Überblick über den IndexProbleme beim Verfolgen von Schleifenindex in Rekursion

def topologicalSort(node): 
    lista = [0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0] 
    size = 4 
    order = [] 
    for i in range(size): 
     if lista[node*size+i] == 1 and (i+1) not in order: 
      return topologicalSort(i) 

    order.append(node+1) #node starts in 1 

Ich weiß, es ist nicht vollständig, aber was will ich zum Beispiel tun, ist die Funktion 2 mal aufgerufen habe ich brauche, dass, wenn ich die Funktion zurückgeben "i" in der for-Schleife. In Assembly y tun nur JMP und Iterieren die Anzahl der Male brauche ich mit einem Register. Also, wenn RET aufgerufen wird, verliere ich den Wert des Zählers (in diesem Fall ich).

+0

Ich weiß nicht Python, also habe ich dumme Frage: Ist 'lista' lokal (dh definiert jedes Mal, wenn Sie' topologicalSort' eingeben, oder es ist statische/globale Variable (nur eine Kopie pro Anruf)? BTW, wie Sie können stack verwenden, um Parameter zu übergeben, Sie können dort auch Werte speichern. (Stellen Sie sicher, dass Sie sie vor rt platzieren, um den Stack wiederherzustellen.) So funktioniert C normalerweise, indem Sie lokale Funktionsvariablen in den Stack-Bereich setzen. – Ped7g

Antwort

0

Sie müssen jeden lokalen Status über einen Funktionsaufruf speichern/wiederherstellen (rekursiv oder nicht). Drücken Sie entweder die Popup-Taste, um die wertvollen Daten zu pushen, oder schieben Sie ein Anruf-gespeichertes Register (z. B. BX in Abhängigkeit von Ihrer Anrufkonvention) und halten Sie Ihre Statusdaten darin.

Verwandte Themen