function StrPbrk(Str,Str2: PChar): PChar; assembler;
label l1,l2,l3,l4;
asm
CLD
MOV EAX, Str2
MOV EDI, [EAX]
MOV EAX, Str
MOV ESI, [EAX]
MOV CL, [ESI]
XOR AX,AX
l1: LODSB
MOV EDI, Str2
MOV DL, CL
l4: SCASB
JE l2
LOOP l4
MOV CL,DL
LOOP l1
l2: DEC ESI
MOV EAX, ESI
end;
label l1,l2,l3,l4;
var
s,s1,s2:pchar;
begin
s:='dace';
s2:='ba';
s1:='';
s1:=StrPbrk(s,s2);
writeln(s1);
readln;
{ asm
CLD
MOV CX, 000Ah
MOV EDI, s2
MOV ESI, s
XOR AX,AX
l1: LODSB
MOV EDI, s2
MOV DX, CX
l4: SCASB
JE l2
LOOP l4
MOV CX,DX
LOOP l1
l2: DEC ESI
MOV EAX, ESI
MOV s1,EAX
end;}
end.
Строковая функция Си на Ассемблере
Пишу строковую функцию strpbrk(s1,s2), которая в строке s1 ищет вхождение любого символа из s2 и возвращает указатель на этот символ в s1, т.е. strpbrk('abcd','pc') возвратит 'сd'. Так вот, функцию я вроде написал с горем пополам, но такая фишка - когда я текст функции просто копирую в основную программу, то она работает исправно, а если я ее вызываю как функцию, то ничего не выдает! Почему? Может с адресами какая то проблема? Подскажите пожалуйста, очень нужно. Текст ниже. Пишу во фрипаскале, студенческая необходимость ((