Forum: Mikrocontroller und Digitale Elektronik unterschied rcall rjmp


von krapf (Gast)


Lesenswert?

Was ändert sich intern in meinem AVR wenn ich statt rjmp rcall oder 
umgekehrt verwende?

von Matthias L. (Gast)


Lesenswert?

der inhalt des stacks und der stackpointer selbst demzufolge auch

von krapf (Gast)


Lesenswert?

wie meinst du das kannst du mir das genauer erklären?

von Analog (Gast)


Lesenswert?

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.

von Analog (Gast)


Lesenswert?

Äh, sorry nicht Stackpointer, sondern der Instructionpointer.

von krapf (Gast)


Lesenswert?

wo springt jmp dann hin?

von Matthias Kölling (Gast)


Lesenswert?

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.

von Analog (Gast)


Lesenswert?

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 ??

von Matthias L. (Gast)


Lesenswert?

>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.

von krapf (Gast)


Lesenswert?

gecheckt danke !!!!!!!!!

von Analog (Gast)


Lesenswert?

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.

:)

von Matthias L. (Gast)


Lesenswert?

> 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

von Tom (Gast)


Lesenswert?

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.

von Analog (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.