Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передать адрес, из регистра 
:(
    Опции темы
I_Am_Rock
Дата 22.9.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

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



Привет. Я новичок. 

Такой вопрос
В этом куске кода (MASM если что) адрес значения Text1 ("Putin") передается в eax. Увеличиваем его на единицу.

Код

mov        eax, offset Text1
inc          eax


Хочу передать адрес в Text1 (чтобы стало "utin").
Пробую так...

Код

mov        offset Text1, eax


...не получается.

Как надо сделать? Гуглил, но ничего не нашел.(((

Это сообщение отредактировал(а) I_Am_Rock - 22.9.2009, 15:45
PM MAIL WWW   Вверх
Goodwin98
Дата 22.9.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 1.7.2009
Где: Deeptown

Репутация: 4
Всего: 5



Код

mov eax,[eax]
mov [text1],eax
mov [tex1+4],0


Это сообщение отредактировал(а) Goodwin98 - 22.9.2009, 16:03
PM MAIL ICQ   Вверх
I_Am_Rock
Дата 22.9.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

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



Это MASM? У меня не работает, пишет - invalid instruction operands
 smile

Добавлено @ 16:18
Цитата(Goodwin98 @ 22.9.2009,  16:01)
Код

mov eax,[eax]
mov [text1],eax
mov [tex1+4],0

В 1 строчке - зачем мне помещать в eax что-то? Там что нужно уже стоит. Именно то, что там стоит нужно сделать адресом Text1
Ругается на вторую строчку.
Я попробовал использовать только 3-ю, пишет - "Puti", а мне нужно чтобы не было первого символа - "utin".
Но вообще смысл в том, что я хочу понять как произвести обратную операцию от mov    eax, offset Text1

Это сообщение отредактировал(а) I_Am_Rock - 22.9.2009, 16:40
PM MAIL WWW   Вверх
Goodwin98
Дата 22.9.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 1.7.2009
Где: Deeptown

Репутация: 4
Всего: 5



Код

mov eax, offset text1
inc eax
mov eax,[eax]
mov dword ptr [text1],eax
mov [text1+4],0

Во-первых следует помнить, что text1 - это метка, которой соответствует какой-то аддрес( процедуры, строки, переменной и т.п). Когда компилятор встречает offset text1, он подставляет вместо него аддрес строки. Естественно, что при выполнении программы уже никаких меток нету.
Поэтому в вашем случае можно либо перенести строчку( что я и сделал), либо использовать указатель на нее.
Код


mov eax, [ptext]
inc eax
mov [ptext],eax

invoke MessageBox,0,ptext,0,MB_OK

ptext dd offset text1
text1 db "Medved",0


Это сообщение отредактировал(а) Goodwin98 - 22.9.2009, 18:49
PM MAIL ICQ   Вверх
I_Am_Rock
Дата 22.9.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

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



Ничего не получается! (((

Вообще я пробую на другом примере, а с Putin привел для наглядности.

Я пробую вот на каком примере. Там есть кнопка. При нажатии на нее берется строка из ТекстБокса, потом делается то, что я как раз хочу сделать ("убрать" первый символ), потом все буквы строки делаются большими и выводятся в Лейбл.

Всё получается, только вот никак не убирается первый символ. ((( Причем я хочу сделать именно так - поместив адрес в регистр и т.д. Я хочу понять сам принцип.

См. код примера в файле. Он небольшой, и место для изменений я выделил комментариями с восклицательными знаками.
Код

; !!!!!!!!!!!!!!!!!!!!!!!!!!


Помогите, пожалуйста. Уже мозг кипит.  smile 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  izmt.rar 1,55 Kb
PM MAIL WWW   Вверх
Goodwin98
Дата 22.9.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 1.7.2009
Где: Deeptown

Репутация: 4
Всего: 5



Эх. Вы не можете  изменить по ходу программы аддрес text1. Он постоянный.
Для вашей программы проще всего сделать так.
Код

Knopka proc hWnd:HWND
invoke      GetWindowText, hwndEdit1, addr TextEdit1, 30
; !!!!!!!!!!!!!!!!!!!!!!!!!!
mov                 eax, offset TextEdit1
inc                 eax
; !!!!!!!!!!!!!!!!!!!!!!!!!!
invoke      CharUpper, addr TextEdit1+1
invoke      SetWindowText, hwndLabel1, addr TextEdit1+1
ret
Knopka endp

Но т.к. вам нужн через eax, то тогда так.
Код

Knopka proc hWnd:HWND
invoke      GetWindowText, hwndEdit1, addr TextEdit1, 30
; !!!!!!!!!!!!!!!!!!!!!!!!!!
mov                 eax, offset TextEdit1
inc                 eax
; !!!!!!!!!!!!!!!!!!!!!!!!!!
invoke      CharUpper, eax
invoke      SetWindowText, hwndLabel1, eax
ret
Knopka endp

Или так.
Код

.data
pText dd offset TextEdit1
.........
Knopka proc hWnd:HWND
invoke      GetWindowText, hwndEdit1, pText, 30
; !!!!!!!!!!!!!!!!!!!!!!!!!!
mov                 eax, [pText]
inc                 eax
mov                 [pText],eax 
; !!!!!!!!!!!!!!!!!!!!!!!!!!
invoke      CharUpper, pText
invoke      SetWindowText, hwndLabel1, pText
ret

Knopka endp


Это сообщение отредактировал(а) Goodwin98 - 22.9.2009, 21:32
PM MAIL ICQ   Вверх
piritus
Дата 22.9.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 3.1.2007
Где: Сибирь

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



Как вариант:
Код

; !!!!!!!!!!!!!!!!!!!!!!!!!!
mov eax,offset TextEdit1
inc eax
invoke lstrcpy,addr TextEdit1,eax
; !!!!!!!!!!!!!!!!!!!!!!!!!!

--------------------
PM MAIL ICQ   Вверх
I_Am_Rock
Дата 22.9.2009, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

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



Попробовал последний - работает. Спасибо. smile


Цитата(Goodwin98 @  22.9.2009,  21:22 Найти цитируемый пост)
Эх. Вы не можете  изменить по ходу программы аддрес text1. Он постоянный.

А, ясно...
Т.е. адрес переменных изменить нельзя - я правильно понял?
Но почему тогда можно изменить адрес pText? Только потому, что он еще в data прописан как offset?

Добавлено @ 21:55
Цитата(piritus @  22.9.2009,  21:41 Найти цитируемый пост)
Как вариант:

Тоже удобный вариант. Благодарю smile

Вы не можете  изменить по ходу программы аддрес text1. Он постоянный.
Получается можно? Судя из кода piritus  

Это сообщение отредактировал(а) I_Am_Rock - 22.9.2009, 21:58
PM MAIL WWW   Вверх
Goodwin98
Дата 22.9.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 1.7.2009
Где: Deeptown

Репутация: 4
Всего: 5



Цитата

Т.е. адрес переменных изменить нельзя - я правильно понял?

Аддрес - нет, только их содержание.
Цитата

Но почему тогда можно изменить адрес pText?

Тут не меняемтся ее аддрес, а только содержание 
pText - это просто переменая, как напр hwndLabel1, в которой сначала находится аддрес text1, а потои мы его меняем.
Советую посмотреть на программу из-под отладчика для лучшего понимания.
Цитата

Получается можно? Судя из кода piritus  

В этом коде копируется строчка на др место.

Это сообщение отредактировал(а) Goodwin98 - 22.9.2009, 22:02
PM MAIL ICQ   Вверх
I_Am_Rock
Дата 22.9.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

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



Цитата(Goodwin98 @  22.9.2009,  21:55 Найти цитируемый пост)
Аддрес - нет, только их содержание.pText - это просто переменая, как напр hwndLabel1, в которой сначала находится аддрес text1, а потои мы его меняем.Советую посмотреть на программу из-под отладчика для лучшего понимания.

А как же код piritus? Там же хоть и через API, но ведь меняется именно адрес переменной. И потом в дальнейшем коде можно применять
Код

invoke      SetWindowText, hwndLabel1, addr TextEdit1

И слово выводится уже со второй буквы.

Еще раз спасибо.  smile  Плюсанул Вам репутацию. Завтра посмотрю все примеры в отладчике.  smile 

Это сообщение отредактировал(а) I_Am_Rock - 22.9.2009, 22:03
PM MAIL WWW   Вверх
I_Am_Rock
Дата 22.9.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

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



Цитата(I_Am_Rock @  22.9.2009,  22:01 Найти цитируемый пост)
А как же код piritus? Там же хоть и через API, но ведь меняется именно адрес переменной. И потом в дальнейшем коде можно применять

Вопрос снят!  smile  Посмотрел в отладчике и понял, что адрес-то не меняется просто по тому адресу - новые данные.

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

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

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


 




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


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

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