Hallo Leute, ich bin gerade dabei, eine ASM Funktion zu schreiben und
sie in meinen C-Code einzubinden.
Dabei bin ich im Zusammenhang mit der Parameterübergabe auf einen
Widerspruch gestoßen, den ich nciht recht verstehe:
http://www.gnu.org/savannah-checkouts/non-gnu/avr-libc/user-manual/FAQ.html#faq_reg_usage
hier steht nämlich:
Function call conventions:
Arguments - allocated left to right, r25 to r8. All arguments are
aligned to start in even-numbered registers (odd-sized arguments,
including char, have one free register above them). This allows making
better use of the movw instruction on the enhanced core.
und...
Call-saved registers (r2-r17, r28-r29):
May be allocated by gcc for local data. Calling C subroutines leaves
them unchanged. Assembler subroutines are responsible for saving and
restoring these registers, if changed. r29:r28 (Y pointer) is used as a
frame pointer (points to local data on stack) if necessary. The
requirement for the callee to save/preserve the contents of these
registers even applies in situations where the compiler assigns them for
argument passing.
Wenn die Register r8 - r25 durch Parameterübergabe an eine Funktion
geändert wurden, dann kann die Funktion die alten Werte doch überhaupt
nicht zwischenspeichern! Soll man die Register dann trotzdem
zwischenspeichern?
Wie soll man das verstehen?
Gruß, Yaro