Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR M32 ASM - ASM nauka pytania

ASMnauka 19 Mar 2013 18:03 1698 7
  • #1 19 Mar 2013 18:03
    ASMnauka
    Poziom 12  

    Witam serdecznie ponownie.

    Pojawiło się następne pytanie, a raczej kilka.
    Ale do rzeczy.

    Już wiem małe co nieco ale jest ciągle zbyt mało, by się cieszyć z nauki ASM.
    Wyczytałem, że są dwie komendy dotyczące operacji wejścia\wyjścia.

    IN = Odczyt rejestru\IO
    OUT = Zapis rejestru\IO

    W związku z tym mam kilka pytań.

    Czy podczas odczytu informacji z portu i ładownia ich do rejestru można to robić bezpośrednio, czy też trzeba najpierw załadować je do rejestru pomocniczego ?

    Inną sprawą jest odkładanie informacji z rejestrów na stos.
    Przypuszczam, że jest to konieczne przy większych projektach, ale czy małych programikach jest to konieczne ?

    PUSH = Odkładanie na stos
    POP = Ściąganie ze stosu

    Kolejna sprawa to rejestr SREG
    Czy można wczytywać (sprawdzać) jego flagi w ten sposób:

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    Czy też trzeba wskazać numer bitu w rejestrze SREG konkretnej flagi ?

    0 7
  • #2 19 Mar 2013 18:54
    excray
    Poziom 39  

    ASMnauka napisał:
    Czy podczas odczytu informacji z portu i ładownia ich do rejestru można to robić bezpośrednio, czy też trzeba najpierw załadować je do rejestru pomocniczego ?

    Musisz to zrobić przez rejestr roboczy czyli:
    in r16, PINB
    out PORTD,r16
    in i out możesz stosować do dowolnego rejestru którego adres jest mniejszy od 0x20. Tak samo jak sbi/cbi
    ASMnauka napisał:
    Inną sprawą jest odkładanie informacji z rejestrów na stos.

    Odkładasz tam gdzie chcesz. Na pewno przy wejściu i wyjściu z przerwania. Stos jest dal Ciebie a nie Ty dla stosu. Na przykład masz funkcję która używa r16,r17 i r18. Ale przed wywołaniem funkcji w tych rejestrach masz inne dane których nie chciałbyś stracić. Najlepiej więc na początku funkcji skopiować zawartość tych rejestrów na stos a przy wychodzeniu z funkcji z powrotem je odtworzyć, i tym podobne przykłady.
    ASMnauka napisał:
    Czy można wczytywać (sprawdzać) jego flagi w ten sposób:

    Najlepiej do sprawdzania flag używać rozkazów opisanych w datasheet jako "branch instructions" pomijając początkowe skoki i porównania. W praktyce wszystko co się zaczyna od BR** w tej sekcji rozkazów testuje flagi.

    0
  • #3 19 Mar 2013 19:07
    Tomasz Gumny
    Poziom 27  

    W ten sposób niewiele się nauczysz. Weź jakiś dobrze skomentowany program w asemblerze, o którym wiesz co robi i go dokładnie przeanalizuj.

    0
  • #4 19 Mar 2013 19:35
    ASMnauka
    Poziom 12  

    Tomasz gdzie takiego przykładu mogę szukać ?
    Owszem, poznanie nazw rejestrów nie jest aż takim problemem.
    Natomiast poznanie nazw komend ASM i ich działania jest już problemem dla początkującego.

    0
  • #5 19 Mar 2013 19:49
    excray
    Poziom 39  

    Przecież wszystkie opisy komend masz w datasheet:
    SUBI - odejmij stałą od wartości rejestru -> SUBI r16,38 - odejmuje od zawartości rejestru liczbę 38
    MUL - mnożenie bez znaku - > MUL r16,r17 - mnoży rejest r16 z rejestrem r17 a wynik wrzuca do rejestrów r1 i r0
    SBIC - pomiń następny rozkaz jeśli bit w rejestrze I/O jest równy 0 -> SBIC PINB,3 - jeśli bit 3 w rejestrze PINB jest równy 0 następny rozkaz za tym rozkazem zostanie ominięty - procesor skoczy do następnego za nim rozkazu. I tak dalej. Wszystko jest w datasheet.

    0
  • #6 19 Mar 2013 20:26
    Tomasz Gumny
    Poziom 27  

    Poniżej masz wczesną wersję programu dla procesora U2 z zestawu AVT-5257:

    Kod: asm
    Zaloguj się, aby zobaczyć kod
    Program jest napisany dla procesora ATTiny2313, ale różnice będą dotyczyły tylko peryferiów.

    0
  • #7 19 Mar 2013 20:51
    BlueDraco
    Specjalista - Mikrokontrolery

    To nie są żadne komendy. To są INSTRUKCJE (ew. w dawniejszej nomenklaturze - rozkazy) procesora.

    0
  • #8 21 Mar 2013 15:58
    emarcus
    Poziom 35  

    ASMnauka napisał:
    ......... gdzie takiego przykładu mogę szukać ?
    Owszem, poznanie nazw rejestrów nie jest aż takim problemem.
    Natomiast poznanie nazw komend ASM i ich działania jest już problemem dla początkującego.


    Jeżeli potrafisz zrozumiec/posługiwac się jednym z tych języków (ang, niem.) to na początek warto odwiedzic tę stronę:
    http://www.avr-asm-tutorial.net/avr_en/index.html
    albo download gotowy kurs w formacie .pdf (ok 80 str./ang.)
    http://www.avr-asm-download.de/beginner_en.pdf
    lub to samo w jęz. niem. (134 str.)
    http://www.avr-asm-download.de/beginner_de.pdf
    Jest tam wiele przykładów z objaśnieniami dla początkujących szczególnie (beginners).

    Byc może są i polskie podobne strony o których nie wiem.

    e marcus

    0