【问题标题】:Problems keeping track of loop index in recursion在递归中跟踪循环索引的问题
【发布时间】:2016-10-19 04:16:35
【问题描述】:

您好,我正在处理汇编,我的问题是以下我需要知道是否有一种方法可以在使用递归时跟踪汇编中的某些变量。我知道我可以在调用递归函数时使用堆栈将参数传递给它。例如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)。

【问题讨论】:

  • 我不懂python,所以我有一个愚蠢的问题:lista 是本地的(即每次输入topologicalSort 时定义,或者它是静态/全局变量(每次调用只有一个副本) ? 顺便说一句,就像你可以使用堆栈传递参数一样,你也可以在其中存储值。(只要确保在 ret 之前将它们弹出以恢复堆栈)这是 C 通常的工作方式,将局部函数变量放入堆栈空间。

标签: recursion assembly x86 x86-16 emu8086


【解决方案1】:

您必须通过函数调用(递归或非递归)保存/恢复任何本地状态。推送/弹出有价值的数据,或者推送/弹出调用保存的寄存器(例如 BX,取决于您的调用约定)并将您的状态数据保存在其中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2019-12-07
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多