BasCom Code3


Wertzuweisung in LOCAL Variablen

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