Parameter bei BASIC und TURBO PASCAL | |||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BASIC | TURBO PASCAL | ||||||||||||||||||||||||||||||||||||
CALL script(x%,y%,text$) | procedure MCODE(x,y:byte;var msg:longstr); external $F000; | ||||||||||||||||||||||||||||||||||||
[Aus dem JOYCE BASIC Handbuch:]
Das Kommando CALL spezifiziert die Adresse des Unterprogramms, optional gefolgt von einer Liste von Parametern.
Die Adresse darf nur durch den Wert einer Variablen (auch eines Feldelements), nicht aber durch einen Ausdruck angegeben werden.
Variablen werden in der Weise übergeben, daß die Adresse des Wertes jedes Parameters übergeben wird; für einen String ist dieser Wert der String-Bezeichner. Anzahl und Typ der Parameter müssen im BASIC-Programm und in der Subroutine übereinstimmen; die Übereinstimmung wird nicht geprüft. Wenn möglich, werden die Adressen in Register übernommen, anderenfalls werden sie in einen Bereich des Speichers eingetragen. Für Mallard-80 sind die Eingabebedingungen:
|
Die Prozedur script wird mit dem auf dem Stack abgelegten Text aufgerufen.
Diese wiederum ruft die Prozedur MCODE auf, wobei nun der Text als Adressreferenz übergeben wird, was die Verabeitung der Parameter vereinfacht.
Zu beachten ist, dass die Parameter in umgekehrter Reihenfolge vom Stack abgeholt werden müssen.
| ||||||||||||||||||||||||||||||||||||
Parameterübergabe in BASIC | Parameterübergabe in TURBO PASCAL | ||||||||||||||||||||||||||||||||||||
aufruf: ld l,(hl) ; x-Position ld a,(de) ld h,a ; y-Position dec l dec h ld (xypos),hl ld l,c ld h,b ; Zeiger auf Stringdeskriptor ld a,(hl) ; Stringlaenge or a ret z ; -> zurueck, falls Stringlaenge 0 ld c,a ld b,0 ld (strlen),a ; Stringlaenge speichern inc hl ld a,(hl) inc hl ld h,(hl) ld l,a ; hl = Stringadresse ld de,string ldir ; String in Common-Bereich uebertragen ld bc,rout ; Adresse der aufzurufenden Routine call xbios dw 00e9h ; Screen-Environment einschalten ret ; zurueck zu Basic |
aufruf: pop iy pop de ; Zeiger auf String pop bc ; y-Position pop hl ; x-Position ld h,c push iy dec l dec h ld (xypos),hl ex de,hl ; Zeiger auf String ld a,(hl) ; Stringlaenge or a ret z ; -> zurueck, falls Stringlaenge 0 ld c,a ld b,0 ld (strlen),a ; Stringlaenge speichern inc hl ; hl = Stringadresse ld de,string ldir ; String in Common-Bereich uebertragen ld bc,rout ; Adresse der aufzurufenden Routine call xbios dw 00e9h ; Screen-Environment einschalten ret ; zurueck zu TURBO PASCAL | ||||||||||||||||||||||||||||||||||||
[TURBO PASCAL source] | [Assembler source] |