Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._4.doc
Скачиваний:
2
Добавлен:
11.08.2019
Размер:
177.66 Кб
Скачать

Двопрохідний ассемблер

Асемблери зазвичай роблять два або більше проходи по тексту програми під час трансляції для обробки посилань вперед на адреси, визначення яких ще не зустрічалися у програмі. При першому проході асемблер переглядає всю початкову програму і складає таблицю символів, що містить імена і мітки, зустрінуті в програмі, тобто імена полів даних, мітки програми та їх відносні місця розташування (зміщення) в сегменті. Ви можете побачити цю таблицю символів безпосередньо під відтрансльованою програмою на рис. 4.3, де зміщення FLDD, FLDE і FLDF - відповідно, 0000, 0002 і 0004 байти. Хоча програма не містить визначень міток інструкцій, вони з'явилися б в сегменті коду зі своїми зміщеннями. Перший прохід визначає розмір коду, який згенерує кожна інструкція.

При другому проході асемблер використовує таблицю символів, створену ним при першому проході. Тепер, коли він знає довжину кожної інструкції і її відносне розташування, він цілком може сформувати об'єктний код для кожної інструкції. Після цього він, в залежності від заданих параметрів при виклику, створює різні об'єктні (.OBJ) файли, файли лістингу (.LST) і файли перехресних посилань (.CRF).

Потенційна проблема при першому проході - звернення вперед: інструкції певних типів в сегменті коду можуть посилатися на мітку інструкції, до визначення якої асемблер ще не добрався. MASM створює об'єктний код на основі припущення про довжини кожної інструкції машинної мови. Якщо є якісь відмінності між довжинами інструкцій, обчислених на першому і другому проходах, MASM видає повідомлення про помилку, що свідчить "Phase error between passes". Такі помилки відносно рідкі, але якщо вони з'являються, ви повинні будете знайти їх джерело і усунути його.

Починаючи з версії 6.0, MASM більш ефективно враховує довжини інструкцій, роблячи проходів стільки, скільки необхідно. TASM може асемблювати програму в один прохід, але ви можете наказати йому зробити більше одного проходу, якщо виникли складності зі зверненнями вперед.

3. Компонування об'єктного файлу

Коли ви досягнете безпомилкової трансляції початкового тексту в об'єктний код, ви можете скомпонувати створений асемблером об'єктний файл A04ASM1.OBJ, що містить лише машинний код (MASM 6.1 утворює компонування після трансляції по команді ML). Компонувальник виконує наступні дії:

• поєднує, якщо потрібно, кілька роздільно відтрансльованих програм в один виконуваний модуль, наприклад, дві або більше програми на асемблері або асемблерну програму і програму на С;

• створює файл типу .ЕХЕ і ініціалізує його спеціальними інструкціями, які в подальшому його завантажують для виконання.

Після того як ви скомпонували один або більше об'єктних файлів у виконуваний модуль, ви можете запускати цей модуль на виконання довільну кількість разів. Але якщо вам буде потрібно внести зміни в програму, ви повинні будете змінити вихідний лістинг, повторно відтранслювати його в об'єктний код і скомпонувати отриманий файл типу .OBJ у виконуваний файл. Навіть якщо зараз ці кроки вам не зовсім ясні, виявиться, що через деякий час (після написання і налагодження декількох програм) вони будуть завчені до автоматизму.

Результатами компонування є виконувані файли (.ЕХЕ), файли карт (.MAP) і файли бібліотек (.LIB).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]