Шаблон 1 програми для сом-файла
; Шаблон COM -програми.
; сегмент кода.
; Модель пам’яті tiny - код і дані розташовуються в одному сегменті
.MODEL TINY
.CODE
ORG 100H
program:
;----
;----
RET
<Опис даних>
END program
Шаблон 2 програми для сом-файла
Типова структура COM-програми аналогічна структурі EXE-програми, з тією лише різницею, що COM-програма містить лише один сегмент – сегмент коду, який включає інструкції процесора, директиви і описи змінних.
;Визначення сегмента кода
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,SS:CODE
ORG 100H ;Початок для COM-програми, резервування місця під стек
;Визначення підпрограми
PROC1 PROC
. . . ;Текст піпрограми
PROC1 ENDP
START:
. . . ;Текст програми
MOV AH,4CH ;Оператори завершеня програми
INT 21H
;===== Data =====
BUF DB 6 ;Визначення змінної типу Byte
. . . ;Визначення інших даних
CODE ENDS
END START
Шаблон 3 програми для сом-файла
; Виведення заголовка (TITLE) програми у другому рядку кожної
; сторінки лістингу
TITLE ASCOM COM-ПРОГРАМА ПЕРЕМІЩЕННЯ ТА ДОДАВАННЯ
;Вирівнювання адреси сегмента кода на межу параграфа – адреса
;націло ділиться на 16 (10Н)
CODESEG SEGMENT PARA 'Code'
;Регістри CS, DS, SS, ES повинні містити адресу початку ;сегмента кода
ASSUME CS:CODESEG, DS:CODESEG, SS:CODESEG, ES:CODESEG
;Початок для COM-програми, резервування місця під стек
ORG 100H
;Значення 100Н розміщено в регістр ІР, тому наступне речення
;після ORG повинно бути виконуваною командою
Begin: JMP MAIN; JMP – команда переходу на мітку MAIN
;Якщо дані записати після інструкцій,
; то потреби у операторі JMP немає
;--------------------------------------------------------
DD1 DW 220 ; Визначення даних
DD2 DW 115
DD3 DW ?
;-----------------------------------------------------------
MAIN PROC NEAR ;Процедура MAIN
MOV AX, DD1 ; В регістр АХ переслати 220
ADD AX, DD2 ;Додати 115 до АХ
MOV DD3, AX ;Переслати суму в DD3
MOV AX, 4C00H ; Завершити роботу
INT 21H
MAIN ENDP ;Кінець процедури MAIN
CODESEG ENDS ;Кінець сегмента кода
END BEGIN
Шаблон 1 програми для ехе-файла
Шаблон EXE -програми.
; Сегмент даних + сегмент кода.
; Модель пам’яті small - код розташовується в одному сегменті,
; а дані та стек – в іншому.
.MODEL SMALL
.DATA
.CODE
program:
MOV AX,@DATA ;Ініціалізація сегмента DS
MOV DS,AX ;адресою сегмента даних
;----
;----
MOV AX, 4C00H
INT 21H
END program
Для невеликих EXE-програм з трьохсегментною структурою типова наступна структура:
Шаблон 2 програми для ехе-файла
;Визначення сегмента стека
STAK SEGMENT STACK
DB 256 DUP (?)
STAK ENDS
;Визначення сегмента даних
DATA SEGMENT
SYMB DB '#' ;Опис змінної з іменем SYMB
;типу Byte і зі значенням «#»
. . . ;Визначення інших змінних
DATA ENDS
;Визначення сегмента кода
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAK
;Регістр CS містить адресу початку сегмента кода CODE
;Регістр DS містить адресу початку сегмента даних DATA
;Регістр SS містить адресу початку сегмента стека STAK
;Визначення підпрограми
PROC1 PROC
. . . ;Текст подпрограми
PROC1 ENDP
START: ;Точка входу в програму START
XOR AX,AX ;Обнулення регістру АХ
MOV BX,data ;Обов’язкова ініціалізація
MOV DS,BX ;регістра DS на початку програми
CALL PROC1 ;Приклад виклику підпрограми
. . . ;Текст програми
MOV AX,4C00H ;Оператори завершення програми
INT 21H ;Повернення у DOS
CODE ENDS
END START
; hello-l.asm
; Выводит на экран сообщение "'Hello World!" и завершается
.model small ; модель памяти, используемая для EXE
.stack 100h ; сегмент стека розміром 256 байт
; В сегменте данных
.data
message db "Hello World! $'' ; строка для вывода символы управления
; В сегменте команд
.code ; начало сегмента кода
start: mov ah, 09h ; номер функции DOS: вывод на экран - в АН
mov dx,offset message ; адрес строки - в DX
int 21h ; вызов системной функции DOS: вывести строку на экран
end start ; конец программы
; hello-l.asm
; Выводит на экран сообщение "'Hello World!" и завершается
.model tiny ; модель памяти, используемая для СОМ
.code ; начало сегмента кода
org 100h ; начальное значение счетчика - 100h
start: mov ah, 09h ; номер функции DOS: вывод на экран - в АН
mov dx,offset message ; адрес строки - в DX
int 21h ; вызов системной функции DOS: вывести строку на экран
ret ; завершение СОМ-программы, выход в MS DOS
message db "Hello World!",0Dh,0Ah,'$' ; строка для вывода символы управления
; 0dh – Return (возврат каретки), 0ah – Line feed (перевод строки)
End start ; конец программы
