Was ändert sich intern in meinem AVR wenn ich statt rjmp rcall oder umgekehrt verwende?
Assembler ist schon lange her bei mir. Aber ich glaube bei call kommt eine Rücksprungadresse auf den Stack. Bei einem RET-Kommando springt der Stackpointer wieder an die Stelle nach dem Call. JMP macht das nicht.
call ist ein Unterprogrammaufruf, bei dem die Rücksprungadress auf dem Stack abgelegt wird. Nach einem ret wird das Programm an der Stelle nach dem Unterprogrammaufruf fortgeführt. jmp ist eine Verzweigung im Programm auf eine andere Adresse.
Ein jmp ist eigentlich nichts anderes als den Instructionpointer mit der adresse im jmp zu laden. Wie ein goto in Basic, ein call wie ein gosub. Klar ??
>wo springt jmp dann hin?
jmp springt an die adresse, die du hinter jmp schreibst.
call macht das ebenso. nur mit dem unterschied:
call merkts sich, von wo aus an die adresse gesprungen wird. es merkt
sich als die alte adresse.
am ende einer mit call angesprungenen funktion schreibt mat ein ret. das
bedeutet: rücksprung wo du herkamst. dadurch springt der µC an die
stelle direkt hinter den call befehl. bei jmp geht das nicht, weil
dieser befehl sich nichts merkt.
dadurch hast du den vorteil, oft benutzte codezeilen als funktion zu
verpacken und von beliebiger stelle im programm aufzurufen.
Jetzt kommt der Haarspalter : @ lippy keine Funktion sondern Unterprogramm/Subroutine. Eine Funktion gibt nach einer Operation einen Wert zurück, hierbei können auch Argumente übergeben werden. So. :)
> Analog (Gast) Na und? Das kann doch trotzdem sein. Eine Funktion wird immer mit call aufgerufen und mit ret beendet. >Jetzt kommt der Haarspalter : Also nix ist. Das war schon alles richtig so
Je nach Programmiersprache heisst es manchmal Funktion und manchmal Unterprogramm, Subroutine, procedure, oder anders. Ein Vorhandensein eines Rückgabewertes kann man daraus oft nicht ablesen.
@lippy >>Jetzt kommt der Haarspalter : >Also nix ist. Das war schon alles richtig so nein.
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.