Тема
:
Занимательный ActionScript (Flash 5 only!!)
Показать сообщение отдельно
15.06.2002, 03:33
№
8
Nox Noctis
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
обращайтесь...
напоследок я все-таки приведу этот кусочек кода c ошибкой... мало ли кому интересно...
из выражения a = 0*++1.2345; при трансляции получается:
push 'a', 0.0, 1.2345
increment
setRegister r:0
setVariable
push r:0
multiply
setVariable
расшифруем:
push 'a', 0.0, 1.2345
// имя и два числа заносиятся в стэк
increment
// операция берет верхнее в стэке значение и увеличивает его на 1 прямо в стэке (т е 1.2345+1)
setRegister r:0
// в регистр r0 помещаем верхнее в стэке значение (т е 2.2345)
setVariable
// берем последнее в стэке значение и запихиваем его в переменную с именем равному предпоследнему в стэке значению (в данном случае 0.0 = 2.2345 - уже хорошо
) после присвоения операнды из стэка удаляются
push r:0
// заносим в стэк то, что до этого положили в регистр r0 (это было 2.2345)
multiply
// перемножаем два оставшихся в стэке операнда (то есть 'a'*2.2345
) и результат кладем в стэк...
setVariable
// проделываем такую же операцию как см. выше... но учитывая, что в стэке у нас всего один операнд в данный момент (да и тот пустой
) - получаем полную лажу
Последний раз редактировалось Nox Noctis; 15.06.2002 в
03:42
.
Nox Noctis
Посмотреть профиль
Отправить личное сообщение для Nox Noctis
Посетить домашнюю страницу Nox Noctis
Найти все сообщения от Nox Noctis