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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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

директива 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, 14:28   #3
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Адрес: Солнечное Тбилиси
Сообщений: 4,806
Репутация: 2006
По умолчанию

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

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

icq: 283790967
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем отличается Tasm от Masm veter_s_morya Assembler 17 21.07.2008 16:55
А где взять MASM RomanIgorevi4 Assembler 4 06.07.2008 13:04
Директивы компиляции joker Общие вопросы Delphi 3 10.06.2008 09:41
struct vs MASM format Assembler 4 09.05.2008 17:54
Директивы препроцессора в С++ alef Общие вопросы C/C++ 1 25.04.2008 01:36


04:14.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.