· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Инициализация строки

Посл.отвђт Сообщен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