所以,我在集会班,为了让事情变得有趣,我们每两周都会举办一次核心战争比赛。我正在尝试创建一个简单的应用程序,将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
并使用幻数,它就可以工作。
这是内存开始运行之前的屏幕摘要。
感谢。
答案 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
但它并没有跳回到开头并覆盖原始指令。