BasCom Standard


Stacks & Frame

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
Natürlich befinden sich diese Bereiche alle im SRAM. In der Folge möchte ich aber zur Unterscheidung den Begriff SRAM nur für das „Datenbereich“ verwenden, die andern dagegen mit FRAME, SW-STACK u. ggf mit HW-STACK bezeichnen.


Call Function/Sub
Die Parameter an die Funktion / Sub werden über den Softstack übergeben.
Außer für den eigentlichen CALL der Function / Sub wird der HW-Stack hier nicht verwendet.

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)
OP2 auf Y + 0/1
OP1 auf Y + 2/3
Result auf Y + 4/5

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.