Есть файл с данными: 0`20.12.08* 1`Р22`15,555* 2`Л89А`68,333* Если нашли Р22, то нужно значение 15,555 сохранить в буфер для дальнейшего использования. Р22 -нашел, как быть дальше??? ================================== .data SV db 'Р22',0 SVLen=$-SV .data? pMemory DWORD ? SizeWritten DWORD ? FILERp DWORD ? FindStr PROC NEAR uses esi edi ecx cld mov ecx,[SizeWritten] ; размер строки mov edi,[pMemory]; здесь строка mov al,SV ;P[0]->al next_SV: lea esi,SV inc esi ;на следующий символ repne scasb ;нет символов jcxz exSV ; на выход push ecx mov ecx,SVLen-1 repe cmpsb ;строка p <> подстроке в s cmp ecx,0 ;если подстрока совпала jnz @@SV ;выходим ; ---------------------;здесь нашли @@SV: mov ebx,SVLen-1 sub ebx,ecx pop ecx sub ecx,ebx ;учли пройденное при сравнении cmpsb jmp next_SV exSV: xor eax, eax ret FindStr endp =============================== Заранее благодарен за ответы.
15,555 - это строка в файле, а не число. Поэтому в буфер надо будет сохранять строку. Пропускаешь символ кавычки (') и считываешь байты, пока не встретишь *.
Сделал, получилось. И еще вопрос: Как можно передать в ф-цию FindStr SV и SVLen в виде параметров? что-бы обращаться к ней из других модулей. SV db 'Р22',0 SVLen=$-SV
Вот теперь после переделки работает такой вариант: Код (Text): .data SV db 'Р22',0 PAR db 'Р22',0 .code FindStr PROC uses esi edi ecx SV0 :DWORD LOCAL ln :DWORD invoke lstrlen,offset SV mov ln ,eax invoke lstrlen,buffOUT cld mov ecx,eax mov edi,buffOUT push ecx mov al,[b]SV[/b] ;P[0]->al next_SV: lea esi,[b]SV[/b] inc esi ;на следующий символ repne scasb ;нет символов jcxz exSV ; на выход push ecx mov ecx,ln repe cmpsb ;строка p <> подстроке в s cmp ecx,0 ;если подстрока совпала jnz @@SV ;выходим add flagED,1 inc esi ;на следующий символ mov buffOUT,edi @@SV: mov ebx,ln sub ebx,ecx pop ecx sub ecx,ebx ;учли пройденное при сравнении cmpsb jmp next_SV exSV: xor eax, eax ret FindStr endp работает с SV, а мне нужно, вызывать ф-цию с параметром SVO invoke FindStr,PAR правильно передать параметр c указателем на строку не получается. ---------------- mov al,SV0 ;P[0]->al next_SV: lea esi,SV0 -----------------