ActionScript ByteCode AVM2 中的堆栈、寄存器,都有哪些?

发布于 2024-10-25 12:09:07 字数 334 浏览 2 评论 0原文

在 AVM2 概述 PDF 中,我遇到了对两种类型堆栈的引用 - 作用域堆栈和操作数堆栈。

1)我假设这是两个不同的内存堆栈,每个处理不同的事情。还有更多的堆栈吗?

2)pushstring“hello”——这会将“hello”字符串所在的内存地址的起始位置推送到操作数堆栈上。正确的?

3) setlocal 0 - 这将通过弹出堆栈(上面)中的值将其存储到寄存器0中。正确的?

4) PushScope() - 嗯,文档说弹出堆栈值,将值推入作用域堆栈。为什么?

我了解一点 NASM,但 ABC 似乎比这更复杂。特别是我对范围堆栈和多个堆栈的整个概念感到困惑。

From the AVM2 Overview PDF I encountered references to two types of stacks - Scope Stack and Operand Stack.

1) I assume these are two different memory stacks, each handling different things. Are there even more stacks?

2) pushstring "hello" - this would push a start of memory address where "hello" string is located onto Operand Stack. Right?

3) setlocal 0 - this would store a value from the stack (above) into register0 by popping it off. Right?

4) PushScope() - hmm, docs say pop value of stack, push value onto Scope Stack. Why?

I know a little bit of NASM but ABC seems more complex than that. Especially I'm confused about Scope Stack and the whole concept of multiple stacks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情魔剑神 2024-11-01 12:09:07

我不是 AVM2 专家,但我所知道的是:

  1. 只有 2 个堆栈,即您提到的两个:作用域和操作数。
  2. 是的,pushstring“hello”会将字符串压入操作数堆栈。
  3. 另外,正确。 setlocal0 将从堆栈中弹出“hello”并将其存储在 reg 0 中。
  4. 作用域堆栈由需要查找作用域名称的所有操作使用,例如闭包和异常。通常在 ASM 代码中,您会看到 getlocal_0 紧随其后的是 Pushscope。这很常见。您可以将其视为将“this”对象添加到作用域堆栈中,以供将来在方法调用、闭包作用域等中参考。

我强​​烈建议下载 Tamarin 源代码并在那里使用反编译器。此外,Yogda 看起来非常方便学习:http://www.yogda.com/

I am no AVM2 expert, but here's what I know:

  1. There are only 2 stacks, the two you mention: scope and operand.
  2. Yes, pushstring "hello" will push the string onto the operand stack.
  3. Also, correct. setlocal0 will pop "hello" off the stack and store it in reg 0.
  4. The scope stack is used by all operations that require a name lookup for scope, for instance closures and exceptions. Often in ASM code you'll see getlocal_0 immediately followed by a pushscope. This is pretty common. You can kind of think of it as adding the "this" object to the scope stack for future reference in method calls, scope for closures, etc.

I highly recommend downloading the Tamarin source and playing with the decompiler there. Also, Yogda looks to be pretty handy for learning: http://www.yogda.com/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文