Столкнулся с проблемой использования меток во встроенном ассемблере.
При попытки компилировать вот эту процедуру:
/*-------------------------------------------------------*/
/* аналог паскалевской функции pos */
/*-------------------------------------------------------*/
// для совместимости с C99 нужно extern inline
extern inline short int strpos(char ch1,char * s1,const char n1);
inline short int strpos(char ch1,char * s1,const char n1)
{ //регистры вроде не надо сохранять так как они по идеи не должны портить
// потомучто функция инлайн
register short int lng;
__asm__ ( "push %edi"); //без volatile при оптимизации ошибки
__asm__ ( "mov %0,%%edi"::"r"(s1));
__asm__ __volatile__ ( "\
mov $0x00FF,%%cx;\
mov %2,%%al;\
cld;\
repne scasb;\
not %%cl;\
cmp %1,%%cl;\
ja _slbl1;\
mov %%cx,%0;\
jmp _slbl2;\
slbl1:\
mov $0xffff,%0;\
slbl2:\
nop;":"=r"(lng):"r"(n1),"r"(ch1));
__asm__ ( "pop %edi");
return lng;
}
Компилятор раньше не ругался а теперь ругается на метки.
/home/yura/my_progr.cpp/snifflog/source/mysnlog.c:61: Error: symbol `slbl1' is already defined
/home/yura/my_progr.cpp/snifflog/source/mysnlog.c:61: Error: symbol `slbl2' is already defined
Использовать обычный ассемблер не очень хочется. Там нужно будет разбираться с соглашениями о вызовах и както указывать ему(компилятору) что нужно использовать именно это соглашение. Но если подругому никак то вообщем можно и отдельный ассемблерный файл. Главное найти пакет установки а то мне KDevelop пишит что не может найти CCAS и я не могу его найти с помощью менеджера пакетов. Вообщем одни сплошные грабли.
А так хотелось сделать аналог паскалевской функции pos в Си.
Ответ на:
комментарий
от const86
Ответ на:
комментарий
от Baltika80
Ответ на:
комментарий
от const86
Ответ на:
комментарий
от const86
Ответ на:
комментарий
от io
Ответ на:
комментарий
от io
Ответ на:
комментарий
от const86
Ответ на:
комментарий
от Baltika80
Ответ на:
комментарий
от const86
Ответ на:
комментарий
от Baltika80
Ответ на:
комментарий
от www_linux_org_ru
Ответ на:
комментарий
от Baltika80
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Какая-то фигня с виртуальными методами (2014)
- Форум Вопрос новичка: где найти исходный код вызова __libc_errno? Можно написать свой? (2023)
- Форум [kernel] NUMA (2011)
- Статьи Линукс, ассемблер и X11 (2023)
- Форум Метки (2010)
- Форум Метки (2008)
- Форум Метки процессов (2017)
- Форум Метки дистрибутивов (2013)
- Форум Исправьте метки (2008)
- Форум О метках (2008)