Assembler-Registerdefines
In Luna sind intern sowie für Inline-Assembler die Defines (Namen) für die Register 0-31 vorbelegt. Sie können in Inline-Assembler mit der Direktive .def nachträglich geändert werden.
Die Register 0-31 sind in Luna in 8 Register-Gruppen unterteilt. Luna nutzt keines der Register als ständig mitgeführten Status oder Pointer. Es können daher sämtliche Register zu jeder Zeit genutzt und verändert werden.
Die Registergruppen:
| Gruppe | Register | Name |
|---|---|---|
| Low A | R0 | _LA0 |
| R1 | _LA1 | |
| R2 | _LA2 | |
| R3 | _LA3 | |
| Low B | R4 | _LB0 |
| R5 | _LB1 | |
| R6 | _LB2 | |
| R7 | _LB3 | |
| Temp 1 | R8 | _TMP0 |
| R9 | _TMP1 | |
| R10 | _TMP2 | |
| R11 | _TMP3 | |
| Temp 2 | R12 | _TMPA |
| R13 | _TMPB | |
| R14 | _TMPC | |
| R15 | _TMPD | |
| High A | R16 | _HA0 |
| R17 | _HA1 | |
| R18 | _HA2 | |
| R19 | _HA3 | |
| High B | R20 | _HB0 |
| R21 | _HB1 | |
| R22 | _HB2 | |
| R23 | _HB3 | |
| Low Pointer | R24 | WL |
| R25 | WH | |
| R26 | XL | |
| R27 | XH | |
| High Pointer | R28 | YL |
| R29 | YH | |
| R30 | ZL | |
| R31 | ZH |
Nutzung der Gruppen
- LA,LB,Temp1 und Temp2: Werden für temporäre Daten innerhalb der internen Funktionen verwendet.
- HA und HB: Werden als allgemeine Arbeitsregister verwendet.
- Low/High-Pointer: Werden als TypeFlags, Array-Index, als Zwischenregister zum Verschieben auf den Stack, als klassische Pointer für den Zugriff auf Speicherbereiche, sowie beim Aufruf und innerhalb von internen Funktionen verwendet.