Этапы создания программы на ассемблере
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