![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Директива MODEL позволяет задавать в программе одну из нескольких стандартных моделей управления памятью, когда используется упрощенное описание сегментов. Кроме того, ее можно использовать для указания языкового соглашения, определяющего порядок передачи параметров функциям API, и возврата из подпрограммы.
Как известно, функции API написаны на языке С. Ассемблерные программы используют их как внешние процедуры. Для правильной передачи параметров функциям API и использования результатов их работы необходимо определить языковое соглашение.
Для функций WIN32 API применяется соглашение STDCALL. В этом случае параметры помещаются в стек в обратном порядке, вызываемая процедура освобождает стек при своем завершении.
Перед первой командой процедуры транслятор вставляет код пролога, который выполняет следующие операции: сохраняет текущее значение EВР в стеке, загружает в EВР текущее значение регистра – указателя стека ESP, устанавливает указатель стека на область локальных переменных, сохраняет в стеке регистры, указанные в USES описания процедуры. При завершении процедуры вставляется код эпилога, выполняющий операции, обратные операциям пролога: восстанавливает из стека регистры, указанные в USES описания процедуры, изменяет указатель стека, освобождая область локальных переменных, восстанавливает из стека EВР, освобождает стек от переданных процедуре переменных, если этого требуют языковые соглашения, и осуществляет возврат.
Ключевое слово NOLANGUAGE в качестве языкового соглашения означает отмену автоматической генерации пролога и эпилога. В этом случае передача аргументов через стек и код пролога и эпилога должны присутствовать в тексте программы в явном виде [5].
MODEL <модель_памяти >,< языковое_соглашение >
В режиме MASM применяется тот же синтаксис, но с директивой .MODEL.
В случае программирования в среде Windows для защищенного режима модель памяти будет flat, что означает с логической точки зрения наличие совмещенных четырех гигабайтных сегмента, нижняя граница которых 0. Поэтому в адресных операндах программ защищенного режима используются только смещения.
Дата публикования: 2015-10-09; Прочитано: 195 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!