Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._4.doc
Скачиваний:
2
Добавлен:
11.08.2019
Размер:
177.66 Кб
Скачать

Системне програмування, доц. І.І. Мітасов, 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 – ЕХЕ-програма зі звичайними сегментами

На рис. 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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]