In der Bascom Hilfe steht folgendes:

Byval:
Use BYVAL to pass a copy of the variable.
D.h. du erstellst eine Kopie der Variable

Und bei cmd_output as string da deklarierst du die Variable komplett neu.
In beiden Fällen gilt die Variable glaub ich nur für dieses eine Unterprogramm. Bei dem ersten erstellst du für die Subroutine eine Kopie einer bereits exestierenden Variable (z.B. wenn du im Hauptprogramm die Variable X = 1 hast und nicht möchtest das sie im Hauptprogramm verändert werden soll. Aber trotzdem willst du mit dieser Variable in einem Unterprogramm rechnen. Dann erstellst du eine Kopie der Variable.
Und bei dem zweiten deklarierst du eine Variable komplett neu.

Ich hoffe das ist so einigermaßen verständlich und richtig rüber gebracht