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