为什么这个 RedCode MOV 不工作?

Why isn't this RedCode MOV working?

所以,我正在集合 class,为了让事情变得有趣,我们每两周举办一次 Core Wars 锦标赛。我正在尝试制作一个简单的应用程序,将一个 IMP 复制到内存中的更下方,然后跳回并同时运行两个 IMP。我的想法是,一旦我让这部分开始工作,就把它放到一个紧密的循环中,然后制作两个以上。

这是我的代码:

JMP START        ; Jump to the starting point

ADDR DAT #1, #0  ; Remember the last address we dropped at
MOVE MOV 0, 1    ; The imp to be copied

START            ; Starting point
ADD #-1, ADDR    ; Take 1 off the address
ADD #80, ADDR    ; Move 80 forward
ADD #1, ADDR     ; Make that 81

MOV MOVE, ADDR   ; Move the imp to the ADDR
SPL ADDR         ; Split a new processes at the ADDR

JMP MOVE

然而,第一个 MOV/SPL 不起作用,因此只有第一个 IMP 是 运行。在这个逻辑中我哪里出错了?如果我删除 ADDR 并只使用一个幻数,它就会起作用。

这是记忆开始前的屏幕片段 运行。

谢谢。

变化:

MOV MOVE, ADDR   ; Move the imp to the ADDR
SPL ADDR         ; Split a new processes at the ADDR

至:

MOV MOVE, @ADDR   ; Move the imp to the ADDR
SPL @ADDR         ; Split a new processes at the ADDR

如果您希望循环正常工作,请将 JMP MOVE 更改为 JMP START

此外,您应该将第一行更改为 ORG START 而不是 JMP START


我想我误解了你问题的一部分,看起来你只是想创建两个 imp 进程,而我说要创建一个循环,你只有 2 个 imps 运行 如果你让它成为某种东西像这样:

org start

addr dat #0, #1

start
    add #80, addr
    mov imp, @addr
    spl @addr

imp mov [=12=], 

但它不会跳回开始并覆盖原来的指令。