在递归中跟踪循环索引的问题

时间:2016-10-19 04:16:35

标签: recursion assembly x86 x86-16 emu8086

你好我正在组装,我的问题是以下我需要知道是否有一种方法在使用递归时跟踪程序集中的一些变量。我知道当我调用它时,我可以使用堆栈将参数传递给递归函数。例如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次我需要当我返回函数时我仍然跟踪索引" i"在for循环中。 在汇编中,只需使用JMP并迭代我需要使用寄存器的次数。因此,当调用RET时,我会丢失计数器的值(在本例中为i)。

1 个答案:

答案 0 :(得分:0)

您必须在函数调用中保存/恢复任何本地状态(递归与否)。推送/弹出有价值的数据,或者按下/弹出一个保存的呼叫寄存器(例如BX,具体取决于您的呼叫约定),并保存您的状态数据。