AVR Assembler-Listing, Befehl unklar

OP #4377069
Lesenswert?
• ▲
▼
Hallo Community,

brauche Hilfe, um die Wirkung eines Befehls in AVR Assembler Code 
nachzuvollziehen. Dabei handelt es sich um Befehl call. Auf den 
angefügten Listings, sieht man, dass Parameter Adresse:Wert sich durch 
das Befehl ändert und zwar wird der Wert der Adresse, auf die SP 0x11f 
zeigt 0x0a und der Wert der Adresse, auf die SP 0x11e zeigt: 0x00. Wie 
kommt das zustande? woran kann ich erkennen, dass diese Adressen 
explizit mit diesen Werte beschrieben werden? Würde mich sehr über Eure 
Hilfe freuen!
Angehängte Dateien:
Gast #4377123
Lesenswert?
• ▲
▼
Hi

>ach ok, vielen Dank! Nur verstehe ich leider noch nicht ganz, was hier
>noch die zweite Adresse 0x11e mit Wert 0x00 darstellen soll?

Der Befehl call ... steht auf Adresse 0x0008. Durch den call wird die 
Rücksprungadresse (Adresse nach dem call) auf den Stack gelegt und der 
PC auf die Adresse im call-Befehl gesetzt.

In der Spalte Adresse:Wert ist also die Rücksprungadresse auf dem Stack 
gemeint. Finde ich allerdings etwas irreführend. Besser du benutzt das 
Insruction SEt von Atmel:

https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjTz-605sTJAhWCHg8KHUQ_AzsQFgggMAA&url=http%3A%2F%2Fwww.atmel.com%2Fimages%2Fatmel-0856-avr-instruction-set-manual.pdf&usg=AFQjCNHZYp0mEEzU2y96F-1GdGyaDAIk0Q

MfG Spess
(Firma: CIA) #4377128
Lesenswert?
• ▲
▼
Eigentlich verstehe ich die ganze Frage nicht. CALL wird für lange 
Sprünge benutzt. Es wird die Absolute Adresse benutzt, wo hingesprungen 
wird, kein relativ Wert wie bei RCALL. Es ist also ein "Wort" notwendig. 
Ist der Sprung kurz, so ist zu erwarten das das High-Byte der Adresse 
0x00 ist.
OP #4379177
Lesenswert?
• ▲
▼
hab da auch mal Frage wegen dem Push ZH bzw ZL der SP wird nach diesem 
Befehl mit den Werten ZH: 0x01 und ZL:0x00 überschrieben. Wie sind denn 
diese Werte aus dem Code ersichtlich? Wie ist man in der Lösung auf 
genau diese Werte gekommen? würde mich sehr über eure Hilfe freuen.
Persönliche Seite #4379325
Lesenswert?
• ▲
▼
Die Musterlösung erscheint mir falsch:

Nach dem NOP steht der PC auf 0x8, und offenbar enthält der PC die 
Word-Adresse der Befehle, nicht deren Byte-Adresse.

Demnach beginnt der nächste Befehl CALL in 0x8 und belegt als 2-Word 
(32-Bit) Befehl auch 0x9.  Nach dem CALL steht der PC also auf 0xA, der 
Adresse des nachfolgenden PUSH ZH was auch korrekt in der letzten Spalte 
(Stack) eingetragen ist.  In die Spalte PC gehört also 0xA als Wert von 
PC nach dem CALL, und nach dem PUSH ZH steht der PC folglich auf 0xB 
etc.

Nach dem CALL wäre der PC nur dann 0xC, wenn PC in Bytes gerechnet wäre: 
Dann würde CALL 0x8...0xB belegen.  In dem Falle sind aber die folgenden 
PC-Werte falsch, denn jeder Befehl beginnt an einer geraden 
Byte-Adresse, und auf dem Stack müsste 0x6 stehen, nämlich die 
Word-Adresse von 0xC.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.