Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тип книга.doc
Скачиваний:
6
Добавлен:
01.03.2025
Размер:
1.55 Mб
Скачать

Уровень ассемблера

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

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

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

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

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

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

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

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