我正在尝试学习 redcode,因为制作机器人看起来很有趣。
介绍
对于那些不知道什么是 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
我理解这条线的意思。它说,将目标的 B-Field 移动到顶点 B-Field 所在的线,并减小目标 B-Field 的值。
当第一次执行循环时,第一行将是:
Top dat #0, #12
据我所知,带有 Loop 的行的意思是:将指令向前移动 12 行(用 dat #0、#0 填充)到第 833 行。
但是当执行这段代码时,这行代码放在了第 839 行。
有人了解真正发生的事情吗?