Masm, tasm і wasm

Асемблери MASM, TASM і WASM відрізняються між собою. Однак створення простих програм для них практично не має відмінностей, за винятком самого ассемблирования і компонування.

ПРИМІТКА
Зверніть увагу, що в першій команді ми записали 2 замість 02h. MASM, TASM і WASM, як і Emu8086, допускають такі «вольності». Хоча можна написати 02h - помилки не буде.

Пояснення до програми:

.model tiny - 1-ша рядок. Директива .model визначає модель пам'яті для конкретного типу файлів. У нашому випадку це файл з розширенням COM, тому вибираємо модель tiny, в якій об'єднані сегменти коду, даних, і стека. Модель tiny призначена для створення файлів типу СОМ.

.code - 2-а рядок. Ця директива починає сегмент коду.

ORG 100h - 3-й рядок. Ця команда встановлює значення програмного лічильника в 100h, тому що при завантаженні СОМ-файлу в пам'ять, DOS виділяє під блок даних PSP перші 256 байт (десяткове число 256 одно шістнадцятиричним 100h). Код програми розташовується тільки після цього блоку. Всі програми, які компілюються у файли типу СОМ, повинні починатися з цієї директиви.

start: MOV AH, 02h - 4-й рядок. Мітка start розташовується перед першою командою в програмі і буде використовуватися в директиві END, щоб вказати, з якої команди починається програма. Інструкція MOV поміщає значення другого операнда в перший операнд. Тобто значення 02h поміщається в регістр АН. Для чого це робиться? 02h - це ДОСовскіх функція, яка виводить символ на екран. Ми пишемо програму для DOS, тому використовуємо команди цієї операційної системи (ОС). А записуємо ми цю функцію (а точніше її номер) саме в регістр АН, тому що переривання 21h використовує саме цей регістр.

MOV DL, 41h - 5-й рядок. Код символу «A» заноситься в регістр DL. Код символу «A» за стандартом ASCII - це число 41h.

INT 21h - 6-й рядок. Це і є те саме переривання 21h - команда, яка викликає системну функцію DOS, задану в регістрі АН (в нашому прикладі це функція 02h). Команда INT 21h - основний засіб взаємодії програм з ОС.

INT 20h - 7-й рядок. Це переривання, яке повідомляє операційній системі про вихід з програми, і про передачу управління консольного додатку. У тому випадку, якщо програма вже відкомпільована і запущена з ОС, команда INT 20h поверне нас в ОС (наприклад, в DOS).

END start - 8-й рядок. Директива END завершує програму, одночасно вказуючи, з якою мітки повинно починатися її виконання.

Ну ось, програму ми написали. Але хотілося б подивитися, як вона працює. Для цього потрібно спочатку викликати асемблер, щоб скомпілювати її в об'єктний файл, а потім викликати компоновщик, який з об'єктного файлу створить виконуваний файл, тобто програму типу COM. Для різних ассемблеров доведеться виконувати ці дії по різному.