асемблерна вставка

У програмуванні. ассемблерной вставкою називають можливість компілятора вбудовувати низькорівневий код, написаний на асемблері. в програму, написану на мові високого рівня. наприклад, Сі або Ada. Використання асемблерних вставок може переслідувати наступні цілі:

  • Оптимізація. З цією метою, вручну пишеться асемблерний код, який реалізує найбільш критичні по відношенню до продуктивності частини алгоритму. Це дозволяє програмісту використовувати в повній мірі свою винахідливість, не обмежуватися конструкціями компілятора.
  • Доступ до специфічним інструкціям процесора. Деякі процесори підтримують спеціальні інструкції, такі як порівняння з обміном і test-and-set - інструкції, які можуть бути використані для реалізації семафорів або інших примітивів синхронізації і блокувань. Практично всі сучасні процесори мають такі або подібні інструкції, так як вони необхідні для реалізації багатозадачності. Спеціальні інструкції можна знайти в системах команд наступних процесорів: SPARC VIS. Intel MMX і SSE. Motorola AltiVec.
  • Системні виклики. Мови програмування високого рівня рідко надають пряму можливість робити системні виклики, для цих цілей використовується асемблерний код [1].

Приклад оптимізації та використання спеціальних інструкцій процесора

Цей приклад ассемблерной вставки на мові програмування D. який реалізує обчислення тангенса x, використовує інструкції FPU архітектури x86. Цей код виповнюється швидше, ніж код, який міг би бути згенерований компілятором. Також, тут використана інструкція fldpi. яка завантажує найбільш близьку апроксимацію числа π для архітектури x86.

Приклад системного виклику

Звернення до операційної системи безпосередньо, як правило, неможливо при наявності захищеної пам'яті. ОС працює на більш привілейованому рівні (режим ядра), ніж користувач (призначений для користувача режим). Для того щоб робити запити в ОС, використовуються програмні переривання. Рідко мови високого рівня підтримують таку можливість, тому інтерфейси системних викликів пишуться з використанням асемблерних вставок [1].

Наступний приклад на мові СІ містить інтерфейс системного виклику, написаний з використанням ATT синтаксису GNU Assembler. Для початку розглянемо формат ассемблерной вставки на простому прикладі:

Ідентифікатори asm і __asm__ еквівалентні. Інший приклад простої вставки:

Приклад реалізації інтерфейсу системного виклику: