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

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

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

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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,432
Плохо

директива 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 имеет два параметра по четыре байта
каждый.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
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
ёжик вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем отличается 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

Реклама для незарегистрированных, регистрация на форуме