Читайте также:
|
|
Программа, написанная на ассемблере MASM, может состоять из нескольких частей, называемых модулями, в каждом из которых могут быть определены один или несколько сегментов данных, стека и кода. Любая законченная программа на ассемблере должна включать один главный, или основной (main), модуль, с которого начинается ее выполнение. Основной модуль может содержать программные сегменты, сегменты данных и стека, объявленные при помощи упрощенных директив. Кроме того, перед объявлением сегментов нужно указать модель памяти при помощи директивы.MODEL.
model small; эта директива указывается до объявления сегментов
.stack 100h;размер стека 256 байт
.data;начало сегмента данных
;данные
.code;здесь начинается сегмент программ
main:
;команды ассемблера
end main
При помощи следующих команд в сегментный регистр DS помещается адрес сегмента данных, указанного директивой.data:
mov AX, @data
mov DS, AX
“Классический” шаблон 32-разрядного приложения содержит область данных (определяемую директивой.data), область стека (директива.stack) и область программного кода (директива.code). Может случиться так, что 32-разрядному приложению на ассемблере потребуется несколько отдельных сегментов данных и/или кода. В этом случае разработчик может создать их с помощью директивы SEGMENT.
имя ENDS
.DATA (.data) определяет сегмент данных, в котором располагаются неинициализированные данные. При наличии предыдущего сегмента новый сегмент завершает его. Неинициализированные данные могут объявляться в Директива SEGMENT определяет логический сегмент и может быть описана следующим образом:
имя SEGMENT список атрибутов
...
сегменте.DATA при помощи оператора?. Преимуществом директивы.DATA является то, что при ее использовании уменьшается размер исполняемого файла и, кроме того, обеспечивается лучшая совместимость с другими языками. Этой директиве должна предшествовать директива.MODEL.
.data
val1 DW 11
string1 DB "Text string"
byte1 DB?
.STACK (.stack) [размер] — определяет начало сегмента стека с указанным размером памяти, который должен быть выделен под область стека. Если параметр не указан, размер стека предполагается равным 1 Кбайт. При наличии предыдущего сегмента новый сегмент завершает его. Этой директиве должна предшествовать директива.MODEL.
.CODE (.code) [имя] — определяет сегмент программного кода и заканчивает предыдущий сегмент, если таковой имеется. Необязательный параметр имя замещает имя _TEXT, заданное по умолчанию. Если имя не определено, ассемблер создает сегмент с именем _TEXT для моделей памяти tiny, small, compact и flat или сегмент с именем имя_модуля_TEXT для моделей памяти medium, large и huge. Этой директиве должна предшествовать директива.MODEL, указывающая модель памяти, используемую программой.
Дата добавления: 2015-02-16; просмотров: 115 | Поможем написать вашу работу | Нарушение авторских прав |