Pseudo Opcodes

Pseudo-Opcodes dienen dazu, bestimmte Funktionen während des assemblierens auszuführen, wie zum Beispiel die Startadresse eines Programmes festzulegen, Includedateien einzuladen, Objectfiles zu erzeugen usw.

Die Pseudo-Opcodes unterscheiden sich von den normalen 65(C)02 Opcodes dadurch, daß diese nur aus zwei Buchstaben bestehen. Damit der Assembler diese erkennt, beginnen diese Pseudo-Opcodes mit einem Punkt.

.OR <Adresse> - Originaladresse setzen.

Beisp iele:
.OR $5000
.OR LABEL+$40

Die Originaladresse gibt die Basisadresse an, zu der das folgende Programm assembliert werden soll. Dieser Befehl kann in einem Listing öfter vorkommen, so daß Programmteile an verschiedene Adressen im Speicher abgelegt werden können. Soll sich die Originaladresse auf einen Label beziehen, muß dieser Label bereits schon vorher definiert worden sein. Wird in einem Listing keine Originaladresse angegeben, ist diese Adresse automatisch $4000 .

 

.TA <Adresse> - Targetadresse setzen.

Beispiele:
.TA $3000
.TA LABE L-128

Die Targetadresse gibt an, ab welcher Speicherstelle die Obiectdaten im Speicher abgelegt werden sollen. Dieser Befehl muß auf jeden Fall hinter die Zeile mit dem .OR - Befehl gesetzt werden. Der .OR - Befehl setzt immer die Original- und die Targetadresse auf den gleichen Anfangswert. Wird der Targetbefehl weggelassen, werden die Objectdaten zur Originaladresse in den Speicher abgelegt.

 

.OF "device:name.ext" - Objectfile erzeugen.

Beis piel:
.OF "D:TEST.OBJ"

Die Objectdaten werden nicht mehr in den Speicher abgelegt sondern als Binärfile auf der Diskette abgespeichert. Das Objectfile kann auch aus mehreren Blöcken bestehen, wenn in einem Listing mehrere male der .OR - Befehl verwendet wird. Wird eine Targetadresse im Listing angegeben, erhält der Fileheader des Binärfiles auch die Targetadresse. Die Daten des Binärfiles sind zur Originaladresse hin assembliert. Der .OF - Befehl muß immer der .TA oder der .OR - Anweisung folgen. Diese Reihenfolge ist unbedingt einzuhalten.

Beispiele:
.OR $5000
.OF "D :TEST.COM"

Programm wird nach $5000 assembliert und abgespeichert.

.OR $ A000
.TA $4000
.OF "D:TEST.OBJ"

Programm wird nach $A000 assembliert. Das Objectfile wird erzeugt, daß es nach $4000 eingeladen werden kann.

Kommt in einem Listing mehrfach der OF - Befehl vor, wird das geöffnete Objectfile geschlossen und ein neues Objectfile erzeugt. Hat dieses Objectfile den gleichen Namen wie das vorherige File, wird dieses natürlich vom, neuen Objectfile überschrieben.

 

.NO - Objectdaten nicht im Speicher ablegen.

Hiermit kann ein Programn" zu Testzwecken assembliert werden. Es werden keine Daten im Speicher abgelegt. Dieser Befehl hat keinen Einfluß auf ein Objectfile. Wird die .NO Anweisung mitten in das Listing eingefügt, werden ab dieser Stelle keine Daten menr im Speicher abgelegt.

 

.OB - Objectdaten im Speicher ablegen.

Hiermit wird der .NO - Befehl wieder aufgehoben. Alle Zeilen, die dem .OB-Befehl folgen werden wieder in den Speicher assembliert. Soll das vollständige Listing in den Speicher assembliert werden, muß dieser Befehl nicht eingegeben werden.

 

.LI ON - Listing einschalten.

In PASS 2 des Assembliervorganaes wird jede, diesem Befehl folgende assemblierte Zeile auf den, Bildschirm ausgegeben. Diese Ausgabe enthält die Adresse in die die Daten geschrieben werden, bis 3 Bytes, Zeilennummer, Label, Opcode und Erklärungen.

Diese Funktion wird automatisch aktiviert, wenn der Befehl in einem Listing nicht verwendet wird. Bedingt durch die langsame Textausgabe des ATARI- Betriebssystems wird bei eingeschaltetem Listing die Assemblierzeit eines Programmes um ein vielfaches verlängert.

 

.LI OFF - Listing ausschalten.

Diese Funktion hebt das Listen des Programmes beim assemblieren auf. Alle dem Befehl folgenden Zeilen werder. nicht mehr auf dem Bildschirm ausgegeben. Um die größtmögliche Assemblierzeit eines Programmes zu erreichen, sollte als erste Zeile in einem Listing dieser Befehl stehen.

 

.EN - Assenblierung beenden.

Dieser Befehl kann dazu benutzt werden, um den Assembliervorgang zu stoppen. Alle hinter diesen Befehl liegenden Programmzeilen werden nicht mehr assembliert. Am Ende eines Programmlistings wird automatisch der .EN-Befehl ausgeführt. Wird kein vorzeitiger Abbruch eines Assembliervorganges gewünscht, braucht dieser Befehl in einem Listing nicht eingegeben werden.

 

.HX <Data> - Hexwerte einfügen.

Beispiele:
.HX  FF
.HX 001122334455667788

Die auf den .HX-Befehl folgenden Hexwerte werden in die Obiektdatei eingefügt. Die einzelnen Hexzahlen müssen immer zweistellig sein und dürfen durch kein Zeichen getrennt sein.

 

.DA <Data> - Daten einfügen.

Beispiele:
.DA # $45
.DA #123
.DA /LABEL
.DA "ASCII"
.DA LABEL,#$9B,#$FF

Dieses ist ein Universalbefehl mit dem 8- oder 16-Bit Daten in Dezimaler und Hexadezimaler Form, als ASCII-Zeichen oder als Low- oder High-Byte einer Adresse eingefügt werden können. Mehrere Daten können durch Komma getrennt eingegeben werden. ASCII-Zeichen müssen in Anführungszeichen stehen. Es können auch inverse ASCII-Zeichen eingegeben werden.

 

.AS <"STRING"> - ASCII-Zeichen einfügen.

Beispiele:
.AS " Hallo"
.AS /TEST/
.AS -'Assembler'

ASCII-Zeichen, die sich zwischen den Anführungszeichen befinden, werden in den Objectcode eingefügt. Als Anfangs- und Endkennung eines ASCII-Strings können beliebige Zeichen einqegeben werden. Wichtig ist nur, daß vor und hinter einen String das gleiche Zeichen benutzt wird. Nur wenn die Anführungszeichen (") benutzt werden, kännen auch inverse ASCII-Zeichen eingegeben werden. Soll der gesamte Text Invers dargestellt werden, kann vor dem Trennungszeichen ein Minus-Zeichen (-) eingegeben werden.

 

.AT <"String"> - ATASCII-Zeichen einfügen.

Beispiele:
.AT "Test"
.AT / 'HALLO," wie geht es"
.AT -'COMPUTER'

Für diesen Befehl gelten die gleichen Regeln wie für den vorausgegangenen Befehl .AS. Zwischen den Trennungszeichen befinden sich hier nur ATASCII-Zeichen, die vom Assembier automatisch in den Bildschirmcode umgewandelt werden.

 

.BL Länge,Wert - Speicherblock überspringen oder mit einem Wert füllen.

Beispiele:
.BL 1 000
.BL $200
.BL 100,255
.BL $80,SFF

Der erste Wert hinter der Anweisung .BL gibt die Anzahl der Speicherstellen an die übersprungen oder mit einemWert gefüllt werden sollen. Der zweite Wert gibt an, mit welchemWert die Speicherstellen gefüllt werdern sollen. Wird kein zweiterWert eingegeben, wird der Speicherbereich einfach übersprungen. Der zweite Wert kann nur 8-Bit groß sein, also Werte von 0-255 ($00-$FF) annehmen. Bei einem Datenfile wird ein Speicherbereich der übersprungen wird mit dem Wert 0 aufgefüllt.

 

.IN "device:name.ext" - Includedatei in das Listing einfügen.

Beis piel:
.IN "D:TEIL2.ASM"

Das Includefile wird vollständig mit allen Labels und Befehlen in das Hauptprogramm eingebunden. Die Zeilen einer Includedatei werden an die Stelle in das Listing eingebunden, an der der Befehl .IN steht. Aus einem Includefile kann keine weitere Includedatei aufgerufen werden. Sollte der Speicherplatz knapp werden, kann das Hauptprogram in mehrere kurze Listings aufgeteilt werden, die beim assemblieren als Includefile nachgeladen werden.

 

.DF "device:name.ext" - Datenfile in die Objectdaten einbinden.

Beispiel:
.DF " D:BYTES.DAT"

Die Daten eines Binärfiles werden an dieser Stelle in die Objectdaten eingebunden. Das Binärfile muß den Fileheader, bestehend aus $FF $FF, der Anfangs- und der Endadresse. besitzen. Wird versucht ein anderes als ein Binärfile als Datenfile einzuladen, erscheint die Fehlermeldung "File Type Error".

 

.EQ <Adresse> - Einem Label ein Wert zuweisen.

Beispiele:
LABEL  .EQ $45
LAB2 .EQ LABEL4
COLOR =  $2C6

Einem Label wird ein 8- oder 16-Bit Wert zugewiesen. Das Gleichheitszeichen (=) kann statt des .EQ eingegeben werden, dieses hat die gleiche Funktion. Wichtig: Label müssen direkt am Beginn eines Programmlistings mit .EQ definiert werden. Sollte diese Regel nicht eingehalten werden, kann es vorkommen, daß Labeladressen falsch errechnet werden und das assemblierte Programm nicht ordnungsgemäß abläuft.