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!
call legt die Rücksprungadresse auf den Stack, damit ret weiß, wohin es zurückspringen soll.
Rufus Τ. F. schrieb: > call legt die Rücksprungadresse auf den Stack, damit ret weiß, wohin > es zurückspringen soll. ach ok, vielen Dank! Nur verstehe ich leider noch nicht ganz, was hier noch die zweite Adresse 0x11e mit Wert 0x00 darstellen soll?
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
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.
Alex S. schrieb: > Nur verstehe ich leider noch nicht ganz, was hier noch die zweite > Adresse 0x11e mit Wert 0x00 darstellen soll? 16-Bit-Adresse?
@ Alex Darf ich mal fragen, wie Du die Tabelle assli2.JPG erstellt hast?
Klaus schrieb: > @ Alex > > Darf ich mal fragen, wie Du die Tabelle assli2.JPG erstellt hast? Hallo Klaus, die war uns vorgegeben, das ist eine Aufgabe, mit der ich mich momentan rum schlage. Assli2 ist halt die Musterlösung. Gruß
Rufus Τ. F. schrieb: > 16-Bit-Adresse? achso, 0x011e beinhaltet das High-Byte der Adresse. Ok ist mir jetzt klar. Vielen Dank!
Thomas H. schrieb: > Ist der Sprung kurz, so ist zu erwarten das das High-Byte der Adresse > 0x00 ist. super! vielen Dank für die Erklärung, Ihr habt mir sehr weitergeholfen!
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.
Hi
> Wie sind denn diese Werte aus dem Code ersichtlich?
Garnicht, denn es gibt in dem gezeigten Code keine Zuweisung für ZL/ZH.
MfG Spess
ah ok, ich habs, also Z Register ist ja gegeben 0x0100 dann sind ja Zh = 0x01 und zl = 0x00
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.
Hi
>Nach dem CALL wäre der PC nur dann 0xC
Nein. call look = call 0x000B. Das heißt nach der call ist der
PC=0x000B. Auf Adresse 0x000A ist der PC nach dem RET.
MfG Spess
Ah, mein Fehler. Bin davon ausgegangen "assli" stünde für "Assembler-Listing".
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.

