Ich versuche, Redcode zu lernen, weil es Spaß macht, einen Bot zu erstellen.
Einführung
Für diejenigen, die nicht wissen, was redcode ist, hier eine kurze Erklärung. Es handelt sich um eine ASM-ähnliche Sprache, die aber viel einfacher und weniger komplex ist. Sie wird verwendet, um kleine Programme zu schreiben, die andere Programme im virtuellen Speicher herunterfahren müssen. (Weitere Informationen finden Sie hier: http://vyznev.net/corewar/guide.html )
Hier ist ein Stück Code:
;redcode
;name Mice
;author Chip Wendell
;strategy paper (replicator)
;history Winner of the 1986 ICWS tournament
Top dat #0, #0
Start mov #12, Top
Loop mov @Top, <Target
djn Loop, Top
spl @Target,0
Spacer equ 653
add #Spacer,Target
jmz Start, Top
Target dat #0, #833
end Start
Problem
Die grundlegende Strategie besteht darin, sich selbst an einen anderen Ort zu replizieren und den Prozess zu verzweigen. Was ich nicht verstehe, ist diese Regel:
Loop mov @Top, <Target
Ich verstehe die Bedeutung dieser Zeile. Sie besagt, dass das B-Feld des Ziels auf die Linie verschoben werden soll, auf die das B-Feld des oberen Bereichs zeigt, und dass der Wert des B-Felds des Ziels verringert werden soll.
Wenn die Schleife zum ersten Mal ausgeführt wird, lautet die erste Zeile:
Top dat #0, #12
Soweit ich das verstehe, bedeutet die Zeile mit Loop: Verschiebe die Anweisung 12 Zeilen nach vorne (gefüllt mit dat #0, #0) in Zeile 833.
Wenn dieser Code jedoch ausgeführt wird, wird die Codezeile in Zeile 839 eingefügt.
Versteht jemand, was hier wirklich passiert?