为什么这个 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=],
但它不会跳回开始并覆盖原来的指令。
所以,我正在集合 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=],
但它不会跳回开始并覆盖原来的指令。