Программирование игр для Windows. Советы профессионала


Общий вид ассемблерной функции


Процедуры ассемблера очень похожи на Си-функции. У них есть начало, конец и код, расположенный в середине. В этой книге мы будем ссылаться на Microsoft macro assembler версий от 5.1 до 6.1 (MASM). Это связано с тем, что.в них уже есть директивы, упрощающие стыковку с программами на Си.

Примечание

MASM версии 5.0 подойдет для первого примера, но для успешной работы с книгой вам понадобится версия 5.1 или старше.

 

Прежде чем начать изучение способов передачи параметров и прочих интересных вещей, давайте посмотрим, что нам нужно как минимум для написания внешней программы на ассемблере, которую мы потом вызовем из Си. Итак, Листинг 2.1 покажет вам прототип процедуры на ассемблере.

Листинг 2.1. Прототип процедуры для MASM 5.0 и более старших версий.

.MODEL MEDIUM                ;тип модели памяти

.CODE

; начало кода

PUBLIC _function_name      ;информация для компоновщика. Функция             

;может экспортироваться

_function_name PROC FAR      ;название и тип функции(ближняя

;или дальняя). Ближние функции можно использовать для моделей

;памяти SMALL и COMPACT, а дальние применяются для моделей

;памяти MEDIUM, LARGE и HUGE.

push ВР                      ;готовим фрейм стека–пролог

;функции

mov BP,SP                    ;сохраним стек

;Работа функции

pop ВР                       ;восстанавливаем фрейм стека

;эпилог функции

_function_name ENDP          ; конец процедуры

END

;конец кода

Давайте проанализируем программу, приведенную в Листинге 2.1.

§          Первая директива, которую мы встречаем — это .MODEL. Как и компилятор Си, MASM должен знать, какая из моделей памяти используется. Ключевое слово MEDIUM означает, что мы собираемся использовать модель памяти именно типа MEDIUM. Теперь я хочу напомнить вам свойства основных моделей памяти:

·         Модель SMALL имеет один 64-килобайтный сегмент для кода и один сегмент для данных;

·         Модель COMPACT имеет один 64-килобайтный сегмент для кода и несколько сегментов данных;




Начало  Назад  Вперед



Книжный магазин