Reserve Space
Für lokale Daten muß natürlich erstmal ein Platz geschaffen
werden.
BasCom verwendet dazu den Software-Stack und das Frame.
Alle Datentypen werden gleich behandelt, nur die reservierte Byte-Länge
ist relevant.
BasCom schreibt die erforderliche Länge des Items nach R24 und ruft eine
interne Function auf.Diese sichert erst den Frame-Pointer (r4:r5) auf dem
Software-Stack, erhöht den Frame-Pointer um den verlangten Wert und kehrt
zurück
…..
LDI r24,$01 // gewünschte Länge = immediate value
CALL AddFrame
…..
AddFrame:
ST --Y,r5 // Store & Save Frampointer Hi
ST --Y,r4 // Store & Save Frampointer LO
ADD r4,r24 // addieren der gewünschten Länge auf den FramePointer
CLR r24
ADC r5,r24 // ev. carry - Überlauf
RET
Dadurch befindet sich die Adresse des lokalen Datums auf
Y + 0 // Adresse LSB
Y + 1 // Adresse MSB
Wertzuweisung
Freigabe des Frame
Vor dem Rücksprung wird der Softstack um die Anzahl lokaler Daten *
2 erhöht und der Framepointer um die Gesamtlänge der lokalen Daten
vermindert.
…..
ADIW YL,$0006 // Addieren auf den Software Stack Pointer (z.b.3 Values * 2)
LDI r24,$03 // Subtrahieren vom Frame Pointer (z.b. 3 Byte )
CALL SubR4
…..
SubR4:
SUB r4,r24
CLR r24
SBC r5,r24
RET