Емануела обнови решението на 13.01.2014 17:36 (преди почти 11 години)
Доста добро, но има един проблем и една дреболийка:
Дреболийката е, че ключовете в @registers
могат да са символи.
Проблемът е, че Evaluator#evaluate
е рекурсивен метод и достатъчно продължителна програма ще доведе до препълване на стека. Чак се чудя дали да не добавя следното към тестовете:
Asm.asm do
mov ax, 100000
dec ax
cmp ax, 0
jne 1
end
:-)
Може ли малка подсказка как Evaluator#evaluate
да не е рекурсивен, понеже пробвах доста неща и все не мога да го направя :( (ако изобщо може да се направи без да променям другите неща)
Помисли как всъщност процесорите оценяват кода и какво представляват програмите на ниско ниво. Рекурсията е абстракция от по-високо ниво. На по-ниско ниво има само jump-ове :) Ако си посещавала курс по компютърни архитектури, вероятно си чувала за неща като стек, регистри, PC (program counter, hint, hint), указател към текуща инструкция, списък с инструкции (програма). Процесорите са итеративни. Можеш да емулираш това с код.