Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота № 1 МЗКІТ (Звіт з 4-х частин).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
47.93 Кб
Скачать

1.2.3 Створення сom-програм

Усі вищенаведені директиви сегментації й приклади програм призначені для створення програм в EXE- форматі (за винятком моделі пам'яті TINY при використанні спрощених директив сегментації.).

Компонувальник LINK автоматично генерує особливий формат для Exe-Файлів, у якому є присутнім спеціальний початковий блок (заголовок) розміром не менш 512 байт.

Для виконання можна також створювати COM-файли. Прикладом часто використовуваного COM- файлу є COMMAND.COM.

Розмір програми. EXE- програма може мати будь-який розмір, у той час як COM- файл обмежений розміром одного сегмента й не перевищує 64К. COM- файл завжди менше, ніж відповідний EXE- файл; одна із причин цього - відсутність в COM- файлі 512-байтового початкового блоку EXE-файлу.

Сегмент стека. В EXE- програмі визначається сегмент стека, у той час як COM- програма генерує стек автоматично. Таким чином, при створенні асемблерної програми, яка буде перетворена в COM- файл, стек повинен бути опущений.

Сегмент даних. В EXE-програмі звичайно визначається сегмент даних, а регістр DS ініціалізується адресою цього сегмента. В COM- програмі всі дані повинні бути визначені в сегменті коду. Нижче буде показаний простий спосіб рішення цього питання.

Ініціалізація. EXE- програма записує нульове слово в стек і ініціалізує регістр DS. Враховуючи що COM- програма не має ні стека, ні сегмента даних, то ці кроки відсутні.

Коли COM- програма починає працювати, усі сегментні регістри містять адресу префікса програмного сегмента (PSP), - 256-байтового (шістнадцяткове 100) блоку, який резервується операційною системою DOS безпосередньо перед COM або EXE програмою в пам'яті. Враховуючи що адресація починається із шістнадцяткового зсуву 100 від початку PSP, то в програмі після оператора SEGMENT кодується директива ORG 100H.

Обробка. Для програм в EXE і COM форматах виконується асембліровання для одержання OBJ-файлу, і компонування для одержання EXE-файлу. Якщо програма створюється для виконання як EXE-файл, то її вже можна виконати. Якщо ж програма створюється для виконання як COM-файл, то компонувальником буде видане повідомлення: Warning: No STACK Segment (Попередження: Сегмент стека не визначений)

Нижче приведемо приклад COM-програми:

CSEG Segment 'Code'

assume CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG

org 100h

start:

mov ah,9

mov dx,offset message

int 21h ; ah=9 функція 21h переривання

; виводить рядок на екран, адресу

; якої зберігатися в регістрі dx

int 20h ; вихід з COM-програми

message db 'Hello World,$' ; опис рядка

ends

end start

1.3 Компіляція програм на асемблері

Для написання програм мовою асемблері ви можете скористатися будь-яким текстовим редактором, що підтримують кодування ASCII-символів, наприклад «Блокнот»/«Notepad» з ОС Windows або вбудованим текстовим редактором FAR/DN/NC і ін.

Для створення файлів, що виконуються, із програм написаних мовою асемблера вам необхідно використовувати компілятор TASM.EXE і лінковщик TLINK.EXE.

TASM.EXE компілює програмні модулі асемблера в об'єктні модулі OBJ. А TLINK.EXE з декількох модулів робить один файл, що виконується, EXE або COM. Більш докладний синтаксис використання TASM.EXE і TLINK.EXE можна одержати запустивши ці програми без параметрів.