我有一个关于子程序的奇怪问题:因为我正在创建一个最小的语言,我不想添加像while
或for
这样的高级循环,我计划只添加一些getos保持图灵完整。
现在我想,eww - gotos - 如果我不得不经常使用gotos,我不想用那种语言编程。所以我考虑过添加子程序。
我看到的区别如下:
gotos
子程序
好。为什么我不添加更多功能更好看的子程序?这是因为:
如果我从其他子程序中的子程序中调用子程序,为了使返回工作,我必须使用堆栈,其中包含当前运行的子程序来自顶部的点。 / p>
那就意味着,如果我使用子程序创建循环,最终会得到一个非常占用内存,溢出的堆栈和返回位置。不好。
不要将我的子程序视为函数。它们只是重新回到它们被调用的地方,它们实际上并没有像今天几乎所有语言中的return x;
语句那样回馈它们。
现在我的实际问题:
如何通过子程序循环堆栈溢出来解决上述问题?我是否必须在没有goto
选项的情况下添加单独的return
语言构造?
汇编程序没有循环但是我看到myJumpPoint:,jnz
,jz
,retn
。这对我来说意味着必须有一个包含所有返回位置的堆栈。
retn
符号完全错了吗?如果是,请向我解释。答案 0 :(得分:1)
jnz
,jz
只是“转到”。
另外,我认为将所有循环实现为子程序不仅仅是添加goto而不是优雅的解决方案。你似乎对goto有偏见。这只是一个词。它不会伤害你。
答案 1 :(得分:0)
好吧,你不能用条件跳转来解决这个问题吗?循环检查某些条件以查看是否必须再次运行。使用您的子程序,但添加一个条件返回,返回到调用点,或者根据条件的评估返回到例程的开头。