![]() |
|
![]() ![]() ![]() |
|
Farmazon |
|
||||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: нет Всего: 5 |
Вот Эта функция для переаода числа в строку, которую я сваял, при вызове, срабатывает, а потом почему-то прога вылетает... Чё тока ниделал... Не знаю почему лаги такие....
хотя если её переделать в макрокоманду - то всё пашет....
Странно не правда ли? Я в принципе магу и 2 вариант до ума довести и заюзать... Но мне чиста интересна - ПАЧЕМУ НЕ РАБОТЕТ?! Это сообщение отредактировал(а) Farmazon - 27.10.2006, 18:44 -------------------- Таково моё общее мнение. |
||||
|
|||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: нет Всего: 5 |
А уже разобрался так...
Пути мокрософты не исповедимы... Я вызывал ету функцию в событии прорисовки окна = глюк. Запихал в другое место = всё норм! ![]() -------------------- Таково моё общее мнение. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
все регистры, кроме eax, edx, ecx сохранять надо и после использования восстанавливать. в данном случае, судя по описанию, проблема как-раз в несохранении ebx.
|
|||
|
||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: нет Всего: 5 |
Не из-за этого... я добавлял "push ebx / pop ebx"... только толку шиш... Если функция используется в событии прорисовки окна - всё равно прога вылетает... А если в другом месте - всё норм.
-------------------- Таково моё общее мнение. |
|||
|
||||
sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 7 Всего: 10 |
Сохранять все регистры в начале каждой функции командой
pushad восстанавливать все регистры перед ret командой popad !!! -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
если это рисовалка, то в eax вроде как надо что-то осмысленное записать. типо 0.
![]() |
|||
|
||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: нет Всего: 5 |
Быть может и из-за eax... Хотя врядли когда етот же код напрямую сттавил (Макрокомандой) всё работало...
Это сообщение отредактировал(а) Farmazon - 28.10.2006, 11:03 -------------------- Таково моё общее мнение. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
пригляделся. есть сурьезные основания считать, что причиной является маленький размер TmpStr: в варианте макроса он у тебя сидит в сегменте данных(с выравниваниями - т.е. либо вообще не задевает никого при переполнении, либо задевает, но то, что проявится потом), а в варианте процедуры - в стеке, который и рушится от переполнения TmpStr.
надо закладываться на максимальное кол-во цифр в числе. 11 - минимум, учитывая 0 в конце строки. |
|||
|
||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: нет Всего: 5 |
Нет..... У меня и на 2-значном числе вылетает.... Мне в моём случае и 5 хватит. Максимальное значение числа - 60000...
А 0 в конце TempStr мне зачем? У мня в неё записываются (остатки от деления на 10) + 48, потом символы в обратном порядке записываются по нужному адресу... Еслиб мне нужна была строка PChar, то просто перед ret поставил бы "mov byte [edx], 0"... Мне просто не PChar нужна... Мне нужно просто перевести число в текстовое представление, и узнать, какой оно длины в текстовом виде. Да я говорю что видимых ошибок нет - я всё перепробовал! Когда я использую эту функцию не в событии прорисовки окна, то прога не вылетает! Вот сейчас засунул ея в таймер - нет проблем... ЗЫ: Ай, вобщем фиг сним, проблема решена... Задерживаться на этой фигне и время терять не буду... Счас работает - и ладно... Спасибо конечно что пытались помочь... Тему можно закрыть. -------------------- Таково моё общее мнение. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |