Ich mache das zum Beispiel so ähnlich , um feste nullterminierte Texte
aus dem Flash auf LCD/Bildschirm auszugeben. Die Routine wird dadurch
zwar etwas aufwändiger, der Aufruf dafür um so einfacher.
1 | outtext: pop ZH ;Rücksprungadresse vom Stack holen
|
2 | pop ZL
|
3 | lsl ZL ;*2 da wir Bytes wollen
|
4 | rol ZL
|
5 | ... ;Daten über Z+ lesen, bei 0x00 abbrechen
|
6 | lsr ZL ;/2 da Befehle wortweise organisiert sind
|
7 | rol ZH
|
8 | ijmp ;Rücksprung
|
Um jetzt einen Text auszugeben, reicht folgender Aufruf:
1 | rcall outtext
|
2 | .db "Hallo Welt",0x00
|
Falls sich eine ungerade Anzahl an Bytes ergibt, wird das normalerweise
vom Assembler (ich benutze avra) mit 0x00 aufgefüllt.
Eine Parameterübergabe über den Stack ist auch möglich, ich finde es
aber besser, dafür einen eigenen Stack über eines der drei Indexregister
X,Y,Z einzurichten, da man auf diese Weise auch leichter feststellen
kann, wieviele Parameter auf dem Stack abgelegt wurden.
Gruß Jörg