Реклама:

В главах 4, 5 и 6 мы обсуждали три уровня, которые можно встретить в архитектуре большинства современных компьютеров. В этой главе речь пойдет о еще одном уровне, который также присутствует в архитектуре практически всех современных машин. Это - уровень ассемблера. Этот уровень существенно отличается от трех предыдущих, поскольку он реализуется путем трансляции, а не интерпретации.

Для перевода пользовательских программ с одного языка программирования на другой разработаны специальные программы, которые называются трансляторами. Язык, на котором изначально была написана программа, называется входным, или исходным, языком, а язык, на который она транслируется, - выходным, или целевым. И входной, и выходной языки определяют содержание уровней иерархии. Если имеется процессор, который может выполнять программы, написанные на входном языке, то нет необходимости транслировать исходную программу на другой язык.

Трансляция требуется в том случае, если есть процессор (реализованный ап-паратно или программно) для выходного языка, но нет процессора для входного языка. Если трансляция выполнена правильно, то оттранслированная программа будет давать точно такие же результаты, что и исходная (если бы существовал подходящий для нее процессор). Следовательно, имеется возможность организовать новый уровень, который сначала будет транслировать программы, написанные для выходного уровня, а затем сам их выполнять.

Важно понимать разницу между трансляцией и интерпретацией1. При трансляции исходная программа на входном языке сразу не выполняется. Сначала она преобразуется в эквивалентную программу, так называемую объектную, или исполняемую двоичную, программу, которая выполняется только после завершения трансляции. То есть при трансляции нужно пройти два шага:

1. Создание эквивалентной программы на выходном языке.

2. Выполнение полученной программы.

Эти два шага выполняются не одновременно. Второй шаг начинается только после завершения первого. В интерпретации есть только один шаг: выполнение исходной программы. Никакой эквивалентной программы порождать не нужно, хотя иногда для упрощения интерпретации исходная программа преобразуется в промежуточную форму (например, в ^уа-код).

Во время выполнения объектной программы задействованы только три уровня: микроархитектуры, архитектуры команд и операционной системы. Следовательно,

1 В отечественной литературе принято и интерпретацию, и компиляцию называть трансляцией (именно компиляцию автор здесь называет трансляцией). Другими словами, трансляторы могут быть либо компиляторами, либо интерпретаторами. - Примеч. научи, ред.

во время работы программы в памяти компьютера можно найти три программы: пользовательскую объектную программу, операционную систему и микропрограмму (если она есть). Никаких следов исходной программы не остается. То есть число уровней при выполнении программы может не соответствовать числу уровней до трансляции. Следует отметить, в данной книге мы определяем принадлежность к тому или иному уровню по командам и языковым конструкциям, доступным программистам этого уровня (а не по технологии реализации), в то время как некоторые авторы проводят различие между уровнями, реализованными интерпретаторами и трансляторами.

Вопросы и задания6 || Оглавление || Знакомство с ассемблером