Вверх ↑
Ответов: 16884
Рейтинг: 1239
#1: 2010-04-22 00:40:32 ЛС | профиль | цитата


function PosEx2(const S, SubStr: string; Offset: integer = 1): integer;
begin
asm
PUSH EDI
PUSH ESI
PUSH EBX
PUSH EAX
OR EAX,EAX
JE @@2
OR EDX,EDX
JE @@2
DEC ECX
JS @@2
MOV EBX,[EAX-4]
SUB EBX,ECX
JLE @@2
SUB EBX,[EDX-4]
JL @@2
INC EBX
ADD EAX,ECX
MOV ECX,EBX
MOV EBX,[EDX-4]
DEC EBX
MOV EDI,EAX

@@1: MOV ESI,EDX
LODSB
REPNE SCASB
JNE @@2
MOV EAX,ECX
PUSH EDI
MOV ECX,EBX
REPE CMPSB
POP EDI
MOV ECX,EAX
JNE @@1
LEA EAX,[EDI-1]
POP EDX
SUB EAX,EDX
INC EAX
JMP @@3

@@2: POP EAX
XOR EAX,EAX

@@3: POP EBX
POP ESI
POP EDI
end;
end;


заключи asm коды в begin end
и FPC нормально полюбит.
Это Delphi умный сделал паскалевские скобки за тебя.
------------ Дoбавленo в 00.40:
С begin end FPC -нормально считает, а Delphi врет
Смотреть надо.

Кто там силён в АSМе ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:nesco