AcornSearch - Acorn and RISC OS information searching
RISC OS Search
containing
"Nutty quip goes here!"
Home  |  About  |  Filebase Archive  |  StrongHelp Manuals  |  Newsgroups  |  Module Database
Inhalt   <<   <   >   >>   Index

Anweisung zur Ausführung eines Unterprogramms in Maschinensprache.

Syntax:          CALL Ausdruck[,VariableŒ]

Argumente:     Ausdruck ist die Adresse der aufzurufenden Routine. Die Parameter-Variablen, wenn vorhanden, können von einem beliebigen Typus sein, und müssen bei Ausführung von CALL bereits existieren. Der Zugriff erfolgt über einen von BASIC eingerichteten Parameterblock. Das Format dieses Parameterblocks und der durch ihn erreichbaren Variablen wird im folgenden beschrieben.

Zweck:          CALL kann dazu dienen, ein Maschinencodeprogramm von BASIC aus einzugeben. Vor Aufruf der Routine werden die ARM-Register wie folgt gesetzt:

          R0     A%
          R1     B%
          R2     C%
          R3     D%
          R4     E%
          R5     F%
          R6     G%
          R7     H%
          R8     Zeiger auf BASIC Arbeitsbereich (ARGP)
          R9     Zeiger auf Liste von l-Werten der Parameter
          R10     Anzahl der Parameter
          R11     Zeiger auf den BASIC String-Akkumulator (STRACC)
          R12     BASIC LINE Zeiger (zeigt auf die aktuelle Anweisung)
          R13     Zeiger auf den 'full, descending' BASIC Stapels
          R14     Verbindung zurück auf BASIC und Umgebungsinformationszeiger

Format des     CALL Parameterblocks: R9 zeigt auf eine Liste, die Details aller Variablen enthält, die als Parameter an CALL übergeben werden. Dabei werden für jede Variable zwei Wort-ausgerichtete Wörter verwendet, von denen das erste der l-Wert des Parameters ist. Dies ist die Adresse im Speicher, an der der Variablenwert abgelegt ist.

          Das zweite Wort ist der Typ der Variablen. Diese Liste ist in umgekehrter Reihenfolge, so daß der mit dem Zeiger R9 angesprochene l-Wert dem letzten Parameter in der Liste entspricht. Der Zeiger, der auf die Liste zeigt, ist immer gültig, auch wenn die Liste Null ist (d.h. wenn R10 Null enthält). Hier die Zusammenstellung der möglichen Typen. Im folgenden bedeutet FP:Floating Point (Gleitkomma) und SIB:String Information Block.

          Typ     BASIC     l-Wert zeigt auf
          &00          ?Faktor          byte-ausgerichtetes Byte
          &04          !Faktor          byte-ausgerichtetes Wort
          &04          name%          wort-ausgerichtetes Wort
          &04          name%(n)     wort-ausgerichtetes Wort
          &05          aktor          byte-ausgerichteter FP-Wert (5 Byte)
          &05          name          byte-ausgerichteter FP-Wert (5 Byte)
          &05          name(n)          byte-ausgerichteter FP-Wert (5 Byte)
          &80          name$          byte-ausgerichteter SIB (5 Byte)
          &80          name$(n)     byte-ausgerichteter SIB (5 Byte)
          &81          $Faktor          byte-ausgerichteter Byte-String (mit CR-Abschluß)
          &100+&04     name%()          wort-ausgerichteter Array-Zeiger
          &100+&05     name()          wort-ausgerichteter Array-Zeiger
          &100+&80     name$()          wort-ausgerichteter Array-Zeiger

          Für die Typen &00, &04 und &05 zeigt die Adresse auf das effektive Byte, auf die vier-Byte Ganzzahl oder den fünf-Byte Fließkomma Wert.

          Für den Typ &80 zeigt die Adresse auf einen fünf-Byte String-Informationsblock. Die ersten vier Byte sind ein byte-ausgerichtetes Wort, das auf das erste Zeichen des Strings zeigt, das auf einer Wortgrenze liegt, gefolgt von einem Byte mit der Länge des Strings.

          Für die Typen &100+n zeigt der Wert auf ein wort-ausgerichtetes Wort. Wenn das Array nicht zugewiesen wurde bzw. als LOCAL definiert, aber nicht DIMensioniert wurde, enthält dieses Wort einen Wert von weniger als 16. Andernfalls zeigt das Wort auf eine wort-ausgerichtete Liste mit Integer-Indexgrößen (die Werte der DIM Anweisung plus 1), abgeschlossen durch ein Null-Wort, gefolgt von einem Wort, das die gesamte Anzahl der Einträge im Feld enthält, gefolgt vom Null-ten Element des Array. Beachten Sie zur Veranschaulichung dieses Programm:

           10 DIM a(10,20)
          
 20 a=12.3
          
 30 a$="char"
          
 Œ
          
100 CALL code,a,a(),a$


Weiteres entnehmen Sie bitte dem BBC Basic Handbuch auf Seite 329ff.

[sh-index] Back to list of manuals