Стек (ы), Регистрируется в ActionScript ByteCode AVM2, какие все есть? - PullRequest
5 голосов
/ 24 марта 2011

В обзорном PDF-файле AVM2 я обнаружил ссылки на два типа стеков - стека областей и стека операндов.

1) Я предполагаю, что это два разных стека памяти, каждый из которых обрабатывает разные вещи.Есть ли еще больше стеков?

2) pushstring "hello" - это подтолкнет начало адреса памяти, где строка "hello" расположена в стеке операндов.Правильно?

3) setlocal 0 - это будет хранить значение из стека (выше) в register0, выталкивая его.Правильно?

4) PushScope () - хм, в документах указано значение pop для стека, значение push в Scope Stack.Почему?

Я немного знаю NASM, но ABC кажется более сложным, чем это.Особенно меня смущает Scope Stack и концепция нескольких стеков.

1 Ответ

5 голосов
/ 25 марта 2011

Я не эксперт AVM2, но вот что я знаю:

  1. Есть только 2 стека, два из которых вы упомянули: область действия и операнд.
  2. Да, pushstring "привет"поместит строку в стек операндов.
  3. Также, исправьте.setlocal0 выведет «hello» из стека и сохранит его в регистре 0.
  4. Стек области видимости используется всеми операциями, которые требуют поиска имени для области видимости, например, замыканий и исключений.Часто в коде ASM вы сразу видите getlocal_0, а затем нажимаемую область.Это довольно часто.Вы можете думать об этом как о добавлении объекта «this» в стек областей видимости для последующего использования в вызовах методов, областей видимости замыканий и т. Д.

Я настоятельно рекомендую загрузить исходный код Tamarin и поиграть сдекомпилятор там.Кроме того, Yogda выглядит очень удобным для обучения: http://www.yogda.com/

...