Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Локальные переменные 
:(
    Опции темы
<Spawn>
Дата 27.10.2004, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Есть проблемка в передаче локальной адреса локально переменной функции GetWindowRect(Использую TASM). Самого кода щас нет, но вот примерное его формирование:

Код

SOMEPROC PROC
LOCAL REC: RECT
...
PUSH OFFSET REC
...
CALL GetWindowRect
...

SOMEPROC ENDP


Если переменную меняю на глобальную, то все ок. В чем может быть дело?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
p0s0l
Дата 27.10.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Попробуй так:
lea eax, [REC]
push eax

т.к. локальные переменные находятся в стеке, и offset REC даст скорее всего смещение относительно esp... Не знаю точно...
Вместо lea eax, [REC] скомпилится что-нибудь тиа: lea eax, [esp + $10] к примеру, и тогда можешь уже передавать этот адрсе GetWindowRect




--------------------
С уважением, г-н Посол.
PM   Вверх
Akina
Дата 27.10.2004, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



p0s0l прав. Просто вызывать локальную переменную надо из сегмента стека:

override SS = DB 36h

или использовать FAR-указатели:

push SS
push OFFSET REC



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
<Spawn>
Дата 28.10.2004, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Спасибо, попробую при первой возможности.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 30.10.2004, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



После 30 минут сборки\проверки\краха проги, сократил процедурину до:

Код
SOMEPROC PROC
 LOCAL REC: RECT

 RET
SOMEPROC ENDP


Даже при таком раскладе генерица ошибка вызова фукции. Как коментирую LOCAL все работает. Наверное ето простой вопрос, но все же в чем дело?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
oleg1973
Дата 30.10.2004, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



с тасмом не дружу сильно :(
на Fasm будет так
Код

proc SomeProc,var1,var2
enter
mov eax,[var1]
return
endp

и все
переменные /параметры фунуции через стек идут
при компиляции получим
push ebp
mov ebp,esp
mov eax,[ebp+4]

не знаю поможет ли тебе это


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 4.11.2004, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



oleg1973Спасибо, но проблемы пока не решилась. Уже не занаю что делать. Заметил еще одну особенность: Если в функцию не передавать параметров, то объявление локальных переменных не вызывает ошибки:

Код

SomeProc proc
 local w: dw
 ..
 ret
SomeProc endp


При передаче параметров в функцию программа просто вылетает, с сообщением, что создан журнал ошибок.

Код

push <что то кладем в стек>
call SomeProc

SomeProc proc
 local w: dw
 ..
 ret 4
SomeProc endp


Это сообщение отредактировал(а) <Spawn> - 4.11.2004, 19:08


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
oleg1973
Дата 4.11.2004, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



Код

386
.model flat, stdcall

someshit PROTO   :DWORD,:DWORD

.code
start:
   push 0
       push 0
   call someshit
     ret
     
someshit proc var:dword,var1:dword
Local fuck:dword

       mov eax,var
       mov eax,fuck

       ret
someshit endp

end start



masm32 v 8.2
все пашет


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 23.11.2004, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Спасибо, с MASM-ом все заработало


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.