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.

Assembler - stos, operacje

obis2 07 Kwi 2016 16:52 798 3
  • #1 07 Kwi 2016 16:52
    obis2
    Poziom 6  

    Cześć

    Jestem początkujący więc proszę o wyrozumiałość

    Poniżej krótki program (od wykładowcy) którego zadaniem jest wyświetlanie liczb na wyświetlaczu 7 segmentowym. Proszę o wyjaśnienie co poszczególne komendy wykonują w kodzie (próbowałem z instrukcją ale pojawiło się mnóstwo pytań http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html)..

    Kod: avrasm
    Zaloguj się, aby zobaczyć kod

    0 3
  • #2 07 Kwi 2016 17:24
    2675900
    Użytkownik usunął konto  
  • #3 07 Kwi 2016 18:11
    obis2
    Poziom 6  

    Z tym językiem angielskim to różnie jest

    to co wyszukałem

    push - zapisuje na stosie dwa rejestry r30 i r31 (które stanowią Z) ale po co przecież są puste?
    ldz - wpisuje do rejestru obie pozycje z kody7seg ale które ?
    add r30,r16 dodaje oba rejestry, a wynik wpisuje do r30 (to rejestr do którego w programie głównym wpisywane są cyfry od 0 do 8)
    brcc wykonuje skok pod warunkiem że w SREG są jedynki na odpowiednich pozycjach ???
    inc r31 zwiększenie rejestru o jeden ???
    lpm r16,z ładuje wskaźnik z ???
    com r16 kod uzupełnień do jedności ???
    pop - pobieramy r30,r31 ze stosu
    ret - powrót do głównego programu

    0
  • Pomocny post
    #4 07 Kwi 2016 18:29
    tmf
    Moderator Mikrokontrolery Projektowanie

    push/pop stosuje się, żeby zachować wartość początkową rejestrów, jeśli w innym miejscu programu są wykorzystywane.
    ldz - nie ma takiego menmonika w asemblerze AVR. Zapewne to jakieś makro.
    brcc - wykonuje skok jeśli wskaźnik carry (przeniesienia) jest wyzerowany, co ten wskaźnik oznacza to sobie doszukasz.
    lpm r16, z - ładuje do rejestru r16 wartość z komórki pamięci FLASH wskazywanej przez rejestr Z
    Resztę zdekodowałeś ok.

    0