1.3.6. Генерація коду
Остання
фаза компіляції полягає в генерації
цільового коду, зазвичай переміщуваного
(relосаtable) машинного коду або асемблерного
коду. Для кожної змінної програми
визначається її положення в пам'яті.
Після цього кожна проміжна инструкція
транслюється в послідовність машинних
інструкцій, які виконують ту ж саму
роботу. Ключовий аспект цієї фази полягає
в призначенні змінних регістрам.
Наприклад,
використовуючи регістри R1
і R2
при трансляції коду (1.4), отримаємо
наступний код:
MOVF
id3, R2
MULF
#60.0, R2
MOVF
id2, R1
ADDF
R2, R1
MOVF
R1,
id1
Перший
і другий операнди кожної інструкції
визначають джерело і приймач. F
говорить про те, що в інструкції
використовуються числа з плаваючою
крапкою. Цей код переміщує вміст адреси
id3
в регістр R2,
потім множить його на дійсну константу
60.0. Символ # означає, що 60.0 являє собою
константу. Третя інструкція переносить
значення id2
в регістр R1,
а потім до нього додається обчислене
раніше значення з регістра R2.
І нарешті, значення з регістра R1
переноситься в комірку
пам'яті з адресою id1.
Тим самим код реалізує присвоєння,
показане на рис. 1.8.