Bascom arbeitet mit drei Bereichen: HW-Stack, Software-Stack
und Frame. Beschrieben ist das im „HELP“.
Zusätzlich wird noch das Register r6 für spezielle Flags verwendet
(Bit #2 im Register 6 ist das ERR-Bit)
BasCom verwendet den HW-Stack natürlich für CALL
/ RET / RETI / PUSH und POP, definiert auch zu Beginn den Stackpointer, darüber
hinaus lässt er diesen Stack eigentlich in Frieden. Ich nehme an, daß
BasCom damit auch sein Konzept auch auf Kontrollern anwenden wollte, die den
HW-Stack und HW-Stackpointer isoliert und nicht zugänglich halten |
Es gibt an sich zwei Übergabe-Varianten: BYVAL und BYREF, es wird aber immer BYREF (Addresse von) verwendet, der Unterschied liegt nur darin, dass bei BYVAL die Addresse einer Daten-Kopie statt des Originals übergeben wird. Die Reihenfolge ist von links nach rechts, wobei die Adresse des Ergebnisses (Funktion) als erstes auf den Soft-Stack gelegt wird wird.
Folgenden Deklarationen führen im Programm zum gleichen Code
Declare Function MyFunc (byval Op1
as byte, byval Op2 as byte) as byte
Declare Sub MySub (byref Result as byte , byval Op1 as byte, byval Op2 as
byte)
Die Situation beim Aufruf der Funktion / Sub sieht nun folgendermaßen aus, den HW-Stack nicht berücksichtigend
Die Funktion / Sub findet nun (beim Entry) Verwendet die Funktion / Sub nun selbst den SW-Stack oder das Frame, muß sie das natürlich bei den Y-Offsets berücksichtigen und vor dem Return muß der obige Zustand auch wiederhergestellt werden. |