【问题标题】:Imp Ring in Core Wars核心战争中的小鬼戒指
【发布时间】:2014-02-13 21:47:44
【问题描述】:

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

c      JMP imp-2666
launch SPL c
       SPL imp+2667
imp    MOV 0,2667
end launch

我认为上面的代码是'88标准,因为它使用end来表示程序的开始,并且标签没有冒号。

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

【问题讨论】:

  • 如果您正在寻找可视化,为什么不为您的系统找到一个名为 pMars 的程序呢?这是一件非常棒的事情。

标签: assembly memory corewars redcode


【解决方案1】:

让我们逐行剖析:

c JMP imp-2666

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

launch SPL c

这里,标签“launch”用于命名后面的代码块。 SPL 的意思是“拆分”,这意味着它不仅会跳转到位置 C,还会执行后面的代码。这就是分裂的本质——开始另一个过程。得到它? :)

SPL imp + 2667

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

imp MOV 0, 2667

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

end launch

是的,你是对的,它表示代码块的结束。真的是为了预处理器。

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

嘿,当我们谈论这个主题时,我正在寻找可以一起玩的人。我自己也参加了核心战争。想玩一会儿吗?哈哈。希望我的解释对你有用。

【讨论】:

  • 谢谢!我其实早就想通了,但你的回答应该对其他人有很大帮助。
  • 你在找人来战斗吗?我已经让我的第一个有效的战士启动并运行了......虽然不多,但它已经赢了几轮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2019-04-15
相关资源
最近更新 更多