【发布时间】:2015-04-25 04:10:05
【问题描述】:
所以,我在上组装课,为了让事情变得有趣,我们每两周举办一次 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 并只使用幻数,它就可以工作。
这是内存开始运行前的屏幕截图。
谢谢。
【问题讨论】: