Этапы создания программы на ассемблере
End main
Model small
Masm
Модели памяти
End main
Code ends
Main endp
Модель памяти определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров. Транслятору необходимо указать модель памяти с помощью директивы Model:
MODEL <модель памяти> [, <язык>]
Типы моделей памяти:
TINY – для программ имеющих всего один сегмент (имеют расширение .com).
SMALL– по этой директиве создается программа с одним сегментом кода, а данные объединены в одну группу.
MEDIUM – несколько сегментов кода (по одному на каждый модуль в объединенной группе), а данные - в одной группе.
COMPACT – код в одном сегменте, данные – в одной группе. Обращение к данным по ссылке far.
LARGE – код в нескольких сегментах (по одному на каждый модуль).
Для простых программ, содержащих по одному сегменту кода, данных, стека можно воспользоваться упрощенными директивами сегментации:
.code [имя] – начало или продолжение сегмента кода.
.data – начало или продолжение инициализированных данных.
.const – начало или продолжение сегмента констант.
.data? – начало или продолжение сегмента неинициализированных данных.
.stack [размер] - начало или продолжение сегмента стека.
.fardata - начало или продолжение сегмента инициализированных данных типа far.
.fardata? - начало или продолжение сегмента неинициализированных данных типа far.
Идентификаторы, создаваемые директивой Model:
@data – физический адрес сегмента данных (ближний адрес).
@code - физический адрес сегмента кода, назначенный CS.
@fardata - физический адрес сегмента данных (дальний адрес).
@stack – сегментный адрес сегмента стека.
Любой из этих адресов загружается в соответствующий сегментный регистр (не напрямую, а через промежуточный регистр).
Пример программы, которая использует упрощенные директивы сегментации:
.stack 256h; начало и размер стека 256 байт
.data; начало сегмента данных
mes db “Введите данные, $”
.code; началосегмента кода
main:
mov ax, @data; в ax загружается адрес сегмента данных
mov ds, ax ;ds загружен адресом сегмента данных
mov ah, 9h ;вызывается функция 9
mov ax, offset mes; в dx загружается адрес строки
int 21h; вывод строки на экран
:
mov ax, 4c00h ;вызываем функцию 4c00h
int 21h; возврат в ОС
1. Ввод исходного текста программы
2. Создание объектного модуля
3. Создание загрузочного модуля
4. Отладка программы
![]() | ![]() | ![]() | |||
Текстовый prog.asm
редактор
![]() | |||
![]() |
Трансляция prog.obj
программы prog.lst
TASM.EXE prog.xrf
![]() | ![]() | |||
![]() |
Компоновка prog .map
программы prog .exe
TLINK.EXE prog .lib
![]() | ![]() | |||
![]() |
Отладка
программы
TD.EXE
1. На 1-ом этапе можно воспользоваться текстовым редактором из Turbo Pascal или редактором из оболочки Far Manager. Необходимо создать свою папку и скопировать в нее TASM.EXE, TLINK.EXE и TD.EXE