2016-10-19 12 views
0

こんにちは私はアセンブリに取り組んでいます、私の問題は再帰を使用している間にアセンブリのいくつかの変数を追跡する方法があるかどうかを知る必要があります。私はそれを呼び出すときにスタックを使用して再帰関数にパラメータを渡すことができることを知っています。たとえば、Pythonで、このコード:再帰におけるループインデックスの追跡に関する問題

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 

私はその完全な、しかし、私は、例えばやりたいことは機能私は関数を返したときに、私はまだインデックスを追跡することを必要とする2回呼び出されたされていないが知っていますforループの "i" アセンブリでは、ちょうどJMPを使用して、レジスタを使用する必要がある回数を反復します。したがって、RETが呼び出されると、カウンタの値が失われます(この場合はi)。

+0

'lista'はローカルなのですか(' topologicalSort'を入力するたびに定義されていますか、静的/グローバル変数(呼び出しごとに1つのコピーのみ)ですか?スタックを使用してパラメータを渡すこともできますし、そこに値を格納することもできます(スタックを復元するにはretより前にポップすることをお勧めします)。 – Ped7g

答えて

0

関数呼び出し(再帰的または非再帰的)でローカル状態を保存/復元する必要があります。貴重なデータをプッシュ/ポップするか、コールセーブされたレジスタ(呼び出し規約に応じてBXなど)をプッシュ/ポップして、その状態データを保持してください。

関連する問題