5

AVM2の概要PDFから、スコープスタックとオペランドスタックの2種類のスタックへの参照に遭遇しました。

1)これらは2つの異なるメモリスタックであり、それぞれが異なるものを処理していると思います。さらに多くのスタックがありますか?

2)pushstring "hello"-これは、"hello"文字列が配置されているメモリアドレスの開始をオペランドスタックにプッシュします。右?

3)setlocal 0-これは、スタック(上記)から値をポップオフしてregister0に格納します。右?

4)PushScope()-うーん、ドキュメントはスタックの値をポップし、値をスコープスタックにプッシュすると言います。なんで?

NASMについては少し知っていますが、ABCはそれよりも複雑なようです。特に、スコープスタックと複数のスタックの概念全体について混乱しています。

4

1 に答える 1

5

私はAVM2の専門家ではありませんが、私が知っていることは次のとおりです。

  1. スタックは2つだけで、あなたが言及した2つはスコープとオペランドです。
  2. はい、pushstring "hello"は、文字列をオペランドスタックにプッシュします。
  3. また、正解です。setlocal0は、スタックから「hello」をポップして、reg0に格納します。
  4. スコープスタックは、クロージャや例外など、スコープの名前検索を必要とするすべての操作で使用されます。多くの場合、ASMコードでは、getlocal_0の直後にプッシュスコープが表示されます。これはかなり一般的です。これは、メソッド呼び出しやクロージャのスコープなどで将来参照できるように、スコープスタックに「this」オブジェクトを追加することと考えることができます。

Tamarinソースをダウンロードして、そこで逆コンパイラーで遊ぶことを強くお勧めします。また、Yogdaは学習に非常に便利なようです:http ://www.yogda.com/

于 2011-03-25T00:11:45.197 に答える