URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3062
[ Назад ]

Исходное сообщение
"asm in C file"

Отправлено asm , 13-Июн-04 22:38 
Вот такая бага у меня:
есть прога:
#include <stdlib.h>
#include <stdio.h>

main (int argc, char *argv[])
{
__asm__ __volantile__{ тут код на асме}
return 0;
}

а вот что говорит компилятор:
%gcc -o cfile cfile.c
cfile.c: In function `main':
cfile.c:6: error: syntax error before "__volantile__"
%
Как быть? Прога под фрю... Кто знает как сделать асмовую вставочку в С под юникс?


Содержание

Сообщения в этом обсуждении
"asm in C file"
Отправлено Bob , 14-Июн-04 12:09 
__asm__ __volatile__ ( ...... );
__asm__ ( ..... );
asm ( ... );


"asm in C file"
Отправлено asm , 14-Июн-04 13:53 
>__asm__ __volatile__ ( ...... );
%gcc -o cfile cfile.c
cfile.c: In function `main':
cfile.c:6: error: syntax error before ')' token
%

>__asm__ ( ..... );
%gcc -o cfile cfile.c
cfile.c: In function `main':
cfile.c:6: error: syntax error before ')' token
%

>asm ( ... );
%gcc -o cfile cfile.c
cfile.c: In function `main':
cfile.c:6: error: syntax error before ')' token
%

Не работает хоть убей ! :(((
Кто нибудь может привести рабочий пример под фрю? Буду очень и очень благодарен...
Мне бы просто понять как асм в С вставлять, а там я уже разберусь...


"asm in C file"
Отправлено Bob , 14-Июн-04 16:11 
#include <stdio.h>

unsigned long summa(unsigned long A, unsigned long B)
{
    unsigned long rez;
    asm(
    " addl %Мx, %Йx \n"
    : "=a"(rez)
    : "a"(A),"d"(B)
    );

    return rez;
}

int main()
{
    unsigned long A, B, C;
    A = 3;
    B = 2;
    C = 0;
    printf("C - %u\n", C);
    C = summa(A, B);
    printf("C - %u\n", C);

    return 0;
}


"asm in C file"
Отправлено dimus , 20-Июл-04 10:01 
Гораздо лучше сделать отдельный файл на ассемблере, заголовочный файл, описывающий функции в нем и соединять их при линковке. Причина - облегчение переноса программ на другие платформы. Вот представь, приспичило тебе перенести твою чудо программу ну, скажем, на процессор ARM. И ты добросовестно сидишь и выковыриваешь из исходников команды x86 и заковыриваешь туда команды ARM. В результате у тебя два исходника, и каждый из них нужно поддерживать. Нахрен такой гемор? А так все ассемблерные функции у тебя в отдельном файлике - сделал новый под другую архитектуру и все проблемы решены.
Вообще, в целях повышения переносимости, лучше все платформо-зависимое валить в одну кучу, а все независимое - в другую. Меньше будет проблем и у программистов, и у их жертв :)