Skip navigation
Page Content:
Pseudoinstruktionen
Pseudoinstruktionen sind Opcodes, die zwar einen Einfluß auf die Übersetzung des Programmes haben, aber selbst im fertigen Programm nicht aufscheinen. Es handelt sich um die Befehle ORG, END, EQU und FOR/ROF.
ORG und END
Mit ORG <start> und END <start> kann man festlegen, bei welcher der Instruktionen das Programm beginnt, man kann den Einstprungspunkt frei wählen. Wird eine Zahl angegeben, so ist zu beachten, daß die erste "echte" Instruktion die Nummer 0 hat. ORG boot
bomb DAT $0
boot
loop MOV bomb, @ptr
ADD #4, ptr
JMP loop
ptr DAT #4
Die END-Anweisung unterschiedet sich von ORG dadurch, daß jeglicher Text danach ignoriert wird: Der Assembler liest, nachdem er eine Zeile mit END vorfindet, keine weiteren Zeilen aus der Datei mehr ein.
EQU
Diese Pseudo-Instruktion funktioniert wie eine automatische Ersetzen-Funktion. Eine EQU-Anweisung muß nach einem Labelnamen stehen. Bei der Übersetzung wird jedes Vorkommen dieses Labels durch den Text, der nach dem EQU definiert wurde, ersetzt. Hierbei können einzelne Zahlenwerte angegeben werden, wie auch ganze Instruktionen. Sogar Mehrzeilige Werte können definiert werden: STEPSIZE EQU CORESIZE/100
SOME_DWARF EQU MOV bomb, @+3
EQU ADD #STEPSIZE, +2
EQU JMP -2
SOME_DWARF
ptr DAT #4
bomb DAT $0
Wenn die entsprechende Option eingeschaltet ist (Voreinstellung), dann werden sowohl vom ARES-Assembler, wie auch von pmars folgende EQUs automatisch definiert, mit Ausnahme von READLIMIT und WRITELIMIT, welche von pmars nicht unterstützt werden:
Vorbelegte EQU Werte Name | Bedeutung |
CORESIZE | Größe des Core |
READLIMIT | Größte relative Entfernung für Lesezugriffe |
WRITELIMIT | Größte relative Entfernung für Schreibzugriffe |
MAXPROCESSES | Größe der Task-Queue eines Spielers |
MAXCYCLES | Untentschieden nach Anzahl Zyklen |
MAXLENGTH | Maximale erlaubte Instruktionen/Warrior beim Laden |
MINDISTANCE | Minimaler Start-Abstand zwischen den Programmen |
ROUNDS | Anzahl der Runden in dieser Konfrontation |
PSPACESIZE | Größe des Privatspeichers |
VERSION | Version von PMARS 93 = pmars 0.9.3 |
WARRIORS | Anzahl der aktiven Kämpfer im Core (Bei ARES max. 2) |
CURLINE | Nummer der aktuellen Instruktion |
Der Wert für CURLINE ist besonders: Er repräsentiert die Nummer der Instruktion, in der er verwendet wird. Die erste Instruktion hat die Nummer 0.
Auch bei Bezeichnern für EQU ist die Groß/Kleinschreibung zu beachten, CORESIZE ist also ein anderer Bezeichner als CoreSize.
FOR/ROF
Bei der FOR-Anweisung handelt es sich um eine Schleife. Der Text, der zwischen FOR und ROF steht, wird mehrmals eingefügt. Aus FOR 3
DAT #1
ROF
wird: DAT #1
DAT #1
DAT #1
Man kann aber, ähnlich zu EQU, dem ganzen Block einen Label voranstellen. Dieser Label dient innerhalb des Blocks als "Zählvariable", die die Nummer der aktuellen Wiederholung beinhaltet. Aus n FOR 3
DAT #n
ROF
wird: DAT #1
DAT #2
DAT #3
Innerhalb einer FOR-Schleife kann man aber keine gewöhnlichen Labels verwenden, eine Angabe von FOR 3
lab JMP lab
ROF
würde einen "Duplicate Label Error" bewirken, weil der Text lab JMP lab dreimal hintereinander eingesetzt würde. Um innerhalb einer FOR-Schleife Labels verwenden zu können, muß man sie um die fortlaufende Nummer erweitern. Aus n FOR 3
lab&n JMP lab&n
ROF
wird: JMP $0
JMP $0
JMP $0
Verschachtelte FOR-Schleifen
Innerhalb von FOR-Schleifen dürfen weitere FOR-Schleifen enthalten sein. Aus n FOR 3
m FOR 2
lab&n&m DAT #n, #m+4
ROF
ROF
wird DAT #1, #5
DAT #1, #6
DAT #2, #5
DAT #2, #6
DAT #3, #5
DAT #3, #6
Bei verschachtelten Schleifen gibt es Unterschiede zwischen pmars und ARES - das betrifft EQU-Deklarationen innerhalb einer Schleife. Mehr dazu unter Kompatibilität.
→ Direktiven
Content Management:
μCMS α1.6