Die Verwendung von Byval/Byref habe ich gerade durch Ausprobieren verstanden:
Code:
Dim X as Byte
Dim Ergebnis as Byte

Declare Function abc (a as Byte) as Byte

Do

     Ergebnis = abc(x)

Loop

Function abc (a as Byte)

     Shift a , left , 2
     abc = a

End Function

End
Diese Variante verändert beim zweimaligen Schieben der übergebenen Variable a ebenfalls die globale (Ursprungs-) Variable x, da ja die Variable gar nicht "real" an die Funktion übergeben wurde, sondern nur die Adresse der Variable x. Das ist warscheinlich schnell und speichersparend, aber in diesem Fall doof und unerwünscht.

Mit der Verwendung von byval wird x einfach kopiert und dieser Klon wird dann in der Funktion geschoben und wieder zurückkopiert.

Dazu noch eine Frage: Wird der Speicher nach verlassen der Funktion wieder freigegeben?

Schön langsam wirds ja...