C Control PRO Unit Mega 128 198219 用户手册
产品代码
198219
220
Compiler
© 2013 Conrad Electronic
; global variable access example
; write 0042 to global variable glob1
MOVW R26,R8
; get Ram Top from register 8,9
SUBI R26,LOW(glob1)
; subtract index from glob1 to get address
SBCI R27,HIGH(glob1)
Liegt dann die Adresse der globalen Variable im X Registerpaar (R26,R27), dann kann man den ge-
wünschten Wert (in unserem Beispiel 42) dort hineinschreiben:
wünschten Wert (in unserem Beispiel 42) dort hineinschreiben:
LDI R30,LOW(
42
)
ST X+,R30
CLR R30
; the high byte of 42 is zero
ST X,R30
Parameterübergabe
Parameter werden auf dem Stack des Bytecode Interpreters übergeben. Der Stackpointer (SP) sitzt
im Registerpaar R10,R11. Werden Parameter übergeben, so werden sie der Reihe nach auf den
Stack geschrieben. Da der Stack nach unten wächst, sieht in unserem Beispiel (integer a, floating
point b, byte c) das Speicherlayout folgendermaßen aus:
im Registerpaar R10,R11. Werden Parameter übergeben, so werden sie der Reihe nach auf den
Stack geschrieben. Da der Stack nach unten wächst, sieht in unserem Beispiel (integer a, floating
point b, byte c) das Speicherlayout folgendermaßen aus:
SP+
5
:
a
(typ
integer,
länge
2
)
SP+
1
:
b
(typ
float,
länge
4
)
SP+
0
:
c
(typ
byte,
länge
1
)
Möchte man nun a und c addieren, so findet man a bei SP+5, und c bei SP. Im folgenden Assemb-
ler Code wird der SP (R10,R11) in das Registerpaar Z (R30,R31) kopiert, und dann indirekt über Z
die beiden Parameter a und c geladen.
ler Code wird der SP (R10,R11) in das Registerpaar Z (R30,R31) kopiert, und dann indirekt über Z
die beiden Parameter a und c geladen.
; example for accessing and returning parameter
; we have int proc2(int a, float b, byte 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
Man hat jetzt die beiden Parameter a und c in den Registerpaaren X und R24,R25. Nun kann man
die Zahlen addieren.
die Zahlen addieren.
ADD R24, R26
; add X to R24, R25
ADC R25, R27