003
08.02.2016, 13:38 Uhr
Heiko_P
|
Hallo,
falls es noch jemanden interessiert 
Die Übergabe von Parametern ist in den verschiedenen Dokumentationen unterschiedlich und nicht immer leicht verständlich beschrieben. Ich möchte hier - ohne Aspruch auf Vollständigkeit - das von mir praktisch getestete Verfahren vorstellen.
Der Aufruf des Programms erfolgt mit CALL <PROGRAMM> (Parameter1,Parameter2,…)
Die Parameter werden im Basic als INTEGER-Werte definiert und können Variablen zugewiesen werden. Damit können keine Zeichenketten oder Datenfelder übergeben werden. Die Anzahl der zu übergebenden Parameter wird vom Basic nicht übermittelt. Der Programmierer muss dafür sorgen, dass die Anzahl der von Basic übergebenen und vom aufgerufenen Programm erwarteten Parameter übereinstimmen, anderenfalls entstehen Fehler die vom Basic nicht gemeldet werden.
Die Übergabe der Parameter erfolgt mittels Zeigern auf ein Datenfeld, in dem der jeweilige Parameter als Gleitkommazahl gespeichert ist. Bei der Übergabe von 1 bis 3 Parametern befinden sich die Zeiger in den Registern HL (1. Parameter), DE (2. Parameter, falls vorhanden) und BC (3. Parameter, falls vorhanden). Bei der Übergabe von 4 und mehr Parametern wird in BC eine Adresse übermittelt, die auf eine Liste zeigt, in der die Adressen der Parameter 3 bis n zu finden sind.
Die Umwandlung der Gleitkommazahl aus dem Datenfeld in einen 16 Bit Binärwert kann mittels des folgenden Programmschnipsels erfolgen:
Quellcode: | ; ; BASI-Parameter in Binaerwert konvertieren ; INP: HL = Zeiger auf Datenfeld ; OUT: HL = Parameter ; bkonv: push de inc hl ;erstes Byte ueberspringen ld e,(hl) inc hl ld a,(hl) or 80h ld d,a inc hl ld a,(hl) and 7Fh ;erstes Bit maskieren jr nz,bkon1 ;und Test auf 00 ld hl,0 jr bkon3 bkon1: ld b,a and a ;CY ruecksetzen ld hl,0 bkon2: rl e ;Byte ueber CY schieben rl d rl l rl h djnz bkon2 bkon3: pop de ret ;
|
Gruß Heiko Dieser Beitrag wurde am 08.02.2016 um 13:38 Uhr von Heiko_P editiert. |