Асемблювання

Асемблюва́ння (від англ. assemble — збирати) ― процес транслювання початкового коду програми на мові асемблер на об’єктну мову.

Під час асемблювання кожен виконуваний оператор асемблера перетворюється у відповідну йому машинну команду. У більшості випадків цей процес відбувається у два етапи: асемблювання й компонування.

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

Окрім транслювання багато програм-асемблерів підтримують й іншу функціональність, корисну під час розроблення системного й прикладного програмного забезпечення ― вибір формату об’єктного модуля, генерування символьної інформації (наприклад, відлагоджувальної), різноманітні директиви на кшталт EXTERN чи GLOBAL, макрокоманди тощо.

Директива асемблера ― мовна конструкція, яка не транслюється в машинний код, а слугує для контролю асемблювання програми. Директиви дають змогу керувати формуванням лістинга (друкованого списку рядків комп’ютерного коду або цифрових даних у зручній для сприйняття людиною формі) асемблювання, розподілом пам’яті, визначати символи та дані тощо. Лістинг асемблювання містить результат роботи асемблера. У ньому можна побачити, який машинний код згенеровано відповідно до кожної машинної команди. Лістинг використовують для налагодження й документування програми.

Під час асемблювання програми виконуються такі кроки:

  • аналізування вхідного модуля на наявність синтаксичних помилок;
  • видавання протоколу роботи компілятора лістинга та аварійних повідомлень про помилки;
  • генерування об’єктного модуля.

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

Спочатку кожен рядок асемблера обробляє спеціальна програма транслятора — лексичний аналізатор, який розбиває кожен рядок на лексеми — логічно неподільні одиниці мови: імена, числа, рядки символів, розділювачі, коментарі. На етапі лексичного аналізу виявляють лексичні помилки, коли деяка група символів не може бути віднесена до жодного з класів лексем.

Після розбивання рядка асемблера на лексеми починається другий етап обробки рядка — етап синтаксичного аналізу. Його виконує програма транслятора — синтаксичний аналізатор, який будує з лексем складніші конструкції рядка: поля мітки, коди операцій та операндів. Особливу увагу на цьому етапі приділено іменам користувача: синтаксичний аналізатор заносить їх у спеціальну таблицю імен (часто її ще називають таблицею символічних імен або таблицею символів). Разом з кожним ім’ям у цю таблицю заносять й атрибути імені. Синтаксичний аналізатор може виявити й помилки, що стосуються модуля в цілому, наприклад, перевищення максимальної довжини певного сегмента, відсутність сегмента стека (від. англ. stack — «стос», різновид лінійного списку, структура даних, яка працює за принципом «останнім прийшов — першим пішов») у головному модулі, використання мітки команди в пропозиції резервування пам’яті тощо. На другому проході синтаксичний аналізатор виявляє всі помилки в програмному модулі й однозначно визначає формат кожної команди.

Останній етап роботи транслятора ― генерування об’єктного модуля. На цьому етапі всі числа перетворюються у внутрішнє машинне представлення, записується бітове подання всіх команд, оформляється паспорт об’єктного модуля. Далі отриманий об’єктний модуль записується в бібліотеку об’єктних модулів.

Література

  1. Нортон П., Соухэ Д. Язык ассемблера для IBM PC. Москва : Компьютер, 1992.
  2. Владислав Пирогов. Ассемблер для Windows. Санкт-Петербург : БХВ-Петербург, 2002. 896 с.
  3. Магда Ю. С. Ассемблер. Разработка и оптимизация Windows-приложений. Санкт-Петербург : БХВ-Петербург, 2003.
  4. В. Пирогов. Ассемблер и дизассемблирование. Санкт-Петербург : БХВ-Петербург, 2006. 464 с.

Автор ВУЕ

А. Я. Гладун


Покликання на цю статтю

Покликання на цю статтю: Гладун А. Я. Асемблювання // Велика українська енциклопедія. URL: https://vue.gov.ua/Асемблювання (дата звернення: 7.12.2021).


Оприлюднено

Статус гасла: Оприлюднено
Оприлюднено:
24.11.2021


Офіційний телеграм-канал ВУЕОфіційний телеграм-канал ВУЕ