|
|
|
Сisa |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
Если в section '.data' поменять местами строки определения переменных, происходит нечто невероятное! Например строку: resulta db '',0 закомментировать/раскомментировать на разных строках и получим в ответе только единственный правильный ответ, т.е. когда она записана на последнем месте, а если например первой, то полный абсурд в ответе. Непонятно. У меня значит случайно получилось вышел правильный ответ, но в другом порядке записать и ответа никогда не получить желаемого. Странно. Это где то описано? Самый разноцветный ряд получаю при такой записи:
В других языках аналога попросту нету. (где порядок записи-определения переменных влияет на их значение и на результат всей программы) А почему так? |
||||
|
|||||
tzirechnoy |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
А Вы не задумывались, почему result так странно описан -- result db 256 dup ... ?
|
|||
|
||||
Сisa |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
result db 256 dup (?)
может быть означает дублировать данные в скобках 256 раз? Данные в круглых скобках являются "неинициализированными данными", то есть, выделяется память 256 байт... и этот кусок памяти привязывается к "имени" result (ну или наоборот имя привязывается к адресу начала куска памяти в которой зарезервировано 256 байт которые не заполнены никакими данными). Если бы я умел, так файл в ollydbg посмотрел бы, что там такое и в чем проблема, а так надеюсь только на Вашу помощь. Может быть следующие данные "наезжают" на result, поскольку нет завершения строки в виде 0 ? |
|||
|
||||
Сisa |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
так тоже работает, но опять же, если поменять местами строки, то ответ будет сногсшибательный. |
|||
|
||||
Сisa |
|
||||||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
Ученик может задать стоОООлько вопросов, что учителю надоест :((
Но у меня и второй вопрос возник И по этой же теме, и не только:
Так как сейчас записан код - не работает, если поменять местами (закомментировать/раскомментировать ) строки:
то код работает, но опять не так как ожидается, т.е. MessageBox появляется только один раз! Как будто пара строк закомментирована invoke wsprintfA, result, formats, [r3], [r2], [r1], [r4], [r5], [r6], [r7] invoke MessageBox, 0, result, 'Дата', MB_OK и не важно в каком месте. Ну и наконец такой вариант, на первый взгляд правильный:
вообще не работает. Где то же об этом написано? Или это чисто FASMа заморочки? Может в masm или tasm их нет? Закрадываются сомнения тот ли это язык, что лучше не бывает. С ассемблером не соскучишься |
||||||
|
|||||||
tzirechnoy |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Правильно. Ну, в смысле, адэкватная модэль происходящего. А сколько байт Вы выделили под переменную resulta? |
|||
|
||||
tzirechnoy |
|
||||||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
В смысле?
А, ну да, я забыл -- wsprintf у нас ведь _cdecl, а не stdcall calling convention. В общем, у тебя бардак в стэке -- за wsprintf надо подчищать самому.
По-моему, он работает как написано. Вызывает GetLocalTime и прекращает работу.
В masm и tasm много чего нет. Впрочем, действительно, для начального обучения в fasm слишком много макросов, скрывающих истинную работу.
Я и после первого Вашэго поста думал написать -- а зачем Вы подались на эти галеры?? Серьёзных проектов на ассэмблере под win32 никто не пишэт, это муторное и мало осмысленное занятие. Да и под другие ОС общего назначения (linux, MacOS) -- тожэ. Потому поддержки -- мало. В общем, возможно имеет смысл всё-таки начать изучать ассэмблер где-нибудь, где много нормальных примеров -- на всяком ARM bare metal или в бутлоадерах PC. |
||||||||||
|
|||||||||||
Сisa |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
resulta db '',0 - это сейчас, а перед этим было так:
resulta db "abcd", 0 а потому как мне нужно называть файл этим именем +.jpg или +.png то и начальное значение такое "" (для скриншот-еля). -- О галерах в личку написал. Это сообщение отредактировал(а) Сisa - 3.3.2015, 18:15 |
|||
|
||||
tzirechnoy |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Так вопрос остаётся в силе, процытирую "А сколько байт Вы выделили под переменную resulta?" Добавлено через 4 минуты и 16 секунд
"написание писем в эху есть самовыражение, написание писем нетмейлом есть техническая поддержка." © Victor Wagner Не настолько интересно, чтобы обсуждать это в личной почте. |
||||
|
|||||
Сisa |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
"Первое бесплатно, второе платно." - Вас правильно понял?
Темы "от перемены мест" личка не касается. "Я и после первого Вашэго поста думал написать -- а зачем Вы подались на эти галеры??" - значит показалось, мне, что Вам интересно, ответил, я, не на форуме, но в письме, и не о перемене мест совсем, оказывается напрасно излагал, бывает Сколько байт выделил под переменную resulta? - так ведь же ноль? байт? Наверно можно было записать "2015 " и потом приклеивать конкатенацией остальной текст. Добавлено через 8 минут и 36 секунд Странно как то, я ничего не понимаю, Вы мне помогаете, факт, но как то своеобразно, то ли ругаетесь, то ли обижаетесь на что, а не понятно потому что не знаю модераторам что то платят, или они все же по "велению души" на форумах живут. Если из живого интереса, то почему бы и не прочесть почту, десяток строк всего то, к тому же спровоцированных к написанию, ну а если это работа, тогда конечно... но тогда почему работа не полностью выполняется. А!!! понял! наконец то! написано для выравнивания баланса! Баланса отношений. |
|||
|
||||
tzirechnoy |
|
||||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Я спецыально опустил это окончание. Мне просто неинтересно объяснять это одному Вам. Объяснять каждому, кто каким-то путями поиска наткнётся на этот заданный вопрос, или просто иногда почитывает тему ASM на Винграде -- другое дело.
Ну, как жэ 0 -- когда там как минимум значение (число 0) должно поместиться? А в т.н. "первоначальном" варианте -- ещё строка 'abcd'? Впрочем, это не очень существенно. Ноль там, один или пять -- в любом случае, это несколько меньшэ, чем байт в строке ',03.02.2015 13:10:' и т.д.
Я не люблю класть разжёванное, когда результат можно получить инжэнерными методами. С одной стороны -- понятно, что Вы не знаете, как подступиться к ассэмблеру, и с этим надо что-то делать, с другой -- простое написание правильного кода за Вас не даст Вам вообще ничего. Приходится как-то балансировать, задавать наводящие вопросы и выдавать половинчатые ответы, из которых ответ можно получить каким-то усилием мысли.
Я не модэратор, а по сути это тема для какого-нибудь другого подраздела. И нет, если Вам показалось, что я на что-то обиделся -- то Вам именно показалось. Это была констатацыя некоторых известных в нашых кругах фактов. |
||||||||
|
|||||||||
Сisa |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
Наверное Вы правы, и я ценю Ваш спокойный ответ.
Но это очевидно, что направить Вам письмо было неосторожностью с моей стороны. Справедливости ради надо отметить, что Вы меня очень удивили, и похоже мы совершенно разные люди Ноль там, один или пять -- в любом случае, это несколько меньшэ, чем байт в строке ',03.02.2015 13:10:' - вот, я кажется начинаю догадываться что Вы хотите сказать, что новым байтам негде разместиться в том поле (участке памяти), что отведено под переменную, и что такой подход возможен в других ЯП, но не в АСМе. Т.е. мне следовало бы отвести под данную переменную участок достаточной длины, например "111111111111111111111111111" потом все байты по этому адресу удалить/стереть и записать то что мне нужно, а именно "02.03.2015 13:10:22,457.jpg". |
|||
|
||||
tzirechnoy |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Да. И это особенность дажэ не ассэмблера -- а функцыи wsprintf. В передаваемой out-строке должно быть достаточно места для сохранения результата. Соответственно, кстати, это справделиво для любого языка, в котором Вы будете использовать wsprintf. Хоть для vb (такая возможность там есть, если что, строки 2 на Declare function ... Lib "user32" ... и описание прототипа -- и пользуйся).
Ненужно. В первую очередь потому, что все нужные байты wsprintf перезапишэт, и признак окончания C-строки ( байт 0 ) в конец запишэт. Да, по поводу того, почему работало, когда ты писал в конец: система, по факту. выделяет память процэссу страницами достаточно большого объёма (4k или 8k на ia32). Потому для твоего сегмента данных было выделено достаточно места, чтобы этот resulta поместился в вроде как неиспользуемый хвост страницы -- после описанных данных. |
||||
|
|||||
Сisa |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
tzirechnoy +++!
Спасибо! Вы отодвинули мои сомнения, буду дальше читать ассэмблер (даже не дальше, а сначала) |
|||
|
||||
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |