【发布时间】: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