Таненбаум Э.- Архитектура компьютера. стр.420

Большинство ассемблеров двухпроходные. Во время первого прохода строится таблица символов для меток, литералов и объявляемых идентификаторов. Символические имена можно либо не сортировать и искать путем последовательного просмотра таблицы, либо сначала сортировать, а потом применять двоичный поиск, либо хэшировать. Если символические имена не нужно удалять во время первого прохода, хэширование — это лучший метод. Исполняемая программа создается во время второго прохода. Что касается директив (псевдокоманд), то одни из них выполняются при первом проходе, другие — при втором.

Программы, которые ассемблируются независимо друг от друга, можно скомпоновать вместе и получить исполняемую двоичную программу. Эту работу выполняет компоновщик. Его цель — это перераспределение в памяти и связывание имен. Динамическая компоновка — это технология, при которой определенные процедуры не компонуются до тех пор, пока они не вызваны. Библиотеки коллективного доступа в UNIX и библиотеки динамической компоновки (DLL) в Windows используют технологию динамической компоновки.

Вопросы и задания

1. Всего 2 % кода программы отвечают за 50 % времени выполнения этой программы. Сравните следующие три стратегии с точки зрения времени программирования и выполнения. Предположим, что для написания программы на языке С требуется 100 человеко-месяцев, а программу на ассемблере писать в 10 раз труднее, но зато она работает в 4 раза эффективнее.

1) Вся программа написана на С.

2) Вся программа написана на ассемблере.

3) Программа сначала написана на С, а затем нужные 2 % программы переписаны на ассемблере.

2. Для двухпроходных ассемблеров существуют определенные соглашения. Могли бы они подойти и для следующих компиляторов:

1) Компилятор вместо ассемблерного кода генерирует объектные модули?

2) Компилятор генерирует символический язык ассемблера?

3. Все ассемблеры для процессоров Intel в качестве первого операнда получают целевой адрес, а в качестве второго — исходный адрес. Какие проблемы могут возникнуть при другом подходе?

4. Можно ли следующую программу ассемблировать в два прохода? EQU — это директива, которая приравнивает метку к выражению в поле операнда.

A EQU В В EQU С С EQU D D EQU 4

5. Некая компания планирует разработать ассемблер для компьютера с 40-разрядным словом. Чтобы снизить стоимость, менеджер проекта решил ограничить длину символических имен, чтобы каждое имя можно было хранить в одном слове. Менеджер объявил, что символические имена могут состоять только из букв, причем буква Q запрещена. Какова максимальная длина символического имени? Опишите вашу схему кодирования.

6. Чем отличается команда от директивы?

7. Чем отличается счетчик адресов команд от счетчика команд? А существует ли вообще между ними различие? Ведь тот и другой выполняют трассировку следующей команды в программе.

8. Какой будет таблица символов (имен) после обработки следующих операторов ассемблера Pentium 4 (первому оператору приписан адрес 1000)?


⇐ Предыдущая страница| |Следующая страница ⇒