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 можна одержати запустивши ці програми без параметрів.
