Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Поиск подстроки в строке  (Прочитано 20340 раз)
0 Пользователей и 1 Гость смотрят эту тему.
monrus
Опытный

ru
Offline Offline

« : 29-12-2007 16:00 » 

ДАйте пример поиска подстроки в строке. Типа функции из дельф  pos
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 29-12-2007 16:12 » 

Вот на С++ пример
Код:
int string::IndexOf(const uchar  *x) const
{
   int res=-1;
   if ((x != NULL) && (x[0]  != 0))
   {
      res=0;
      int beg=0;
      int st=0;
      int ret=0;
      while ((x[beg] !=0) && (buffer[res] !=0))
      {
switch (st)
{
    case 0:
       if (buffer[res] != x[beg]) res++;
       else
       {
  st=1;
  ret=res+1;
  beg=1;
       }
       break;
    case 1:
       if (buffer[ret]==x[beg])
       {
  beg++;
  ret++;
       }
       else
       {
  res++;
  st=0;
  beg=0;
       }
       break;
}
      }
      if ((buffer[res]==0) && (x[beg] != 0) ) res=-1;
   }
   return res;
}
« Последнее редактирование: 29-12-2007 16:44 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 29-12-2007 18:34 » 

monrus, да ты вроде с мозгами, а такие вопросы от тебя ставят в тупик
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
monrus
Опытный

ru
Offline Offline

« Ответ #3 : 29-12-2007 18:50 » 

просто я с дельфой знаком - а с амсом так себе Улыбаюсь
ВОт еще вопрос как это на асме выглядит:
(IsWindowVisible(Wnd) = False) or
      (IsWindowVisible(Wnd) = True) and
      (GetWindow(Wnd, gw_Owner) = 0)
т.е. меня интересует как выглядит "or" и "and" на асме. Первый вопрос открыт - есть ли пример на асме?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 29-12-2007 18:53 » 

Никак, ты просто описываеш логику поведения. насколько я помню асм
Код:
  cmp ax, 13
  jz me1
  cmp ax, 14
  jz me2
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
monrus
Опытный

ru
Offline Offline

« Ответ #5 : 29-12-2007 19:07 » 

что-то типа
.IF IsWindowVisible(Wnd) = False &&  GetWindow(Wnd, gw_Owner) = 0
......
.ELSE
...
.END
должно быть
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 29-12-2007 19:12 » 

monrus, не путай язык высокого уровня с ассемблером. В ассемблере совсем другой подход. Чтобы начать на нем программировать, нужно менять логику мышления. Полазий лучше www.wasm.ru. Посмотри код, который там выложен в статьях.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 29-12-2007 19:14 » 

Вот например ׁHello Word на ассемблере http://www.wasm.ru/article.php?article=1022006
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
monrus
Опытный

ru
Offline Offline

« Ответ #8 : 29-12-2007 19:21 » 

вот подумал - вроде работает Улыбаюсь
or - ||
and - &&
Finch, ты мне всегда помогаешь, но я думаю, что не ошибаюсь (забыл сказать что я имею ввиду hutchевский MASM32)
« Последнее редактирование: 29-12-2007 19:25 от monrus » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 29-12-2007 20:42 » 

Там могут быть макросы, которые это дело как-то интерпретируют. Например команда invoke тоже макрос, который разворачивается в конце концов в код:
Код:
push ax
push ....
..........
call SomeFunction

Вот небольшая илюстрация
Тут http://www.wasm.ru/article.php?article=1022006
Код:
;задержка, чтобы полюбоваться ;(5)
  push 2000d
  call Sleep

  ;выход                       ;(6)
  push 0
  call ExitProcess
Тоже самое http://www.wasm.ru/article.php?article=1022007
Код:
 ;задержка, чтобы полюбоваться
   invoke Sleep, 2000d

   ;выход
   invoke ExitProcess,0

Кстати
Цитата
or - ||
and - &&
Это не одно и тоже. Например для двойного И в С. Это значит, что если первое условие будет false то не будут производится следуюшие проверки. Сразу произойдет выход из проверок. Если будет в условии стоять одинарное & то, будут произведены все проверки, вне зависимости от ранее уже полученного результата.
« Последнее редактирование: 29-12-2007 20:53 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
monrus
Опытный

ru
Offline Offline

« Ответ #10 : 30-12-2007 18:46 » 

на самом деле это работает - если ставить один &, то асм выдает ошибку. я такое выражение подебагил и в дельфе и на асмовской проге - разницы в операндах нет. Ага
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines