Я пытаюсь выучить красный код, потому что делать бота выглядит забавно.
Введение
Для тех, кто не знает, что такое красный код, вот краткое объяснение.
Это 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-поле цели на линию, где B-поле верхней точки, и уменьшите значение B-поля цели.
Когда цикл выполняется в первый раз, первая строка будет иметь вид:
Top dat #0, #12
Насколько я понимаю, строка с Loop означает:
Переместите инструкцию на 12 строк вперед (заполненную датами # 0, # 0) в строку 833.
Но когда этот код выполняется, строка кода помещается в строку 839.
Кто-то понимает, что на самом деле происходит?