Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 05.04.2008, 10:31   #1
fermat_c
 
Регистрация: 05.04.2008
Сообщений: 3
По умолчанию директивы в MASM - INVOKE, PROTO, LOCAL

продскажите плиз как работают дирекимвы INVOKE , PROTO и LOCAL
заранее спасибо

Последний раз редактировалось rpy3uH; 05.04.2008 в 13:22.
fermat_c вне форума Ответить с цитированием
Старый 05.04.2008, 11:14   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,431
Плохо

директива INVOKE - упрощенный вызов процедуры на MASM, компилятор
генерит необходимое количество PUSH_ей и CALL, к примеру:

строка
invoke Sleep, 100

в exe-шнике будет такой -
00401000 6A64 push 64h
00401002 E847000000 call fn_0040104E
.............
.............
0040104E FF2508204000 jmp dword ptr [Sleep]
все адреса естественно условные, в вашей программе они будут скорее
всего другими.

proto - определение процедуры, объясняет компилятору сколько и каких
параметров имеет процедура

синтиксис:
function1 proto :DWORD, :DWORD
означает, что процедура function1 имеет два параметра по четыре байта
каждый.
Ulex вне форума Ответить с цитированием
Старый 05.04.2008, 13:28   #3
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,808
По умолчанию

директива LOCAL нужна дял объявления локальный переменных с процедурах. Локальные переменные содержатся в стеке и существуют только во время выполнения процедуры.

Код:
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL hwnd:DWORD
LOCAL msg:MSG
rpy3uH вне форума Ответить с цитированием
Старый 05.04.2008, 17:25   #4
ёжик
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 13
По умолчанию

PROTO - объявление прототипа функции (вроде так)

пример:
GetMessageA PROTO :DWORD,:DWORD,:DWORD,:DWORD
для функции GetMessageA объявлюются 4 переменные размером двойное слово, которые использует функция

далее при вызове этой функции в программе следуют 4 параметра

пример:
invoke GetMessageA,offset message,NULL,NULL,NULL
ёжик вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем отличается Tasm от Masm veter_s_morya Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 17 21.07.2008 15:55
А где взять MASM RomanIgorevi4 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 06.07.2008 12:04
Директивы компиляции joker Общие вопросы Delphi 3 10.06.2008 08:41
struct vs MASM format Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 09.05.2008 16:54
Директивы препроцессора в С++ alef Общие вопросы C/C++ 1 25.04.2008 00:36


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS