Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Длина строки 
:(
    Опции темы
a.S.d
Дата 25.3.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.2.2005

Репутация: нет
Всего: 2



Имеется переменная:
string db 'Some string'
Как найти длину этой строки?

PM MAIL   Вверх
Chingachguk
Дата 25.3.2005, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Ну а ты сам можешь ответить - чему равна длина этой строки ?

Вот в языке СИ концом строки считается нулевой байт, в языке Паскаль длина строки содержится в нулевом байте этой строки...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
a.S.d
Дата 26.3.2005, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.2.2005

Репутация: нет
Всего: 2



Если ты имеешь ввиду просто посчитать символы, то это не годится, переменная во время выполнения программы меняется.
Я так понял мне нужно считать содержимое нулевого байта. Как это сделать?
PM MAIL   Вверх
Chingachguk
Дата 26.3.2005, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Ты можешь подробнее написать, какую ты задачу решаешь ?

Если это, скажем, буфер ввода с клавиатуры, то функция ввода должна как-то определить, сколько на самом деле в этой строке символов. Например, после последнего символа вставить нулевой байт (СИ) или сделать первый байт длиной строки как в Паскале:

Код

MAX_STR_LEN equ 64

string_len db ?
string db MAX_STR_LEN dup (?)

...

; Функция ввода строки с клавиатуры
Input_String proc

  mov di,offset string
  mov byte ptr string_len,0 ; Вначале равна нулю длина

@@Input:

; readkey (~getchar())
  xor ax,ax
  int 16h
; Введен ENTER (конец ввода)
  cmp al,ENTER_KEY
  jz  @@InputDone
; Нет, это просто символ - кладем его в буфер
  mov byte ptr [di],al
  inc di
; На следующий символ - не обрабатывается BACKSPACE и другие
; управляющие клавиши
  jmp  @@Input

@@InputDone:



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
oleg1973
Дата 26.3.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



a.S.d
если это под виндовс пишется то там все получениые строки по умолчанию заканчиваются 0, а еах возвращает ее длинну
к примеру
Код

invoke GetTempPath,1024,buff


buff times 1024 db ?

данный пример получит в buff темп директорию винды и в еах возвратит ее длинну


если же нада посчитать длинну некой строки заканчивающейся 0
то можно использовать
Код

invoke lstrlen,buff


buff db 'some string',0


lstrlen возвратит в еах длинну строки


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Coder
Дата 7.4.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



попробуй так
Код

string db 'Some string'
len dd ($-string)

т.е. разность между текущим адресом и адресом переменной string.
будет работать если string не будет меняться.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.