Main:
ldi R16, 6
push R16
ldi R16,7
push R16
Unterprogrammaufruf mit rcall addParams; die Rücksprungadresse auf den nächsten Befehl im Hauptprogramm wird automatisch auf den Stack gelegt
addParams:
in ZHigh, SPH
in ZLow, SPL
Z wird auf die Position von SP gestellt; dadurch kann SP wieder verändert werden
subi ZLow,-4
Z = Z+4 dadurch zeigt Z jetzt auf den 1. Parameter, der an das Unterprog. übergeben wurde
push R20 ; eigentlich über ldi …
push R21
ld R20,Z
ld R21,-Z
add r20,r21 ; die eigentliche Rechenoperation
st z,R20
pop R21
pop R20 ; die beiden Register wiederherstellen
vor dem Rücksprung steht der Stackpointer SP wieder vor der Rücksprungadresse
ret
der Programmzähler PC wird mit der Rücksprungadresse geladen; hier steht der erste Befehl nach der Rückkehr aus dem Unterprogramm
pop R2 ; holt das Ergebnis (13) ab
pop R1 ;dummy
pop R1 ist notwendig, damit der SP wieder am Anfang steht