Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2010, 11:07   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Процедуры, регистры и прочие

Когда мы вызываем какую-л. процедуру, которая работает с параметрами, что мы имеем в регистрах? Параметры функции или что?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.08.2010, 11:55   #2
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Параметры заталкиваются в стек перед вызовом.
В регистре EAX содержится результат после выполнения большинства процедур (в т.ч. WinAPI)
ZaRDaK вне форума Ответить с цитированием
Старый 01.08.2010, 12:01   #3
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Можно и параметры и в стек передовать
VintProg вне форума Ответить с цитированием
Старый 01.08.2010, 12:05   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Параметры заталкиваются в стек перед вызовом.
В регистре EAX содержится результат после выполнения большинства процедур (в т.ч. WinAPI)
Есть возможнось выяснить, сколько параметров в стеке, узнать сами параметры, их типы?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.08.2010, 14:38   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Конечно есть - чтением справки Delphi или сторонних ресурсов.

Правила передачи параметров зависят от модели вызова - register, stdcall, cdecl и т.п. У каждой модели свои правила.

Вообще, зачем это надо? Чтобы в asm-функции обратится к параметру? Там можно использовать его имя - и вы получите свой параметр вне зависимости от модели вызова.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.08.2010, 14:41   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

...или я вопроса не понял?

Если речь про что-то такое типа функции с переменным числом параметров, то такое возможно только при cdecl и в Delphi не реализуемо средствами языка (это поддерживается только в ограниченной форме: при импорте такой процедуры из библиотеки, написанной на C) - только если писать ручками, но и вызывать такое вы замучаетесь.

Проще использовать открытые массивы.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.08.2010, 14:45   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Дело в удобстве использования.
Код:
Procedure Blablabla(Var Bla:Integer; Var Blu,Bly : Byte);
Begin
 ...                                                                     ; Log(Bla, Blu, Bly);
 ...

 ...
 ...                                                                     ; Log(Bla, Blu, Bly);
End;
Или

Код:
Procedure Blablabla(Bla:Integer; Blu,Bly : Byte);
Begin
 ...                                                                     ; Log;
 ...

 ...
 ...                                                                     ; Log;
End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 01.08.2010 в 14:48.
Alex Cones вне форума Ответить с цитированием
Старый 01.08.2010, 14:58   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Телепатаю: вы хотите логгировать параметры функции?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.08.2010, 15:00   #9
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Именно. Чтобы не писать каждый раз параметры при вызове Log создать процедуру без параметров, которая будет смотреть стек и регистры и писать содержимое. Возможно?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.08.2010, 15:17   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Известная проблема X, Y и Z.

Это невозможно.

Несложно догадаться, почему это так.

Потому что расположения параметров фиксированы только при входе в процедуру. В следующий момент с ними может произойти что угодно - компилятор может скинуть их в стек, загрузить в регистры, поменять местами - и всё это до того, как ваш код получит управление. Поэтому написание универсальной процедуры, трогающей все параметры, не обращаясь к ним по именам - невозможно.

Однако, если вас не пугает возможность использования пре-процессора - данная задача вполне решаема, хотя придётся и попотеть.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[WPF] OpenFileDialog и прочие диалоги. Casper-SC Общие вопросы .NET 0 11.06.2010 11:54
Регистры Волк Microsoft Office Excel 9 08.04.2009 16:07
Регистры Манжосов Денис :) Помощь студентам 8 28.07.2008 12:48
Регистры RealSHELS Общие вопросы Delphi 3 28.03.2008 18:56
Регистры Elm0 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 10.02.2008 19:49