存储当前指令位置

时间:2011-03-02 15:51:42

标签: .net compiler-construction il

有什么方法可以存储当前指令的位置,以便我可以在将来的某个时刻回到它。

我正在尝试实现一些类似GOSUB的功能。

现在,Branch指令接受一个参数,表示相对于要跳转到的当前位置的字节数。它很容易将标签存储到我想去的地方,然后分支到它。如果我可以在分支之前存储当前位置,当涉及到返回时,我可以采用新的当前位置 - 存储位置并将其传递给分支..

但我无法弄清楚如何......有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Afaik(我已经完成了大量的IL),这不可能呈现,即使它确实会导致无法验证的IL(不好) ,因为没有办法证明堆栈是平衡的。还要记住,偏移是IL指令的一部分,而不是堆栈 - 所以你不能将它存储在本地(或堆栈)并重新加载等。

只需更清晰地构建代码;在必要时使用调用来调用子方法,也许是一个跳转表(基本上是“切换”)。