|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 13, 2004 20:20:47 Приветствую всех, кто заглянул сюда, чтобы посмотреть на мой novice'совский вопрос. Я только начал изучать ассемблер и решил попробовать уменьшить размер первой программы Iczelion'а. То есть объявить .data? MsgBoxCaption db ? MsgBoxText db ? А проинициализировать их позже. Как это можно сделать? Максимум, что я пока придумал это: mov dword ptr [MsgBoxCaption],"<4 символа строки в обратном порядке>" Думаю, подобных вопросов у меня будет еще много :) |
|
|
Дата: Июл 13, 2004 20:36:03 А откуда твои строки потом появятся в программе? Вобще-то под строку можно зарезервировать буфер .DATA? sBuffer db 260 dup (?) |
|
|
Дата: Июл 13, 2004 20:47:32 Понятно, как бы я ни пытался получить осмысленную строку, размер уменьшить нельзя. Такой mov это тоже самое, что и объявление db, ведь размер символов байт... еще сложнее выходит. А вот еще вопрос, почему не sBuffer db 260 (?),0 И можно ли получить этот завершающий ноль потом? |
|
|
Дата: Июл 13, 2004 21:15:03 · Поправил: Asterix Лучше читай внимательно статьи на сайте а также форум, офлайн версии которых можно найти на сайте в разделе "Документация" ;-) .DATA? sBuffer db 260 dup (?) ; <- это если нужно чтоб буфер имелся в памяти но в файле на диске его не было. .DATA sBuffer db 260 dup (0) ; <- в этом случае буфер будет присутствовать и в файле и в памяти, и будет проинициализирован 0(нулями) |
|
|
Дата: Июл 13, 2004 21:23:40 Читаю потихоньку. .DATA? sBuffer db 260 dup (?) ; <- это если нужно чтоб буфер имелся в памяти но в файле на диске его не было. .DATA sBuffer db 260 dup (0) ; <- в этом случае буфер будет присутствовать и в файле и в памяти, и будет проинициализирован 0(нулями) Это я знаю. Но мне казалось, что "000" и "00",0 это разные вещи, вот и спросил. Имея ввиду можно ли добавить этот завершающий 0 по ходу выполнения. Ладно, пойду дальше мучить. :) |
|
|
Дата: Июл 13, 2004 22:57:32 DarkAnt Конечно можно, функции работы со строками (lstrcat, lstrcpy, lstrcpyn) автоматически дописывают ноль в конце строки. А пооптимизировать Iczelion'а можно. Например, перенести эти строки в секцию .const (ведь всё равно изменять их не нужно) |
|
|
Дата: Июл 13, 2004 23:35:44 DarkAnt > Это я знаю. Но мне казалось, что "000" и "00",0 Разные конечно! "000" - это db 30h,30h,30h "00",0 - это db 30h,30h,00h в случае sBuffer db 260 dup (0) имеем sBuffer db 00h,00h,...00h,00h (всего 260 нулевых байт ;-) А нолик в конце строки в буфере действительно прописывают многие виндовые API работающие со строками, можно также его прописать и самому, смотри многочисленные примеры на этом форуме. |
|
|
Дата: Июл 14, 2004 03:44:55 > А проинициализировать их позже. Как это можно сделать? самое короткое PUSH reg/PUSH "xxxx"/PUSH ESP где reg что-то равное нулю... |
|
|
Дата: Июл 14, 2004 09:37:26 Всем спасибо. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073 |