Уроки Iczelion'а


         

то из кода вы не


Суть:
Вот каркасная программа. Если что- то из кода вы не понимаете, не паникуйте. В дальнейшем я все объясню.
.386 .MODEL Flat, STDCALL .DATA <Ваша инициализируемые данные> ...... .DATA? <Ваши не инициализируемые данные> ...... .CONST <Ваши константы> ...... .CODE <метка> <Ваш код> ...... end <метка>
Вот и все! Давайте проанализируем этот "каркас".
.386
Это ассемблерная директива, говорящая ассемблеру использовать набор операций для процессора 80386. Вы также можете использовать .486, .586, но самый безопасный выбор - это указывать .386. Также есть два практически идентичных выбора для каждого варианта CPU. .386/.386р, .486/.486р. Эти "р"-версии необходимы только тогда, когда ваша программа использует привилегированные инструкции, то есть инструкции, зарезервированные процессором/операционной системой в защищенном режиме. Они могут быть использованы только в защищенном коде, например, vxd-драйверами. Как правило, ваши программы будут работать в непривилегированном режиме, так что лучше использовать не-"р" версии.
.MODEL FLAT, STDCALL
.MODEL - это ассемблерная директива, определяющая модель памяти вашей программы. Под Win32 есть только одна - плоская модель. STDCALL говорит MASM'у о порядке передачи параметров, слева направо или справа налево, а также о том, кто уравнивает стек, после того как функция вызвана.
Под Win16 существует два типа передачи параметров, C и PASCAL. По C-договоренности, параметры передаются справа налево, то есть самый правый параметр кладется в стек первым. Вызывающий должен уравнять стек после вызова. Hапример, при вызове функции с именем foo(int first_param, int second_param, int third_рaram), используя C-передачу параметров, ассемблерный код будет выглядеть так:
рush [third_рaram] ; Положить в стек третий параметр рush [second_рaram] ; Следом - второй рush [first_рaram] ; И, наконец, первый call foo add sр, 12 ; Вызывающий уравнивает стек
PASCAL-передача параметров - это C-передача наоборот. Согласно ей, параметры передаются слева направо и вызываемый параметр должен уравнивать стек.

Содержание  Назад  Вперед