· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ZEN —› сделать копию строки

Посл.отвђт Сообщенiе


Дата: Сен 28, 2003 15:16:27

Hi!

Прошу отнестись с пониманием ;-)

Нужно сделать копию строки.
Как можно в NASMe выделить память под буфер, примерчик, если можно.

Конкретнее - это подпрограмма на асме, которая вызывается из Basic. (RapidQ Basic)
Передаются указатели на строки.
Мне надо создать временный буфер равный (или неравный)
длине строки - параметра.

;--------------------
; PROC NAME : AINSTR
;
; NASM CODE Generated by rqAsmToBin
;on 09-21-2003 at 23:19:46
;
bits 32
;
%define lStart [ebp+08]
%define ptrString [ebp+12]
%define ptrStringSearched [ebp+16]
-----------

Нашел в документации пример

--------------------------------
buffer: db 'hello, world'
times 64-$+buffer db ' '
---------------------------------
Как понять строку "times 64-$+buffer db ' '" ??

$+buffer - длина buffer??


могу я написать что-то типа,
----------------
mov esi, ptrSrcString ; source string
dest_buffer: $+ptrSrcString ; lenght of new buffer
---------------------
или надо вычисять длину строки SrcString
помещать ее допустим в eax и делать типа

buffer: db ' '
times eax

2. Существуют где нибудь готовые String Handling Routines in Nasm?

wbr, Andrew
зы. чайник


Дата: Сен 28, 2003 17:46:38

Самое простое это выделить память в стеке. Еще можно использовать HeapAlloc/HeapFree.
Директива times n просто повторяет следующий за ней фрагмент n раз. В данном случае строка будет дополнена до 64 байт нулями. Это легко понять если посмотреть на нее так: times 64-($-buffer) db 0.


Дата: Сен 29, 2003 21:35:38

1. Что-то не нашел я в документации Nasm'a HeapAlloc/HeapFree.

2. Не понял я все-таки, что такое $. ;-(

$ evaluates to the assembly position at the beginning of the line containing the expression;
Как бы это перевести правильно?
$ определяет позицию блока с начала строки, содержащей выражение.

$$ evaluates to the beginning of the current section; so you can tell how far into the section you are by using ($­$$)

$$ определяет начало текущей секции; так что вы можете сказать, как далеко вы от начала текущей секции, используя
($-$$)

с учетом

message db 'hello, world'
msglen equ $-message

ну и как это получилось, что msglen= ($-message)

wbr, Andrew


Дата: Сен 29, 2003 23:55:12 · Поправил: Fixer

sHell

Что-то не нашел я в документации Nasm'a HeapAlloc/HeapFree.

Читай MSDN

Не понял я все-таки, что такое $. ;-(

$ - это макросредство за место которого линкер поместит адрес по которому находиться инструкция. Так что "jmp $" вечный цикл.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.085