Jatsekku napisał(a):
Chciałbym pisać sobie wstawki assemblerowe w taki sposób aby były one w oddzielnym pliku .S i aby kompilator sam miał możliwość dobierania rejestrów (tak jak w inline assembler)
Pliki *.S
nie są kompilowane bezpośrednio przez kompilator C, tylko przez program 'avr-as.exe'. Program ten nie ma żadnej wiedzy na temat tego, jaka jest ogólna struktura całego programu, co znajduje się w plikach *.c i jak to zostanie skompilowane, a więc nie jest w stanie ocenić, które rejestry byłoby najkorzystniej wybrać. On po prostu tłumaczy kod w języku asm na instrukcje maszynowe generując plik obiektowy (*.o). Nawet gdyby miał możliwość samodzielnego doboru rejestrów, to nie byłoby z tego żadnej korzyści.
Inaczej sprawa wygląda z inline-assembler. Ten kod znajduje się bezpośrednio w plikach *.c i jest tłumaczony przez kompilator C. W tej sytuacji pozostawienie kompilatorowi decyzji odnośnie dobrania optymalnych rejestrów ma jak najbardziej sens.
Jatsekku napisał(a):
finalnie chciałbym wywoływać sobie poszczególne procedury tak jak zwykła funkcję w C, może mi ktoś przybliżyć najbliższą realizację takiego zagadnienia ?
Ten temat dosyć dokładnie opisałem w artykule "
Miksowanie kodu C i ASM przy użyciu GCC". Można tam też znaleźć podstawowe informacje na temat procesu budowania programu, dzięki czemu łatwiej będzie zrozumieć to, co napisałem powyżej.