GW-BASIC
6. Zeichenfolgen können von Benutzerroutinen geändert wer
den, die Länge darf jedoch nicht geändert werden. MS-
BASIC kann Zeichenfolgen nicht richtig verarbeiten, wenn
deren Länge durch externe Routinen geändert wird.
Beispiel für eine CALL-Anweisung:
100 DEF SEG = &H8000
110 F 0 0 = & H 7 F A
120 C A L L F 0 0 (A ,B £ ,C )
In Zeile 100 wird das Segment auf H8000 gesetzt. Der Wert der
Variablen F00 wird als unterstes Wort zu der Adresse hinzugefügt,
nachdem der DEF SEG-Wert um 8 Bits nach links geschoben wur
de. (Hier handelt es sich um eine Funktion des Mikroprozessors
und nicht um eine Funktion von MS-BASIC). Hier wird F00 auf
& H 7 F A gesetzt, so daß durch Au fruf von F00 die Subroutine in
der Adresse 8000:7 F A Hex (absolute Adresse 807FA Hex) aus
geführt wird.
Die folgende Routine in der 8086 Assemblersprache zeigt den
Zugriff zu den übergebenen Parameters. Das Rückgabeergebnis
wird in der Variablen " C " gespeichert.
MOV
BP, SP
B X ,6 [B P ]
M OV
M OV
CL,[BS]
DX, 1[BX]
M O V
M OV
SI, 8[BP]
M OV
D I,4[B P]
M OV
WORD
R ET
6
HINWEIS: Das aufgerufene Programm muß den Variablentyp für
die übergebenen numerischen Parameter kennen. In dem vor
hergehenden Beispiel kopiert der Befehl
MOVS WORD
nur zwei Bytes. Dies ist in Ordnung, wenn es sich bei den
Variablen A und C um Ganzzahlen handelt. Es müssen jedoch
; Aktuelle Stapelposition in BP ermitteln.
; Adresse von B$ ermitteln.
; Länge von B$ in CL ermitteln.
; Adresse des B$ Textes in DX ermitteln.
; Adresse von ' A ' in SI ermitteln.
; Zeiger zu ' C' in DI ermitteln.
; Variable 'A ' in ' C' speichern.
; Stapel wieder herstellen, Rücksprung.
MS-DOS ERW EITE R U N G
5-5