Вот. Оптимизировал. Имена параметров можно поменять на любые не изменяя код.
| Код | function A(s:PAnsiChar;char:AnsiChar;n:cardinal;rev:bool):PAnsiChar;stdcall; asm pushad pushf mov edi,[ebp+$08]//s xor eax,eax xor ecx,ecx dec ecx cld repne scasb neg ecx sub ecx,2 mov [ebp-$04],0 //result:=0 mov ebx,[ebp+$10] //n mov al,[ebp+$0C] //char mov esi,1 cmp [ebp+$14],0 //rev jz @e std sub edi,2 jmp @a @e: mov edi,[ebp+$08]//s neg esi @a: repne scasb jnz @b dec ebx jnz @a add edi,esi mov [ebp-$04],edi// result:= edi @b: popf popad end;
function W(s:PWideChar;char:WideChar;n:cardinal;rev:bool):PWideChar;stdcall; asm pushad pushf mov edi,[ebp+$08]//s xor eax,eax xor ecx,ecx dec ecx cld repne scasw neg ecx sub ecx,2 mov [ebp-$04],0 //result:=0 mov ebx,[ebp+$10] //n mov ax,[ebp+$0C] //char mov esi,2 cmp [ebp+$14],0 //rev jz @e std sub edi,4 jmp @a @e: mov edi,[ebp+$08]//s neg esi @a: repne scasw jnz @b dec ebx jnz @a add edi,esi mov [ebp-$04],edi// result:= edi @b: popf popad end;
|
|