Мова Асамблера

 Мова асемблера (англ. assembly language) — мова програмування низького рівня для програмованої обчислювальної системи (мікропроцесора, мікроконтролера, комп'ютера або іншого програмованого пристрою), в якій існує сувора відповідність між операторами мови та машинними командами[2]. Асемблер також називають символічним машинним кодом або мнемокодом.

Кожна мова асемблера специфічна для конкретної комп'ютерної архітектури. На відміну від цього, програми на мовах програмування високого рівня, як правило, здатні виконуватися на декількох архітектурах, хоча вимагають специфічної для платформи інтерпретації або компіляції.

Програма мовою асемблера перетворюється у виконуваний машинний код за допомогою програми-асемблера. Процес перетворення називають асемблюванням або збіркою (англ. assembly, assembling). У більшості випадкі


в цей процес відбувається у два етапи: асемблювання і компонування[3] Асемблер (англ. assembler — складальник) — комп'ютерна програма, що генерує об'єктний двійковий код з заданої (як правило у текстовому вигляді) послідовності машинних інструкцій. Кожна інструкція має свою мнемоніку, і складається з символічної назви (наприклад, MOV — від англ. move, «перемістити»), за якою опціонально можуть слідувати операнди. Асемблер також обчислює значення констант і здійснює резолвінг символічних імен (і, якщо потрібно, записує у об'єктний файл адреси, які потрібно модифікувати під час компонування чи завантажування програми).[4] Використання символьних посилань і автоматизація обчислень адрес є однією з ключових особливостей асемблера, яка звільняє програміста від кропітких ручних обчислень (які доводилося б робити навіть при додаванні чи вилученні однієї інструкції програми). Більшість асемблерів також мають макрокоманди, що дозволяють замінювати у програмі повторювані фрагменти коду викликом макроса.

У простому випадку асемблер переводить одну операцію (машинну команду з параметрами) початкової програми у відповідний машинний код (так звана трансляція «один в один»). При цьому взаємне розташування кодів інструкцій у об'єктному модулі визначається порядком операцій у початковій програмі і повністю залежить від програміста. Для розширення можливостей низькорівневого програмування асемблери можуть реалізовувати підтримку макрокоманд — груп команд, що можуть вставлятися до програми потрібну кількість разів. В цьому випадку перед трансляцією проводиться заміна макрокоманд макророзширеннями — послідовностями команд на базовій мові відповідно до макроозначень. У останніх задається прототип макрокоманди зі структурою списку параметрів і процедура генерування макророзширення. Транслятор, що виконує функції макрогенератора і асемблера, називається макроасемблером. При трансляції з мов високого рівня асемблер нерідко використовується для виконання завершальної фази трансляції.

Трансляція зазвичай вимагає двох переглядів початкової програми: при першому перегляді здійснюється розподіл пам'яті і надання значень символічним іменам; при другому — формується робоча програма у вигляді об'єктного файлу. В процесі трансляції асемблер проводить повний синтаксичний контроль початкової програми, забезпечуючи при цьому достатньо точну діагностику помилок за місцем і характером.

Вважається[ким?], що мова асемблера є низькорівневою (на противагу мовам програмування високого рівня, що частково чи повністю абстрагуються від деталей реалізації команд процесора). Чим нижчий рівень мови програмування, тим ближча специфіка роботи програми до самого процесора, для якого вона й була написана. Вважається[ким?], що мови низького рівня складніші й потребують більш вузької спеціалізації програміста, оскільки програма написана на асемблері для одного типу процесорів виявиться не завжди придатною для роботи з іншими процесорами. З іншого боку, програми написані на асемблері компактні та швидкі, що теж важливо.




Коментарі

Популярні дописи з цього блогу