| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Локальные переменные |
| Автор: <Spawn> 27.10.2004, 16:35 | ||
Есть проблемка в передаче локальной адреса локально переменной функции GetWindowRect(Использую TASM). Самого кода щас нет, но вот примерное его формирование:
Если переменную меняю на глобальную, то все ок. В чем может быть дело? |
| Автор: p0s0l 27.10.2004, 16:58 |
| Попробуй так: lea eax, [REC] push eax т.к. локальные переменные находятся в стеке, и offset REC даст скорее всего смещение относительно esp... Не знаю точно... Вместо lea eax, [REC] скомпилится что-нибудь тиа: lea eax, [esp + $10] к примеру, и тогда можешь уже передавать этот адрсе GetWindowRect |
| Автор: Akina 27.10.2004, 17:21 |
| p0s0l прав. Просто вызывать локальную переменную надо из сегмента стека: override SS = DB 36h или использовать FAR-указатели: push SS push OFFSET REC |
| Автор: <Spawn> 28.10.2004, 11:17 |
| Спасибо, попробую при первой возможности. |
| Автор: <Spawn> 30.10.2004, 10:05 | ||
После 30 минут сборки\проверки\краха проги, сократил процедурину до:
Даже при таком раскладе генерица ошибка вызова фукции. Как коментирую LOCAL все работает. Наверное ето простой вопрос, но все же в чем дело? |
| Автор: oleg1973 30.10.2004, 13:34 | ||
| с тасмом не дружу сильно на Fasm будет так
и все переменные /параметры фунуции через стек идут при компиляции получим push ebp mov ebp,esp mov eax,[ebp+4] не знаю поможет ли тебе это |
| Автор: <Spawn> 4.11.2004, 19:07 | ||||
oleg1973Спасибо, но проблемы пока не решилась. Уже не занаю что делать. Заметил еще одну особенность: Если в функцию не передавать параметров, то объявление локальных переменных не вызывает ошибки:
При передаче параметров в функцию программа просто вылетает, с сообщением, что создан журнал ошибок.
|
| Автор: oleg1973 4.11.2004, 22:28 | ||
masm32 v 8.2 все пашет |
| Автор: <Spawn> 23.11.2004, 15:23 |
| Спасибо, с MASM-ом все заработало |