Z asm nie mam dużego doświadczenia (jakieś dwa tygodnie
), ale to co udało mi się ustalić:
PKoz napisał(a):
Może wiesz coś więcej o adresie PORTB, bo mnie zaintrygowało i mimo poszukiwań nie znalazłem odpowiedzi dlaczego adres PORTB jest czasami podawany w postaci 0x18 (0x38)?
Co nieco na ten temat jest tutaj:
http://nongnu.org/avr-libc/user-manual/group__avr__sfr__notes.html. Ja to rozumiem tak, że trzeba adres rejestru pomniejszyć o 0x20 jeśli chce się korzystać z instrukcji IN/OUT. Jeśli do tych rejestrów czyta/pisze się instrukcjami LDS/STS nie jest to konieczne. IN/OUT są szybsze, trwają tylko jeden takt, ale zaadresować można tylko adresy <=31.
PKoz napisał(a):
Gdzie jest wywoływana funkcja LED_WYL i dlaczego pisana jest dużymi literami - czy wielkość liter ma znaczenie?
Zdaje się, że wielkość liter w gas jest bez znaczenia.
PKoz napisał(a):
Bo w języku C dyrektywa zaczyna się od znaku # (#include), a w asm od kropki (.global). U ciebie w jednym pliku są oba typy dyrektyw.
W plikach .S (duże S) można stosować obie konwencje preprocesora. Prep. C jest, mam wrażenie, ogólnie wygodniejszy, ale asmowy też sie przydaje np. przy definiowaniu makr.
Są jeszcze pliki .s (małe s), w których, zdaje się preprocesor C-owy nie działa. To mój domysł wywnioskowany z tego jak gcc wywołuje gas (są dwie opcje "assembler" i "assembler-with-preprocessor"), nie wiem czy prawidłowy.