Assembler

Im Emulator ist ein Assembler integriert, den Sie über den Texteditor aufrufen können, d.h., den Assembler-Quelltext öffnen, bearbeiten und assemblieren Sie im Texteditor. Alternativ kann der Assembler auch als eigenständiges Kommandozeilenprogramm aufgerufen werden (siehe Kommandozeile).

Die Beschreibung des Assemblers unterteilt sich in folgende Rubriken:

1. Assembler-Optionen

Mit den Assembler-Optionen beeinflussen Sie die Arbeitsweise des Assemblers, insbesondere hinsichtlich der unterstützten Mnemonik und Syntax sowie was mit dem erzeugten Programmcode geschehen soll. Die Assembler-Optionen stellen Sie in einem Fenster ein, dass beim erstmaligen Starten des Assemblers erscheint. Außerdem können Sie die Optionen jederzeit mit dem Menüpunkt Assemblieren mit... aufrufen und verändern.

Die Optionen sind selbsterklärend. Eine Erläuterung findet man jedoch im Abschnitt Kommandozeile. Entgegen der dortigen Beschreibung wird jedoch beim Aufruf des Assemblers aus dem Texteditor heraus das optionale Assembler-Listing nicht in eine Datei geschrieben, sondern im Texteditor angezeigt und kann dort manuell gespeichert werden.

In den Assembler-Optionen können Sie u.a. auch eine Datei angeben, in der der erzeugte Programmcode geschrieben wird. Das Format der Datei ergibt sich dabei aus der Dateiendung (*.tap ergibt eine KC-TAP-Datei).

Achtung! Bei KCC-, KCM- und KC-TAP-Dateien gibt es Unterschiede zwischen KC85/1, KC87 und Z9001 auf der einen sowie HC900 und KC85/2..5 auf der anderen Seite. Damit der Assembler das richtige Dateiformat erzeugt, orientiert er sich am gerade emulierten System. Emuliert JKCEMU gerade einen KC85/1, KC87 oder Z9001, wird in den Dateikopf der Dateityp COM eingetragen und bei KC-TAP-Dateien mit der Blocknummer 0 begonnen. In allen anderen Fällen wird kein Dateityp eingetragen. Außerdem beginnen dann KC-TAP-Dateien entsprechend den HC900- und KC85/2..5-Konventionen mit der Blocknummer 1.

Wenn Sie mehrere Assembler-Quelltexte im Texteditor geöffnet haben, werden die Assembler-Optionen für jeden Quelltext separat verwaltet.

2. Assembler-Ausgaben und Fehlermeldungen

Alle Assembler-Ausgaben, d.h. Meldungen über den Abarbeitungsfortschritt, Fehlermeldungen, Warnungen und, sofern in den Assembler-Optionen angegeben, die Ausgabe der Markentabelle erscheinen in einem separaten Fenster, dass mit jedem Start des Assembler geöffnet beziehungsweise auf dem Desktop nach vorn geholt wird. Auf Fehlermeldungen und Warnungen können sie doppelt klicken, um direkt zu der betreffenden Stelle im Quelltext zu gelangen.

3. Allgemeine Syntax

3.1. Groß- und Kleinschreibung

Der Assembler unterscheidet außer bei Zeichen- und Zeichenkettenliteralen nicht zwischen Groß- und Kleinschreibung, d.h., die Mnemonik der Befehle und die Register können sowohl groß als auch klein geschrieben werden. Bei den Marken gibt man in den Assembler-Optionen an, ob zwischen Groß- und Kleinschreibung unterschieden werden soll.

3.2. Aufbau einer Assembler-Quelltextzeile

Die allgemeine Syntax einer Quelltextzeile lautet:

[Marke[:]] [Mnemonik [Argument_1[,Argument_2[,...]]]] [;Kommentar]


In eckigen Klammern stehende Ausdrücke sind optional. Eine Marke muss am Anfang einer Zeile beginnen. Ein Assembler-Befehl (angegeben durch eine Mnemonik) darf nicht am Anfang einer Zeile beginnen, d.h., wenn die Zeile keine Marke enthält, muss vor der Mnemonik mindestens ein Leerzeichen oder ein Tabulator stehen. Eine Ausnahme bilden die Anweisungen für die bedingte Assemblierung. Diese können am Zeilenanfang stehen, aber auch eingerückt werden.

3.3. Marken

Marken haben einen numerischen Wert und werden definiert, indem sie am Anfang einer Assembler-Zeile stehen. Wenn diese Zeile den Pseudobefehl EQU enthält, bekommt die Marke den Wert des hinter EQU stehenden Ausdrucks, anderenfalls den Wert der aktuellen Adresse.

Marken können als Sprungziele oder in numerischen Ausdrücken verwendet werden.

Marken können Buchstaben, Ziffern, den Unterstrich, das @-Zeichen sowie Fragezeichen enthalten. Ziffern und das Fragezeichen sind aber nicht am Anfang der Marke erlaubt.

Achtung! Der Assembler legt zur Unterstützung der bedingten Assemblierung automatisch immer die Marke __JKCEMU__ mit dem Wert -1 (alle Bits gesetzt) an.

3.4. Assembler-Befehle

Die Assembler-Befehle werden in Form einer Mnemonik geschrieben. Der Assembler versteht folgende Befehle:

3.5. Kommentare

Kommentare beginnen mit einem Semikolon. Alles ab dem Semikolon bis zum Ende der Quelltextzeile wird als Kommentar gewertet und vom Assembler nicht ausgewertet. Dies gilt jedoch nicht, wenn das Semikolon in einen Zeichenliteral oder einem Zeichenkettenliteral steht. In dem Fall markiert das Semikolon keinen Kommentar.

4. Pseudobefehle

Der Assembler versteht folgende Pseudobefehle:
Mnemonik Anzahl der Argumente Typ der Argumente Beschreibung
ALIGN 1 oder 2 Numerischer Ausdrücke Ausrichten der aktuellen Adresse auf eine Zweierpotenz, also z.B. auf 2, 4, 8, 16, usw.
Beispiel:
  ORG 8000H
  DB 1
  ALIGN 100H  ;Aktuelle Adresse jetzt 8100H


Optional kann als zweites Argument auch das Byte angegebene werden, mit dem aufgefüllt werden soll:
  ORG 8000H
  DB 1
  ALIGN 4,0FFH  ;Es werden 3 Bytes FFh eingefuegt.
BINCLUDE 1 Zeichenkette Einbinden einer Binärdatei,
Die angegebene Datei wird unverändert an der aktuellen Stelle in den erzeugten Programmcode eingefügt. Der Dateiname kann ohne oder mit Pfad angegeben werden, wobei sowohl ein absoluter als auch ein relativer Pfad erlaubt sind. Die Pfadaangabe muss den Regeln des Betriebssystems entsprechen, auf dem JKCEMU läuft. Unabhängig davon kann aber ein relativer Pfad auch in einer betriebssystemunabhängigen Form (also auch unter Windows) mit einem Slash (/) als Pfadtrennzeichen angegeben werden.
CPU 1 Schlüsselwort U880, U880UNDOC, Z80 oder Z80UNDOC Angabe des Prozessortyps,
Die vier möglichen Schlüsselwörter können auch als eigenständige Pseudobefehle geschrieben werden. Dort ist auch die Bedeutung erläutert.
DB
DEFB
DEFM
DFB
mindestens 1 Numerische Ausdrücke oder Zeichenketten Datenbytes erzeugen
DEFH
DFH
HEX
mindestens 1 Hexadezimalzahlen,
Es können Hexadezimalzahlen auch ohne führende Null und ohne abschließendes H angegeben werden.
Beispiel: DEFH AB
Datenbytes erzeugen
DEFS
DFS
DS
mindestens 1 Numerische Ausdrücke Speicherbereich reservieren,
Steht der Befehl am Anfang oder am Ende des Quelltextes, wird der Speicherbereich zwar reserviert, d.h. die Adressen mitgezählt, jedoch wird kein Programmcode erzeugt. Steht dagegen der Befehl mitten im Quelltext, wird der Bereich mit Nullbytes aufgefüllt.
DA
DEFW
DFW
DW
mindestens 1 Numerische Ausdrücke Datenwörter (jeweils 2 Bytes) erzeugen
END 0 Ende des Quelltextes bzw. der Quelltextdatei,
Alle weiteren Zeilen des Quelltextes bzw. der aktuellen Quelltextdatei werden ignoriert. Steht der Befehl in einer mit INCLUDE eingebundenen Datei, wird diese eingebundene Datei beendet und der Assembler setzt mit der nächsten Zeile hinter dem zugehörigen INCLUDE-Befehl fort.
ENT
ENTRY
0 Eintrittspunkt in das Programm,
Die aktuelle Adresse wird als Startadresse verwendet. Fehlt der Befehl im Quelltext, gilt die Anfangsadresse als Startadresse.
EQU 1 Numerischer Ausdruck Marke definieren,
Die Quelltextzeile muss eine Marke enthalten, die mit dem angegebenen Wert definiert wird.
ERROR 1 Zeichenkette Die angegebene Zeichenkette wird als Fehler ausgegeben. Der Pseudobefehl ERROR ist i.d.R nur in Verbindung mit bedingter Assemblierung sinnvoll, um z.B. bei nicht erfüllten Bedingungen einen Fehler zu melden:
  IF $ > 800h
    ERROR 'Programmcode zu gross fuer 2K-EPROM'
  ENDIF
EVEN 0 Ausrichten der aktuellen Adresse auf einen geraden Wert,
Der Befehl hat die gleiche Wirkung wie:
  ALIGN 2
INCLUDE 1 Zeichenkette Einbinden einer Quelltextdatei,
Die angegebene Datei wird an der aktuellen Stelle in den Quelltext eingefügt und mit assembliert. Bzgl. des Dateinamens gelten die gleichen Regeln wie beim weiter oben beschriebenen Pseudobefehl BINCLUDE.
NAME 1 Zeichenkette Festlegen des Programmnamens,
Die einzige Wirkung des Befehls ist, dass beim Speichern des erzeugten Programmcodes in eine Datei der angegebene Name als Dateiname in die Datei geschrieben wird, sofern das Dateiformat einen Namen unterstützt.
NEWPAGE 0 Im Assembler-Listing wird ein Seitenumbruchzeichen 0Ch (Form Feed) eingefügt und ein neuer Tabellenkopf erzeugt. Die Zeile mit dem NEWPAGE steht auf der neuen Seite.

Achtung! Der JKCEMU-Texteditor hat keine Seitenverwaltung und stellt deshalb das eingefügte Seitenumbruchzeichen als einzelnes Zeichen dar. Abhängig von der verwendeten Schriftart ist dieses Zeichen möglicherweise nicht sichtbar. Beim Drucken werden allerdings die Seitenumbruchzeichen ausgewertet und führen zu jeweils einer neuen Seite.
ORG 1 Numerischer Ausdruck Programmzähler (Adresse) auf den angegebenen Wert setzen,
Steht der Befehl mitten im Quelltext, wird der Bereich zwischen der letzten und der neuen Adresse mit Nullbytes aufgefüllt.
PAGE 0 PAGE ist ein Synonym für NEWPAGE und hat deshalb die gleiche Wirkung wie NEWPAGE.
TITLE 1 Zeichenkette Festlegen des Titels bzw. des Programmnamens,
Der Befehl TITLE ist ein Synonym für den Pseudobefehl NAME und hat somit auch die gleiche Bedeutung wie dieser.
U880 0 Der Pseudobefehl U880 erlaubt ausschließlich die Robotron-Mnemonik/-Syntax und überschreibt damit die eingestellten Assembler-Optionen in der Gruppe Mnemonik/Syntax. Der Befehl hat die gleiche Bedeutung wie:
  CPU U880
U880UNDOC 0 Der Pseudobefehl U880UNDOC erlaubt die Robotron-Mnemonik/-Syntax sowie undokumentierte Befehle. Die eingestellten Assembler-Optionen in der Gruppe Mnemonik/Syntax werden damit überschrieben. Der Befehl hat die gleiche Bedeutung wie:
  CPU U880UNDOC
Z80 0 Der Pseudobefehl Z80 erlaubt ausschließlich die Zilog-Mnemonik/-Syntax und überschreibt damit die eingestellten Assembler-Optionen in der Gruppe Mnemonik/Syntax. Der Befehl hat die gleiche Bedeutung wie:
  CPU Z80
Z80UNDOC 0 Der Pseudobefehl Z80UNDOC erlaubt die Zilog-Mnemonik/-Syntax sowie undokumentierte Befehle. Die eingestellten Assembler-Optionen in der Gruppe Mnemonik/Syntax werden damit überschrieben. Der Befehl hat die gleiche Bedeutung wie:
  CPU Z80UNDOC

Alle Pseudobefehle können auch mit einem vorangestellten Punkt geschrieben werden, z.B. .ORG, .DB und so weiter. In dem Fall darf der Pseudobefehl auch am Zeilenanfang stehen.

5. Mnemonik und Syntax: Zilog oder Robotron?

Robotron hat bei einigen Assembler-Befehlen eine von Zilog abweichende Mnemonik eingeführt, teilweise auch eine abweichende Syntax. Der JKCEMU-Assembler unterstützt beide Varianten. In den Assembler-Optionen können Sie aber auch einstellen, dass entweder nur die Zilog- oder nur die Robotron-Mnemonik/-Syntax zugelassen ist.

Die Mnemonik unterscheidet sich bei folgenden Befehlen:
Assembler-Befehl Zilog-Mnemonik Robotron-Mnemonik
bedingte CALL-Befehle CALL Z
CALL NZ
CALL C
CALL NC
CALL PE
CALL PO
CALL M
CALL P
CAZ
CANZ
CAC
CANC
CAPE
CAPO
CAM
CAP
Vergleichsbefehle CP CMP
Austauschbefehl mit AF EX AF,AF' EXAF
Eingabebefehl: Nur Flag-Register von Zilog nicht dokumentiert INF
unbedingter absoluter Sprung JP JMP
bedingte absolute Sprünge JP Z
JP NZ
JP C
JP NC
JP PE
JP PO
JP M
JP P
JPZ
JPNZ
JPC
JPNC
JPPE
JPPO
JPM
JPP
bedingte relative Sprünge JR Z
JR NZ
JR C
JR NC
JRZ
JRNZ
JRC
JRNC
bedingte Rückkehrbefehle RET Z
RET NZ
RET C
RET NC
RET PE
RET PO
RET M
RET P
RZ
RNZ
RC
RNC
RPE
RPO
RM
RP


Die Syntax unterscheidet sich bei folgenden Befehlen:
Assembler-Befehl Zilog-Syntax Robotron-Syntax Erläuterung
Eingabebefehle IN r,(C) IN r r: Register A, B, C, D, E, H oder L
Ausgabebefehle OUT (C),r
OUT (n),A
OUT r
OUT n
r: Register A, B, C, D, E, H oder L
n: numerischer Ausdruck
8-Bit-Befehle:
  • ADD
  • ADC
  • SBC
ADD A,x
ADC A,x
SBC A,x
ADD x
ADC x
SBC x
x: entweder:
  • numerischer Ausdruck oder
  • Register A, B, C, D, E, H, L oder
  • (HL) oder
  • (IX+d) oder
  • (IY+d)


6. Undokumentierte Prozessorbefehle

Einige Operationscodes führen im Mikroprozessor Befehle aus, die vom Hersteller nicht dokumentiert sind. Dabei verhält sich der Prozessor U880 genau so wie die Z80 CPU.

Der Assembler unterstützt diese undokumentierten Befehle, wenn Sie das in den Assembler-Optionen so festlegen. Da die Befehle weder von Zilog noch von Robotron dokumentiert sind, existiert auch keine offizielle Mnemonik beziehungsweise Syntax. Aus diesem Grund sind Mnemonik und Syntax dieser undokumentierten Prozessorbefehle spezifische Eigenheiten des JKCEMU-Assemblers und werden nachfolgend beschrieben.

6.1. Zugriff auf die einzelnen Bytes der Index-Register

Viele 8-Bit-Register-Befehle können auch auf das niederwertige beziehungsweise höherwertige Byte der beiden Indexregister angewendet werden. Dabei versteht der Assembler folgende Namen für die Index-Teilregister:
TeilregisterName
Niederwertiges Byte von IX: IXL oder LX
Höherwertiges Byte von IX: IXH oder HX
Niederwertiges Byte von IY: IYL oder LY
Höherwertiges Byte von IY: IYH oder HY


Folgende Befehle sind möglich:
Mnemonik und Syntax mit IXH Erläuterung
LD IXH,n
LD IXH,r
LD IXH,IXH
LD IXH,IXL
n: numerischer Ausdruck
r: Register A, B, C, D oder E
LD r,IXH r: Register A, B, C, D oder E
ADD A,IXH
ADC A,IXH
SUB IXH
SBC A,IXH
AND IXH
XOR IXH
OR IXH
CP IXH
INC IXH
DEC IXH

Anstelle von IXH sind auch IXL, IYH, IYL sowie die alternativen Schreibweisen HX, LX, HY und LY möglich.

6.2. Eingabebefehl: Nur Flag-Register setzen

Der Befehl liest ein Byte vom Eingabetor, dessen Adresse im Register C steht und setzt das Flag-Register entsprechend. Der eingelesene Wert selbst wird nicht behalten.
Mnemonik und Syntax
IN F,(C)
IN (C)

Achtung: Robotron hat diesen Befehl mit der Mnemonik INF dokumentiert. Diese Mnemonik wird vom Assembler somit auch als ein offizieller Befehl verstanden.

6.3. Logischer Linksschiebebefehl

Der Befehl schiebt das Argument um ein Bit nach links, wobei das Bit 0 danach auf 1 gesetzt ist.
Mnemonik und Syntax Erläuterung
SLL r
SLL (HL)
SLL (IX+d)
SLL (IY+d)
r: Register A, B, C, D, E, H oder L


6.4. Rotations-, Schiebe- und Einzelbitbefehle mit Indexregistern, die auch auf ein anderes Register wirken

Die offiziell dokumentierten Rotations-, Schiebe- und Einzelbitbefehle, die auf ein Byte im Arbeitsspeicher angewendet werden, welches durch indirekte Adressierung mit einem Indexregister und Distanzangabe bestimmt wird, können auch auf ein Register wirken, welches als zusätzliches Argument anzugegeben ist. Das gilt auch für den undokumentierten SLL-Befehl.
Mnemonik und Syntax Erläuterung
RLC (IX+d),r
RRC (IX+d),r
RL (IX+d),r
RR (IX+d),r
SLA (IX+d),r
SRA (IX+d),r
SLL (IX+d),r
SRL (IX+d),r
RES b,(IX+d),r
SET b,(IX+d),r
r: Register A, B, C, D, E, H oder L
b: 0 bis 7

Anstelle von IX kann auch IY angegeben werden. Die Befehle haben die gleiche Wirkung wie die offiziell dokumentierten Befehle ohne die zusätzliche Registerangabe, nur mit dem Unterschied, dass sie auch auf das zusätzlich angegebene 8-Bit-Register wirken.

7. Numerische Ausdrücke

Numerischen Ausdrücke kommen überall dort zur Anwendung, wo ein numerischer Wert benötrigt wird. Beim Assemblerbefehl

  LD A,3

ist z.B. die 3 ein numerischer Ausdruck, und zwar konkret ein Zahlenliteral. Numerische Ausdrücke können aber auch komplexer sein und Operationen, Funktionen, Zeichenliterale und Marken enthalten. Außerdem können numerische Ausdrücke mit runden Klammern beliebig geschachtelt werden.

7.1. Zahlenliteral

Zahlenliterale beginnen mit einer Ziffer und können mit einem Buchstaben enden, der die Basis der Zahl angibt. Folgende Buchstaben sind dabei möglich:
Abschließender Buchstabe Basis der Zahl Bemerkung
nicht vorhanden10Dezimalzahl
B, oder b2Binärzahl
O, o, Q oder q8Oktalzahl
H oder h 16 Hexadezimalzahl, muss mit einer Ziffer (z.B. 0) beginnen!

Hexadezimalzahlen können auch in zwei anderen Syntax-Varianten geschrieben werden:
Beispiele:
BeispielDezimaler Wert
123123
101b5
123q83
0AFh175
%AF175
X'AF'175


7.2. Zeichenliteral

Ein Zeichenliteral ist ein in einfachen Hochkommas eingeschlossenes Zeichen, z.B. 'A'. Ein Zeichenliteral kann innerhalb eines numerischen Ausdrucks verwendet werden.

7.3. Funktionen

Der Assembler bietet Funktionen für den Zugriff auf das niederwerte und höherwertige Byte eines numerischen Wertes.
Zugriff aufSyntax
HIGH(...) Zugriff auf höherwertiges Byte
LOW(...) Zugriff auf niederwertiges Byte


7.4. Unäre Operatoren

Unäre Operatoren wirken auf den nachfolgenden Ausdruck.
OperatorBeschreibung
+ Vorzeichen
Der nachfolgende Wert wird nicht verändert.
- Vorzeichen
Der nachfolgende Wert wird mathematisch negiert.
NOT Der nachfolgende Wert wird bitweise negiert


7.5. Binäre Operatoren

Binäre Operatoren stehen zwischen zwei Ausdrücken.
OperatorBeschreibung
+Addition
-Subtraktion
*Multiplikation
/Division
MOD Module - Rest der Division
AND bitweise UND-Verknüpfung
OR bitweise Inklusiv-ODER-Verknüpfung
XOR bitweise Exklusiv-ODER-Verknüpfung
<<
SHL
links schieben
Der vor dem Operator stehende Wert wird um soviele Bits nach links geschoben, wie der Wert hinter dem Operator angibt.
>>
SHR
links schieben
Der vor dem Operator stehende Wert wird um soviele Bits nach rechts geschoben, wie der Wert hinter dem Operator angibt.
<
LT
Vergleich auf kleiner als
Ist der erste Wert kleiner als der zweite, ergibt das den Wert -1 (alle Bits gesetzt), anderenfalls 0.
<=
LE
Vergleich auf kleiner oder gleich
Ist der erste Wert kleiner oder gleich dem zweiten, ergibt das den Wert -1 (alle Bits gesetzt), anderenfalls 0.
>
GT
Vergleich auf größer als
Ist der erste Wert größer als der zweite, ergibt das den Wert -1 (alle Bits gesetzt), anderenfalls 0.
>=
GE
Vergleich auf größer oder gleich
Ist der erste Wert größer oder gleich dem zweiten, ergibt das den Wert -1 (alle Bits gesetzt), anderenfalls 0.
=
EQ
Vergleich auf Gleichheit
Ist der erste Wert gleich dem zweiten, ergibt das den Wert -1 (alle Bits gesetzt), anderenfalls 0.
<>
NE
Vergleich auf Ungleichheit
Ist der erste Wert ungleich dem zweiten, ergibt das den Wert -1 (alle Bits gesetzt), anderenfalls 0.

Binäre Operatoren haben eine geringere Bindungskraft als unäre. Innerhalb der binäre Operatoren gibt folgende Tabelle Auskunft über die Bindungskraft. Je weiter oben ein Operator steht, desto höher ist die Bindungskraft.
* / MOD
+ -
<< >> SHL SHR
< <= > >= LT LE GT GE
= <> EQ NE
AND
XOR
OR


7.6. Aktuelle Adresse

Die aktuelle Adresse wird durch das $-Zeichen repräsentiert. Wenn Sie also in einem Ausdruck den Wert des Programm Counters (Register PC) zu Beginn der aktuellen Assembler-Zeile benötigen, schreiben Sie dafür das Zeichen: $

8. Zeichenketten

Eine Zeichenkette (Zeichenkettenliteral) umfasst ein oder mehrere in einfachen oder doppelten Hochkommas eingeschlossene Zeichen. Zeichenkettenliterale können nur bei den Pseudobefehlen BINCLUDE, DB, DEFB, DEFM, DFB und INCLUDE verwendet werden.

9. Bedingte Assemblierung

Unter bedingter Assemblierung versteht man, dass Teile des Quelltextes nur dann assembliert werden, wenn eine bestimmte Bedingung erfüllt ist.

Ein der bedingten Assemblierung unterliegender Quelltextabschnitt beginnt mit einer IF-Anweisung, die es in mehreren Varianten gibt. Die Anweisung ENDIF markiert das Ende dess betreffenden Quelltextabschnitts und schließt somit die IF-Anweisung ab.

Zwischen IF und ENDIF kann optional auch die Anwisung ELSE stehen. Der Quelltext zwischen ELSE und ENDIF wird nur dann assembliert, wenn der Bereich zwischen IF und ELSE nicht assembliert wird und umgekehrt.

Die Tabelle beschreibt die verschiedenen IF-Anweisungen für die bedingte Assemblierung:
Anweisungen/SyntaxBeschreibung
IF <numersicher_Ausdruck>
IFT <numersicher_Ausdruck>
Der nachfolgende Quelltext wird assembliert, wenn der Wert des numerischen Ausdrucks ungleich 0 ist.
IFE <numersicher_Ausdruck>
IFF <numersicher_Ausdruck>
Der nachfolgende Quelltext wird assembliert, wenn der Wert des numerischen Ausdrucks gleich 0 ist.
IFDEF <Marke> Der nachfolgende Quelltext wird assembliert, wenn die angegebene Marke existiert.
IFNDEF <Marke> Der nachfolgende Quelltext wird assembliert, wenn die angegebene Marke nicht existiert.

Die Anweisungen für die bedingte Assemblierung können sowohl am Zeilenanfang stehen als auch eingerückt werden. Des Weiteren können bedingte Assemblierungen auch in sich geschachtelt werden.

Der JKCEMU-Assembler legt automatisch die Marke __JKCEMU__ mit dem Wert -1 (alle Bits gesetzt) an. Damit kann erkannt werden, ob das Programm mit dem JKCEMU-Assembler assembliert wird.

Beispiel:

  DB 'Dieses Programm wurde mit'
IFDEF __JKCEMU__
  DB ' dem JKCEMU-'
ELSE
  DB ' einem anderen '
ENDIF
  DB 'Assembler assembliert'


10. Kommandozeile

Der Assembler kann mit einer Kommandozeile auch ohne den Emulator als eigenständiges Programm aufgerufen werden. Unter Windows müssen Sie dazu die Eingabeaufforderung starten. Die Kommandozeile zum Aufruf des Assemblers sieht folgendermaßen aus (Name und Pfad der JKCEMU-JAR-Datei sind entsprechend anzupassen):

java -jar jkcemu.jar --as [Optionen] <Quelltextdatei>

oder

java -jar jkcemu.jar --assembler [Optionen] <Quelltextdatei>

Folgende Optionen können angegeben werden (Groß-/Kleinschreibung beachten!):
OptionBedeutung
-h Hilfe zu den Assembler-Optionen anzeigen
-f <Datei> weitere Kommandozeile aus Datei lesen

Die Kommandozeile kann recht lang sein, möglicherweise länger als von der Eingabeaufforderung oder dem Betriebssystem unterstützt. Aus diesem Grund kann die Kommandozeile aus einer Datei gelesen werden.

Beim Erreichen der Option -f öffnet der Assembler die angegebene Datei und liest daraus die weitere Kommandozeile. Wenn das Ende der Datei erreicht wurde, wird der Rest der ursprünglichen Kommandozeile weiter verarbeitet. Der Assembler tut also so, als ob der Inhalt der Datei anstelle der Option -f in der Kommandozeile stehen würde.

In der Datei müssen die einzelnen Kommandozeilenargumente nicht in einer Zeile stehen, sondern können auf mehrere Zeilen aufgeteilt werden. Wenn ein Kommandozeilenargument Leerzeichen enthält, muss dieses in doppelte Hochkommas eingeschlossen werden, damit der Assembler es als ein Argument verarbeitet.
-l Assembler-Listing erzeugen,
Die Datei für das Assembler-Listing hat den gleichen Pfad und den gleichen Basisnamen wie die Ausgabedatei (siehe Option -o). Die Endung ist jedoch: .lst
-o <Ausgabedatei> Der erzeugte Programmcode wird in die angegebene Datei geschrieben. Das Format der Ausgabedatei hängt von der Endung (*.bin; *.hex; *.kcc; *.kcm; *.tap; *.z80) und von der Angabe der Option -9 ab.
Fehlt die Option -o, hat die Ausgabedatei mit Ausnahme der Endung den gleichen Namen wie die Quelltextdatei. Die Endung lautet: *.bin
-t Markentabelle ausgeben,
Die Markentabelle wird auf der Standard-Ausgabe ausgegebene, es sei denn, Sie haben auch die Option -l angegebene. In dem Fall wird die Markentabelle an das Assembler-Listing angehängt.
-9 Wurde mit der Option -o eine KCC-, KCM- oder TAP-Datei angegeben, wird diese im Format für einen Z9001, KC85/1 und KC87 erzeugt (Dateityp COM eingetragen und bei TAP-Dateien hat der erste Block die Nummer 0). Fehlt die Option -9, werden KCC-, KCM- und TAP-Dateien im Format für HC900 und KC85/2..5 erzeugt.
-C Groß-/Kleinschreibung bei Marken beachten
-D <Marke> Marke mit dem Wert -1 (alle Bits gesetzt) definieren
-D <Marke=Wert> Marke mit dem angegebenen Wert definieren,
Der Wert wird in Form einer Dezimal-, Hexadezimal-, Oktal- oder Binärzahl angegeben (siehe Zahlenliteral).
-J Zu große relative Sprünge als absolute übersetzen,
Diese Option bewirkt, dass relative Sprungbefehle mit einer zu großen Sprungdistanz nicht zu einem Fehler führen, sondern als absolute Sprungebefehle übersetzt werden. In dem Fall wird eine Warnung ausgegeben.
Die Option hat jedoch keine Wirkung beim DJNZ-Befehl, da es zu diesem keinen funktional gleichwertigen Befehl mit einem absoluten Spring gibt. Auch das Simulieren des DJNZ-Befehls durch andere CPU-Befehle lässt sich funktional nicht hundertprozentig exakt realisieren, da DJNZ keine CPU-Flags beeinflusst.
-U Undokumentierte Befehle erlauben
-R Nur Robotron-Mnemonik/-Syntax erlauben
-Z Nur Zilog-Mnemonik/-Syntax erlauben