Witam, czy ktos kuma o co chodzi w tych magicznych skladniach inline asmeblera? Prosze moze o jakiegos linka do przykladow. To ze strony gcc to dla mnie black magic :(
- posted
19 years ago
Witam, czy ktos kuma o co chodzi w tych magicznych skladniach inline asmeblera? Prosze moze o jakiegos linka do przykladow. To ze strony gcc to dla mnie black magic :(
asm volatile( "TUTAJ_KOD" : PARAMETRY_WYJSCIOWE : PARAMETRY_WEJSCIOWE [: NARUSZONE_ZMIENNE] );
Po to to jest, żeby kompilator wiedział, co wstawiony kod asemblera zmienia, jakie zmienne są zmieniane, jakie ma parametry wejściowe, jakie wyjściowe. Przez to kompilator nadal może wprowadzać optymalizacje i nie musimy się martwić co w którym rejestrze jest, operujemy na symbolach (np. najmłodszy bajt pierwszego parametry, itd.).
Postać PARAMETRY_WYJSCIOWE mozesz poczytac pod linkiem wyzej. Podaje sie tam, typ parametru i jego nazwe. Tu jest przyklad:
inline void delay( int count ) { register unsigned char tmpval; asm volatile( "sbiw %A0, 0x01" "\n\t" "ldi %1, 0xff" "\n\t" "cpi %A0, 0xff" "\n\t" "cpc %B0, %1" "\n\t" "breq dl_ret%=" "\n\t" "dl_loop%=:" "\n\t" "sbiw %A0, 0x01" "\n\t" "cpi %A0, 0xff" "\n\t" "cpc %B0, %1" "\n\t" "brne dl_loop%=" "\n\t" "dl_ret%=:" "\n\t" :: "r" (count), "r" (tmpval) ); }
%0 pierwszy operand, %1 drugi operand %A0 to najmłodszy bajt pierwszego operandu (parametru), %B0 to kolejny bajt, itd. %A1 to najmłodszy bajt drugiego operandu. %= używa się, aby generować unikalne nazwy etykiet.
Jak widać powyższa procedura asemblera nie ma nic na wyjściu ("::"), bo generuje tylko opóźnienie, ale za to ma 2 parametry wejściowe (":: "r" (count), "r" (tmpval)"). r oznacza, że to może być dowolny rejestr (może być też np. a, b, d, x, y, z - poczytaj), w nawiazach podaje się nazwę. Więc do count będziemy się odnosili przez %0, a to tmpval %1 (zaś do poszczególnych składowych przez %A0, %B0, itd.).
W tym linku jest wszystko fajnie opisane.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.