Лекция: Модели памяти и упрощенные директивы определения сегментов. Процедуры.
Таблица 3. Упрощенные директивы определения сегмента
| Формат директивы (режим MASM) | Формат директивы (режим IDEAL) | Назначение |
| .CODE [имя] | CODESEG[имя] | Начало или продолжение сегмента кода |
| .DATA | DATASEG | Начало или продолжение сегмента инициализированных данных. Также используется для определения данных типа near |
| .CONST | CONST | Начало или продолжение сегмента постоянных данных (констант) модуля |
| .DATA? | UDATASEG | Начало или продолжение сегмента неинициализированных данных. Также используется для определения данных типа near |
| .STACK [размер] | STACK [размер] | Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека |
| .FARDATA [имя] | FARDATA [имя] | Начало или продолжение сегмента инициализированных данных типа far |
| .FARDATA? [имя] | UFARDATA [имя] | Начало или продолжение сегмента неинициализированных данных типа far |
Наличие в некоторых директивах параметра [имя] говорит о том, что возможно определение нескольких сегментов этого типа.
Процедура – группа команд для решения конкретной подзадачи.
Синтаксис процедуры:
имя_процедуры PROC [[модификатор_языка ] язык] [расстояние ]
команды
[имя_процедуры ] ENDP
Пример
model small
.stack 100h
.data
.code
my_proc procnear
ret
my_proc endp
start:
end start
процедуру можно распологать в конце программы либо вкладывать в другую. Во втором случае неоходимо предусмотреть обход тела процедуры, ограниченного директивами PROC и ENDP, с помощью JMP/
Команда CALL осуществляет вызов процедуры (подпрограммы). Синтаксис команды:
call [модификатор] имя_процедуры
Подобно команде JMP команда CALL передает управление по адресу с символическим именем имя_процедуры, но при этом в стеке сохраняется адрес возврата (то есть адрес команды, следующей после команды CALL).
Команда RET считывает адрес возврата из стека и загружает его в регистры CS и EIP/IP, тем самым возвращая управление на команду, следующую в программе за командой CALL Синтаксис команды:
ret [число]
Необязательный параметр [число] обозначает количество элементов, удаляемых из стека при возврате из процедуры.
Как и в случае команды JMP, вызов процедуры командой CALL может быть внутрисегментным и межсегментным.