Вверх ↑
Разработчик
Ответов: 26305
Рейтинг: 2146
#1: 2010-04-22 00:02:05 ЛС | профиль | цитата
Tad, нашел модифицированную ассемблерную версию PosEx. Прогони у себя на тесте. Единственное оличие, так это в объявлении переменных -- строки стоят наоборот



Add(InlineCode,6506667,392,336)
{
@Hint=#14:NewPosEx (Asm)|
WorkPoints=#5:doPos|
EventPoints=#5:onPos|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|71:function PosEx2(const S, SubStr: string; Offset: integer = 1): integer;|3:asm|16: PUSH EDI|16: PUSH ESI|16: PUSH EBX|16: PUSH EAX|18: OR EAX,EAX|14: JE @@2|18: OR EDX,EDX|14: JE @@2|15: DEC ECX|14: JS @@2|23: MOV EBX,[EAX-4]|19: SUB EBX,ECX|15: JLE @@2|23: SUB EBX,[EDX-4]|14: JL @@2|15: INC EBX|19: ADD EAX,ECX|19: MOV ECX,EBX|23: MOV EBX,[EDX-4]|15: DEC EBX|19: MOV EDI,EAX|0:|19:@@1: MOV ESI,EDX|13: LODSB|19: REPNE SCASB|15: JNE @@2|19: MOV EAX,ECX|16: PUSH EDI|19: MOV ECX,EBX|18: REPE CMPSB|15: POP EDI|19: MOV ECX,EAX|15: JNE @@1|23: LEA EAX,[EDI-1]|15: POP EDX|19: SUB EAX,EDX|15: INC EAX|15: JMP @@3|0:|15:@@2: POP EAX|19: XOR EAX,EAX|8: |15:@@3: POP EBX|15: POP ESI|15: POP EDI|4:end;|0:|28:procedure THiAsmClass.doPos;|5:begin|71: _hi_onEvent(onPos,PosEx2('aasftassklddhs123s123s','lddhs123s123s',3));|4:end;|0:|4:end.|
AddHint(51,46,96,13,@Hint)
}

карма: 22

0