Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 核心战争中的小鬼环_Assembly_Memory_Corewars_Redcode - Fatal编程技术网

Assembly 核心战争中的小鬼环

Assembly 核心战争中的小鬼环,assembly,memory,corewars,redcode,Assembly,Memory,Corewars,Redcode,有人能解释一下核心战争中的小鬼环吗 c JMP imp-2666 launch SPL c SPL imp+2667 imp MOV 0,2667 end launch 我认为上面的代码是'88标准的,因为它使用end表示程序的开始,并且标签没有冒号 程序从启动标签开始。我需要帮助想象这个小鬼戒指是如何在记忆中“爬行”的 让我们一行一行地来分析: c JMP imp-2666 这会导致程序计数器跳转到“imp”的位置……实际上,在它之前有2666个位置。这叫做偏

有人能解释一下核心战争中的小鬼环吗

c      JMP imp-2666
launch SPL c
       SPL imp+2667
imp    MOV 0,2667
end launch
我认为上面的代码是'88标准的,因为它使用
end
表示程序的开始,并且标签没有冒号


程序从启动标签开始。我需要帮助想象这个小鬼戒指是如何在记忆中“爬行”的

让我们一行一行地来分析:

c JMP imp-2666
这会导致程序计数器跳转到“imp”的位置……实际上,在它之前有2666个位置。这叫做偏移量。注意标签“c”

这里,标签“launch”用于命名后面的代码块。SPL意味着“拆分”,这意味着它不仅将跳转到位置C,而且还将执行下面的代码。这就是拆分的本质——启动另一个流程。明白了吗?:)

再次启动另一个imp进程,尽管这次它位于当前指令指针前面2667处

imp MOV 0, 2667
还记得所有在其字段中使用“imp”的说明吗?就是这样。如果您还不知道,imp所做的就是将自己(MOV指令)复制到某个地方,以便它可以无休止地执行自己

end launch
是的,你说得对,它意味着代码块的结束。这是给预处理器的,真的

当然,在汇编中,你必须看一看整个画面:为什么这个指令会出现在这里,它与其他所有东西有什么关系?这一个很简单:它在每2667个内存位置产生一个小鬼,这样他们就可以超越核心和它的敌人。不过这是愚蠢的,除非它是一个更大的战士的一部分,主要是因为小鬼覆盖了它的敌人,作为一个过程吸收它,而不是杀死它。结果是平局


嘿,当我们讨论这个问题时,我在找人一起玩。我自己也要加入corewars。想玩一会儿吗?哈哈。希望我的解释对你有用

如果您正在寻找可视化,为什么不为您的系统找到一个名为pMars的程序呢?这是一个非常棒的节目,谢谢!事实上,我不久前就知道了,但你的回答应该会对其他人有很大帮助。你是在找人战斗吗?我有了我的第一个有效的战士并开始运行。。。虽然不多,但它已经赢了几轮。
imp MOV 0, 2667
end launch