Dieser ArtikelBenutzerSuche |
AVR Assembler - Unterprogramme
[bearbeiten] AufrufUnterprogramme werden beim AVR mit dem Befehl rcall bzw call aufgerufen. rcall erhält als Operand die relative Adresse des Unterprogramms in Form einer symbolischen Sprungmarke (z.B. "loop"). Es ist natürlich auch möglich die relative Adresse direkt anzugeben (z.B. "-20"). Dieser Möglichkeit sollte jedoch weitestgehend vermieden werden, da sie eine zusätzliche Fehlerquelle darstellt und allgemein schlechter lesbare Programme zur Folge hat. Mittels rcall ist es nur möglich, relative Adressen im Bereich von -2K+1 und +2K Worten anzuspringen. Darüber hinaus muss der Befehl call verwendet werden, mit dem der ganze Programmspeicher adressiert werden kann. Warum dann nicht immer call verwenden? Zum einen gibt es den Befehl auf den AVRs nicht, bei denen der gesammte Speicher mit rcall erreichbar ist. Daneben benötigt call zwei Worte im Speicher und einen Zyklus mehr zur Abarbeitung. Da die Rücksprungadresse beim Aufruf von Unterprogrammen auf dem Stack abgelegt wird, muss dieser beim Programmstart ordnungsgemäß initialisiert werden. [bearbeiten] ParameterübergabeAuf Prozessoren mit vielen Registern ist es sinnvoll ein paar Register zur Parameterübergabe zu reservieren, z.B. R12-R15 (je nach Bedarf mehr oder weniger). Man kann es sich dadurch sparen die nötigen Parameter über den Stack zu übergeben.
|