<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=2694749</guid>
        <pubDate>Sat, 11 Sep 2010 19:16:22 +0000</pubDate>
        <title>Поиск строки с использование SCAS</title>
        <link>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=2694749</link>
        <description><![CDATA[AndNot: Не, не поможет. Сорсы, судя по всему, под фасм. В нем же нет директив типа процессора и набор инструкций под конкретный процессор программист обязан контролировать сам.<br>Но проблема не в этом. Судя по контексту ENTER является каким то макросом (иначе где обязательные два параметра?), в паре с RETURN. И либо это макросы из набора древнего фасма, либо автор просто забыл их выложить.]]></description>
        <author>AndNot</author>
        <category>Assembler FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=2694193</guid>
        <pubDate>Fri, 10 Sep 2010 17:54:14 +0000</pubDate>
        <title>Поиск строки с использование SCAS</title>
        <link>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=2694193</link>
        <description><![CDATA[Qraizer: Гм. Так никто и не отозвался, что ль?<br>
<strong class='tag-b'>semiono</strong>, попробуй добавить директиву типа процессора в начало. Например .386, ибо код 32-битный. Инструкции ENTER, как и LEAVE, не было в исходном наборе 8086/88. Видимо код из примера рассчитан на компилятор, который изначально предусматривает компиляцию под 386 или позднее.<br>
Впрочем, у ENTER два параметра. Хм. Мож это не инструкция, а макрос?]]></description>
        <author>Qraizer</author>
        <category>Assembler FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=2684152</guid>
        <pubDate>Tue, 31 Aug 2010 16:34:28 +0000</pubDate>
        <title>Поиск строки с использование SCAS</title>
        <link>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=2684152</link>
        <description><![CDATA[semiono: Fasmw 1.69.14<br>
Error: Invalid operand<br>
Istruction: enter<br>
Source: search.inc [3]<br>
--<br>
там и метка <strong class='tag-b'>Err</strong> недопустимая, впрочем я ламер, может что я не понял.]]></description>
        <author>semiono</author>
        <category>Assembler FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=1190627</guid>
        <pubDate>Tue, 25 Jul 2006 07:44:42 +0000</pubDate>
        <title>Поиск строки с использование SCAS</title>
        <link>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=1190627</link>
        <description><![CDATA[ProgramMan: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Я извиняюсь, но первый пример (&quot;ПОИСК ДВОЙНОГО СЛОВА...&quot;) несостоятелен.</div></div><br>
Всё правельно посик ДВОЙНОГО СЛОВА в строке из  ДВОЙНЫХ СЛОВ.]]></description>
        <author>ProgramMan</author>
        <category>Assembler FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=1186002</guid>
        <pubDate>Fri, 21 Jul 2006 04:32:24 +0000</pubDate>
        <title>Поиск строки с использование SCAS</title>
        <link>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=1186002</link>
        <description><![CDATA[AVA12: Я извиняюсь, но первый пример (&quot;ПОИСК ДВОЙНОГО СЛОВА...&quot;) несостоятелен.<br><br>Строковые команды с суффиксом D (например, SCASD) изменяют значения индексных регистров на 4, а не на 1. Так что в данном примере подстрока найдется только в том случае, если ее позиция в строке кратна 4. В данном случае позиция подстроки - 12, так что она найдется на четвертом шаге. Но если, например, убрать из строки слово &quot;всем&quot; с пробелом, то ничего не выйдет.]]></description>
        <author>AVA12</author>
        <category>Assembler FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=1173201</guid>
        <pubDate>Tue, 11 Jul 2006 15:52:21 +0000</pubDate>
        <title>Поиск строки с использование SCAS</title>
        <link>https://forum.sources.ru/index.php?showtopic=148078&amp;view=findpost&amp;p=1173201</link>
        <description><![CDATA[ProgramMan:  <br>
<div class='tag-align-center'><span class='tag-size' data-value='13' style='font-size:13pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>Поиск строки и подстроки с использование команды SCAS</strong></span></span></div> <br>
EDI- адрес области памяти, в которой совершается поиск        <br>
AL(AX)(EAX)-искомый байт(слово)(двойное слово) <br>
ECX – при использовании префиксов ret/rep, количество байт(слов)(двойных слов) с которыми будет выполнятся<br>
REPNZ SCASB(SCASW)(SCASD) <br>
JNZ NOFOUND в случае если данные не найдены переходим на метку<br>
<br>
Теперь несколько примеров использования (компилятор FASM):<br>
<div class='tag-align-center'><span class='tag-size' data-value='11' style='font-size:11pt;'><span class="tag-color tag-color-named" data-value="green" style="color: green"><strong class='tag-b'><br>
ПОИСК ДВОЙНОГО СЛОВА В СТРОКЕ <br>
ДО ПЕРВОГО СОВПАДЕНИЯ<br>
</strong></span></span></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">include &#39;win32ax.inc&#39;</div><div class="code_line">.data</div><div class="code_line">dat_str db &#39;Привет всем людям этой планеты!!!&#39;,0</div><div class="code_line">ADR dd dat_str</div><div class="code_line">.code</div><div class="code_line">&nbsp;&nbsp;start:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cld ; сбросим флаг направления, направление поиска от младших адресов к старшим</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov edi,[ADR]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;lstrlen,dat_str</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov ecx,eax ; длина строки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov eax,&#39;людя&#39;; элемент</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;repnz scasd</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz Err</div><div class="code_line">; если нашли подстроку, то</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;mov dword[edi-4],&#39;ЛЮДЯ&#39; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;invoke &nbsp;MessageBox,HWND_DESKTOP,&quot;Найден&quot;,&quot;&quot;,MB_OK</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;invoke &nbsp;MessageBox,HWND_DESKTOP,dat_str,&quot;&quot;,MB_OK</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;jmp Ext</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; Err:</div><div class="code_line">&nbsp;&nbsp; invoke &nbsp;MessageBox,HWND_DESKTOP,&quot;Не найден&quot;,&quot;&quot;,MB_OK</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; Ext:</div><div class="code_line">&nbsp;&nbsp; invoke &nbsp;ExitProcess,0</div><div class="code_line">.end start</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<div class='tag-align-center'><span class='tag-size' data-value='11' style='font-size:11pt;'><span class="tag-color tag-color-named" data-value="green" style="color: green"><strong class='tag-b'>ПОИСК ВСЕХ БАЙТОВ В СТРОКЕ<br>
</strong></span></span></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">include &#39;win32ax.inc&#39;</div><div class="code_line">.data</div><div class="code_line">dat_str db &#39;карл у клары украл коралы &#39;,0</div><div class="code_line">ADR dd dat_str</div><div class="code_line">.code</div><div class="code_line">&nbsp;&nbsp;start:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cld</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov edi,[ADR]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;lstrlen,[ADR]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov ecx,eax ; длина строки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov eax,&#39;а&#39;; элемент</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;NXT:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;repnz scasb</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz EN</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov byte[edi-1],&#39;А&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp ecx,0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne NXT</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;EN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;MessageBox,HWND_DESKTOP,dat_str,&quot;&quot;,MB_OK</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;ExitProcess,0</div><div class="code_line">.end start</div></ol></div></div></div></div><br>
<div class='tag-align-center'><span class='tag-size' data-value='11' style='font-size:11pt;'><span class="tag-color tag-color-named" data-value="green" style="color: green"><strong class='tag-b'>ПРОЦЕДУРА ПОИСКА СТРОКИ<br>
</strong></span></span></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">proc search,_baseadr,_stradr,_basel,_strl</div><div class="code_line">pushad</div><div class="code_line">cld</div><div class="code_line">push [_strl]</div><div class="code_line">push [_stradr]</div><div class="code_line">call UpCases</div><div class="code_line">mov edi,[_baseadr] &nbsp; &nbsp; &nbsp;; адрес базовой строки</div><div class="code_line">.NXTSE:</div><div class="code_line">mov esi,[_stradr] &nbsp; &nbsp; &nbsp; ; адрес искомой строки</div><div class="code_line">mov ecx,[_basel]</div><div class="code_line">mov al,byte[esi]; элемент</div><div class="code_line">repnz scasb</div><div class="code_line">jnz .SEARTH_ERROR</div><div class="code_line">dec edi</div><div class="code_line">mov esi,[_stradr]</div><div class="code_line">mov ecx,[_strl] &nbsp; &nbsp; &nbsp; &nbsp; ; длина строки</div><div class="code_line">repe cmpsb</div><div class="code_line">jnz .NXTSE</div><div class="code_line">mov eax,edi</div><div class="code_line">sub eax,[_strl]</div><div class="code_line">mov [resylt],eax</div><div class="code_line">jmp .EXT</div><div class="code_line">;Строка найденна</div><div class="code_line">.SEARTH_ERROR:</div><div class="code_line">mov [resylt],0</div><div class="code_line">.EXT:</div><div class="code_line">popad</div><div class="code_line">mov eax,[resylt]</div><div class="code_line">ret</div><div class="code_line">resylt dd 0</div><div class="code_line">endp</div></ol></div></div></div></div>]]></description>
        <author>ProgramMan</author>
        <category>Assembler FAQ</category>
      </item>
	
      </channel>
      </rss>
	