- •Тема 1. Архітектура процесора і мова асемблера: Апаратне і програмне забезпечення соі
- •Лекція 4. Трансляція, компоновка і виконання програм
- •Підготовка програми до перетворення і виконання.
- •Використання стандартних директив визначення сегментів
- •Двопрохідний ассемблер
- •Карта зв` язків
- •Ключові моменти
- •Питання для самоперевірки
Системне програмування, доц. І.І. Мітасов, 2010р. Лекція 4, 10 сторінок
Тема 1. Архітектура процесора і мова асемблера: Апаратне і програмне забезпечення соі
Лекція 4. Трансляція, компоновка і виконання програм
Питання лекції:
Створення початкового програмного модуля;
Асемблювання початкової програми;
Компоновка об'єктного файлу;
Виконання програми;
Лістинг з перехресними посиланнями і лічильник положення в асемблері;
1. Створення початкового програмного модуля
Матеріал цієї лекції пояснює способи введення програми мовою асемблера, а також методи перетворення її в об'єктний код, компонування та виконання. Сімвольні інструкції, з яких ми складаємо програму, називають початковим кодом. Ми використовуємо асемблер для перетворення (трансляції) програми у початковому коді в об'єктний код - послідовність машинних інструкцій. При цьому асемблер видає діагностичні дані (у тому числі повідомлення про помилки) і створює, власне, об'єктний код. Ми отримуємо також деталі лістингів на мові асемблера і коротко розбираємо процес обробки початкового коду.
Нарешті, ми використовуємо програму компонування для формування внутрішніх зв'язків та адресації програми, створюючи з об'єктного коду виконуваний модуль. Розглядаємо також деталі одержуваної карти зв'язків та діагностики, що видається компонувальником, організуємо процес запуску виконуваного модуля.
Page 60, 132 TITLE A04ASM1 (EXE) Операції переміщння та додавання ; ------------------------------------------------------------------------------------------------------------------------------ STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ------------------------------------------------------------------------------------------------------------------------------ DATASEG SEGMENT PARA ‘Data’ 1 FLDD DW 215 1 FLDE DW 125 \ FLDF DW ? DATASEG ENDS ; ------------------------------------------------------------------------------------------------------------------------------ CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK, DS:DATASEG, CS:CODESEG MOV AX, DATASEG ;Помістити адресу MOV DS, AX ;сегмента даних в DS MOV AX,FLDD ;Помістити 0215 в АХ ADD AX,FLDE ;Додати 0125 в АХ 1 MOV FLDF,AX ;Зберегти суму в FLDF 1 MOV AX,4C00H ;Завершити роботу INT 21H MAIN ENDP ;Кінець процедури CODESEG ENDS ;Кінець сегменту END MAIN ;Кінець програми
Рис. 4.1 – ЕХЕ-програма зі звичайними сегментами
|
• STACK містить один запис, DW (define word - визначити слово), котрий визначає 32 слова, що ініціалізовані нулем - адекватний розмір для маленьких програм;
• DATASEG визначає три слова, названі FLDD (ініціалізоване значенням 215), FLDE (ініціалізоване значенням 125), і FLDF (неініціалізоване);
• CODESEG містить виконувані інструкції для програми, хоча перші два речення - PROC і ASSUME - не генерують виконуваного коду.
Директива ASSUME вказує асемблеру виконати наступні дії:
• призначити STACK регістру SS, в результаті процесор використовує адресу в SS для звернення до сегменту STACK;
• призначити DATASEG регістру DS, в результаті процесор використовує адресу в DS для звернення до сегменту DATASEG;
• призначити CODESEG регістру CS, в результаті процесор використовує адресу в CS для звернення до сегменту CODESEG.
При завантаженні програми з диска в пам'ять для виконання завантажувач встановлює правильні адреси сегментів в SS і CS, але, як показано першими двома інструкціями MOV, програма повинна ініціалізувати DS (і, зазвичай, ES).