Core WarsのImp Ringについて誰か説明してくれませんか?
c JMP imp-2666
launch SPL c
SPL imp+2667
imp MOV 0,2667
end launch
end
上記のコードは、プログラムの開始を示すために使用され、ラベルにコロンがないため、'88 標準のものだと思います。
プログラムは起動ラベルから始まります。このインプ リングがどのように記憶を「クロール」するかを視覚化する助けが必要です。
これを 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に参加しています。ちょっと遊びたい?ハハ。私の説明がうまくいったことを願っています。