ボットを作るのが楽しそうなので、レッドコードを学ぼうとしています。
序章
redcode が何であるかを知らない人のために、ここで簡単に説明します。これは ASM に似た言語ですが、はるかに簡単で無駄がありません。仮想メモリ内の他のプログラムをシャットダウンする必要がある小さなプログラムを作成するために使用されます。(詳細については、こちらを参照してください: http://vyznev.net/corewar/guide.html )
コードの一部を次に示します。
;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
問題
基本的な戦略は、自分自身を別の場所に複製し、プロセスをフォークすることです。私が理解していないのは、このルールです:
Loop mov @Top, <Target
このセリフの意味が分かりました。target の B-Field を top の B-Field が指す行に移動し、target の B-Field の値を減らします。
ループが初めて実行されるとき、最初の行は次のようになります。
Top dat #0, #12
私の知る限り、Loop のある行は次のことを意味します: 命令を 12 行前 (dat #0、#0 で埋められている) の 833 行に移動します。
しかし、このコードが実行されると、コード行は 839 行目に配置されます。
誰かが本当に何が起こっているのか理解していますか?