User manual

219 C-Control Pro IDE
© 2013 Conrad Electronic
MOVW R26,R8 ; get RamTop from register 8,9
SUBI R26,LOW(glob1) ; subtract index from glob1 to get address
SBCI R27,HIGH(glob1)
LDI R30,LOW(42)
ST X+,R30
CLR R30 ; the high byte is zero
ST X,R30
ret
.endif
Im zweiten Teil des Assembler Sources werden die übergebenen Parameter "a" und "c" als integer
addiert, und die Summe dann zurückgegeben.
.ifdef tag2
proc2:
; example for accessing and returning parameter
; we have int proc2(int a, float b, byte c);
; return a + c
MOVW R30, R10 ; move parameter stack pointer into Z
LDD R24, Z+5 ; load parameter "a" into R24,25
LDD R25, Z+6
LDD R26, Z+0 ; load byte parameter "c" into X (R26)
CLR R27 ; hi byte zero because parameter is byte
ADD R24, R26 ; add X to R24,25
ADC R25, R27
MOVW R30, R6 ; copy stack pointer from R6
ADIW R30, 4 ; add 4 to sp - ADIW only works for R24 and greater
MOVW R6, R30 ; copy back to stack pointer location
ST Z+, R24 ; store R24,25 on stack
ST Z, R25
ret
.endif
4.4.2 Datenzugriff
Globale Variablen
Im Bytecode Interpreter liegen in den Registern 8 und 9 ein 16-Bit Zeiger auf das Ende des Speicher-
bereichs der globalen Variablen. Möchte man auf eine globale Variable zugreifen, die in der ".def"
Datei definiert wurde, so erlt man die Adresse der Variablen, wenn man die Position der Variablen
von R8,R9 abzieht. Dies sieht dann so aus: