Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Строковая функция Си на Ассемблере

16K
23 января 2010 года
Fatality
7 / / 08.06.2006
Пишу строковую функцию strpbrk(s1,s2), которая в строке s1 ищет вхождение любого символа из s2 и возвращает указатель на этот символ в s1, т.е. strpbrk('abcd','pc') возвратит 'сd'. Так вот, функцию я вроде написал с горем пополам, но такая фишка - когда я текст функции просто копирую в основную программу, то она работает исправно, а если я ее вызываю как функцию, то ничего не выдает! Почему? Может с адресами какая то проблема? Подскажите пожалуйста, очень нужно. Текст ниже. Пишу во фрипаскале, студенческая необходимость ((
Код:
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.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог