为什么这个RedCode MOV没有工作?

时间:2015-04-25 04:10:05

标签: assembly

所以,我在集会班,为了让事情变得有趣,我们每两周都会举办一次核心战争比赛。我正在尝试创建一个简单的应用程序,将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并使用幻数,它就可以工作。

这是内存开始运行之前的屏幕摘要。

Screen Snippet of Memory

感谢。

1 个答案:

答案 0 :(得分:1)

变化:

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运行:< / p>

org start

addr dat #0, #1

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

imp mov $0, $1

但它并没有跳回到开头并覆盖原始指令。