Skip navigation

ARES


Page Content:

Kampfprogramme

Die hier beschriebenen Programme kommen in der Wirklichkeit von Core War höchstens als Komponenten komplexerer Kampfprogramme vor. Sie dienen hier als Beispiele verschiedener Strategien und Möglichkeiten und sollen nur ein grundlegendes Verständnis ermöglichen. Die meisten dieser Routinen könnten noch stark optimiert werden.

Der Imp

Eigentlich ist der Imp kein richtiges Kampfprogramm, weil er nicht attackiert ("Bomben" wirft). Kämpfe gegen einen Imp gehen eigentlich immer unentschieden aus, wenn der Gegner keine besondere Abwehrstrategie gegen Imps beherrscht:
  MOV   +0,   +1   kopiere diese Instruktion (+0) in die nächste Zelle (+1)
Versuche zuerst, selber zu verstehen, was der Imp macht, bevor du weiterliest. (Jetzt!) Der Imp ist das kleinste Programm, das in der Lage ist, sich selbst zu replizieren. Nachdem der Befehl ausgeführt wurde, befindet sich eine Kopie der Instruktion in der Zelle darunter, der IP wird erhöht und ein weiterer MOV 0, +1 wird ausgeführt, und so weiter. Wenn der Imp beginnt, die Befehle des Gegners zu überschreiben, dann wird der Gegner selbst zu einem Imp. Beide Programme laufen endlos durch den Speicher, bis die Anzahl der maximalen Zyklen erreicht wird.

Dwarf

Der Dwarf ist der simpelste Vertreter der Art von Programmen, die als Stones bezeichnet werden. Ein Stone wirft mit Steinen (DAT-Instruktionen) um sich. Dieser hier kopiert DAT-Instruktionen in jede vierte Zelle des Core. Die Zahlen am Anfang jeder Zeile sind die absoluten Adressen der jeweiligen Speicherzelle:
  &0785    MOV   +3,   @+3    Kopiere die Bombe an die Zieladresse
&0786 ADD #4, +2 Erhöhe den Zeiger auf die Zieladresse um 4
&0787 JMP -2 Endloschleife
&0788 DAT #4 "Pointer" auf Ziel und "Bombe" zugleich
Um dieses Programm zu verstehen, mußt du zuerst das Prinzip eines Pointers kennen: Wenn der Wert eines DAT-Befehls als Pointer verwendet wird, dann errechnet sich die Zieladresse aus der Adresse des DAT-Befehls plus dem Wert, der in ihm gespeichert ist. Der DAT-Befehl unseres Beispiels beinhaltet den Wert 4, wird er nun als Pointer benutzt, dann "zeigt" er auf die Zelle mit der Adresse 792.

Der erste Befehl des Dwarf ist eine MOV-Instruktion. Sie kopiert die Zelle mit der relativen Adresse +3 an die Zelle, auf die der DAT-Pointer zeigt. So wird im allerersten Durchlauf die Instruktion "DAT #4" an die Adresse 792 kopiert.

Danach kommt die ADD-Instruktion dran, sie erhöht den Wert im DAT auf 8.

Schließlich bewirkt der Befehl JMP -2, daß die Programmausführung in der Zelle des MOV fortesetzt wird. Der kopiert nun wie zuvor die DAT-Instruktion in die Zelle, auf die der DAT-Pointer zeigt, das ist inzwischen die Zelle mit der Adresse 796.

Wenn der Core wie üblich 8000 Zellen hat, dann wird der DAT-Pointer nach 6001 Zyklen um imsgesamt 8000 auf 8004 erhöht worden sein. Da Adressen immer modulo CORESIZE berechnet werden, entspricht das dem Ursprungswert von 4. Danach beginnt der Dwarf, den Speicher erneut mit DAT-Bomben zu überschreiben.

Imp-Factory

Dieses Programm verwendet im Gegensatz zu den ersten beiden Kämpfern nicht nur einen einzelnen Prozess, sondern erzeugt laufend weitere. Dabei werden immer mehr Imps auf den Weg geschickt:
  SPL   +0          Adresse dieser Zelle der Task Queue hinzufügen
MOV +0, +1 Imp
Adressierungsarten

Content Management:

μCMS α1.6