Несколько десятилетий назад, казалось, широко распространено мнение, что компиляторы превратят всю программу в машинный код, в то время как интерпретаторы переводят оператор в машинный код, исполняют его, отбрасывают, переводят следующий и т. Д.99% неверно, но в этом было два крошечных ядра истины.На некоторых микропроцессорах некоторые инструкции требовали использования адресов, указанных в коде.Например, на 8080 была инструкция для чтения или записи указанного адреса ввода / вывода 0x00-0xFF, но не было инструкции для чтения или записи адреса ввода / вывода, указанного в регистре.Для интерпретаторов языка было обычным делом, если пользовательский код делал что-то вроде «out 123,45», чтобы сохранить в три байта памяти инструкции «out 7Bh / ret», загрузить аккумулятор с 2Dh и сделать вызов первого изэти инструкции.В этой ситуации интерпретатор действительно будет генерировать инструкцию машинного кода для выполнения интерпретированной инструкции.Такая генерация кода, однако, в основном ограничивалась такими вещами, как инструкции IN и OUT.
Многие распространенные интерпретаторы Microsoft BASIC для 6502 (и, возможно, также для 8080) сделали несколько более широкое использование кода, хранящегося в ОЗУ,но код, который был сохранен в ОЗУ, не сильно зависит от программы, которая выполнялась;большая часть подпрограммы в ОЗУ не изменилась бы во время выполнения программы, но адрес следующей инструкции оставался встроенным как часть подпрограммы, позволяющей использовать инструкцию "LDA" в абсолютном режиме, что позволило сохранить по крайней мере один циклкаждая выборка байтов.