![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Когда мы вызываем какую-л. процедуру, которая работает с параметрами, что мы имеем в регистрах? Параметры функции или что?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 197
|
![]()
Параметры заталкиваются в стек перед вызовом.
В регистре EAX содержится результат после выполнения большинства процедур (в т.ч. WinAPI) |
![]() |
![]() |
![]() |
#4 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]() Цитата:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Конечно есть - чтением справки Delphi или сторонних ресурсов.
Правила передачи параметров зависят от модели вызова - register, stdcall, cdecl и т.п. У каждой модели свои правила. Вообще, зачем это надо? Чтобы в asm-функции обратится к параметру? Там можно использовать его имя - и вы получите свой параметр вне зависимости от модели вызова.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
...или я вопроса не понял?
Если речь про что-то такое типа функции с переменным числом параметров, то такое возможно только при cdecl и в Delphi не реализуемо средствами языка (это поддерживается только в ограниченной форме: при импорте такой процедуры из библиотеки, написанной на C) - только если писать ручками, но и вызывать такое вы замучаетесь. Проще использовать открытые массивы.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#7 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Дело в удобстве использования.
Код:
Код:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ Последний раз редактировалось Alex Cones; 01.08.2010 в 14:48. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Телепатаю: вы хотите логгировать параметры функции?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#9 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Именно. Чтобы не писать каждый раз параметры при вызове Log создать процедуру без параметров, которая будет смотреть стек и регистры и писать содержимое. Возможно?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Известная проблема X, Y и Z.
Это невозможно. Несложно догадаться, почему это так. Потому что расположения параметров фиксированы только при входе в процедуру. В следующий момент с ними может произойти что угодно - компилятор может скинуть их в стек, загрузить в регистры, поменять местами - и всё это до того, как ваш код получит управление. Поэтому написание универсальной процедуры, трогающей все параметры, не обращаясь к ним по именам - невозможно. Однако, если вас не пугает возможность использования пре-процессора - данная задача вполне решаема, хотя придётся и попотеть.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[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 |