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) が失われます。

4

1 に答える 1

0

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

于 2016-10-19T04:43:25.083 に答える