Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Как узнавать ассемблерные коды параметров функций?


Автор: slavaentp 14.6.2009, 16:39
В MSDN это не всегда есть, например:

http://msdn.microsoft.com/en-us/library/ms712879.aspx

Автор: GremlinProg 14.6.2009, 17:03
ассемблерные коды параметров функций

это что еще за зверь?
даже приблизительно непонятно в чем вопрос
slavaentp, расшифруй, пожалуйста, что ты имел ввиду

Автор: slavaentp 14.6.2009, 17:26
Имеется в виду использование ВинАпи на ассемблере.

Пример:

push 0
push 0
push aa11bbcc; //aa11bbcc - адрес строки, которая содержит имя файла + 00.
Call PlaySoundA

3 пуша - это три параметра функции Play Sound. У этого параметра коды: 00 содержит одно значение(например - SND_APPLIACTION), у 01 другое, у 02 третье и т.д.

Автор: GremlinProg 14.6.2009, 17:53
Цитата(slavaentp @  14.6.2009,  19:26 Найти цитируемый пост)
3 пуша - это три параметра функции Play Sound. У этого параметра коды: 00 содержит одно значение(например - SND_APPLIACTION), у 01 другое, у 02 третье и т.д.

3 пуша - это действия, которые необходимо провести, чтобы сформировать http://ru.wikipedia.org/wiki/Стековый_кадр на входе, но это ни как не коды параметров,

коды (значения)  параметров общеприняты и обусловлены типами параметров, которые как раз документированы: LPCTSTR, HMODULE, DWORD

приблизительно, я могу предположить, что у тебя появились вопросы по соглашениям вызовов API, которые влияют на порядок укладки параметров в стек и признак их освобождения после вызова

тут - да, верно,
не всегда такие моменты освещает документация, но это скорее всего связано с тем,
чтобы смысл содержания документа доходил до читателя быстрее,
а детали всегда можно найти в SDK

загляни в файл mmsystem.h, на который ссылается MSDN в разделе Requirements, и найдешь примерно следующее:
Код

WINMMAPI BOOL WINAPI PlaySoundA( __in_opt LPCSTR pszSound, __in_opt HMODULE hmod, __in DWORD fdwSound);
WINMMAPI BOOL WINAPI PlaySoundW( __in_opt LPCWSTR pszSound, __in_opt HMODULE hmod, __in DWORD fdwSound);
#ifdef UNICODE
#define PlaySound  PlaySoundW
#else
#define PlaySound  PlaySoundA
#endif // !UNICODE

т.е. тут используется соглашение stdcall, что значит: положить в стек параметры в обратном порядке, но выталкивать их после вызова уже не нужно, это делает сама функция

PS: это основное соглашение, которое использует API, и это еще одна причина, по которой соглашение вызова не приводится в MSDN

Автор: slavaentp 14.6.2009, 18:01
Это не отменяет того факта, что в ассемблере пишется Push 0, Push 2, Push 80 и т.д., а не имена переменныхsmile

Автор: GremlinProg 14.6.2009, 18:19
Цитата(slavaentp @  14.6.2009,  20:01 Найти цитируемый пост)
Это не отменяет того факта, что в ассемблере пишется Push 0, Push 2, Push 80 и т.д., а не имена переменных

начинаю понимать суть вопроса )

вообще-то, это зависит от компилятора,
если он поддерживает директиву define, то и "цифры" запоминать и писать не надо )
достаточно найти приемлемый, актуальный набор SDK для своего компилятора, в котором все эти константы объявлены
и использовать их в своих программах

у нас есть раздел http://forum.vingrad.ru/forum/ASM-forum.html, в котором решаются, среди прочего, и эти вопросы

Автор: slavaentp 14.6.2009, 18:22
Я программлю через ОллиДебаггерsmile

Автор: GoldFinch 14.6.2009, 18:32
slavaentp, судя по уровню вопроса, те еще рано чтото делать на асме

Автор: slavaentp 14.6.2009, 19:22
GremlinProg, раз уж перенесли в раздел АСМ - то меня больше интересует соседний вопрос, который я в этом же разделе задал;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)