1

Core WarsのImp Ringについて誰か説明してくれませんか?

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

end上記のコードは、プログラムの開始を示すために使用され、ラベルにコロンがないため、'88 標準のものだと思います。

プログラムは起動ラベルから始まります。このインプ リングがどのように記憶を「クロール」するかを視覚化する助けが必要です。

4

1 に答える 1

3

これを 1 行ずつ分析してみましょう。

c JMP imp-2666

これにより、プログラムカウンターが「imp」の場所にジャンプします...実際には、その前の2666の場所です。いわゆるオフセットです。ラベル「c」に注意してください。

launch SPL c

ここでは、「起動」というラベルを使用して、後続のコード ブロックに名前を付けています。SPL は「分割」を意味します。つまり、場所 C にジャンプするだけでなく、後続のコードも実行します。これが分割の性質です。別のプロセスを開始します。それを得る?:)

SPL imp + 2667

再び、別の imp プロセスが開始されますが、今回は現在の命令ポインターの 2667 AHEAD にあります。

imp MOV 0, 2667

フィールドで「imp」を使用するすべての指示を覚えていますか? これです。まだわからない場合は、imp が行うことは、自分自身 (MOV 命令) をどこかにコピーするだけで、自分自身を際限なく実行できるようになります。

end launch

そうです、これはコード ブロックの終わりを意味します。本当にプリプロセッサ用です。

もちろん、アセンブリでは、全体像を見る必要があります。なぜこの命令がここにあるのか、他のすべてとの関係で何をするのか? これは簡単です。2667 のメモリ ロケーションごとにインプをスポーンし、コアとその敵をオーバーランできるようにします。しかし、それがより大きな戦士の一部でない限り、それは愚かです. 引き分けに終わります。

ねえ、私たちが主題について話している間、私は一緒に遊ぶ人を探しています. 私は自分でcorewarsに参加しています。ちょっと遊びたい?ハハ。私の説明がうまくいったことを願っています。

于 2014-03-11T16:20:17.323 に答える