7

DCPU 仕様によると、SET命令が失敗するのは、a値がリテラルの場合のみです。

それで、次のように動作しますか?

SET [PC],0x1000

より便利なバージョンは のオフセットを設定するPCため、かなり奇妙な無限ループは次のようになります。

SET [PC+0x2],0x89C3 ; = SUB PC,0x2
4

2 に答える 2

7

おそらく (= うまくいくはずですが、試していません)。

これは「自己修正」コードと呼ばれ、a) RAM の制限と b) コード サイズの制限のため、8 ビット時代には非常に一般的でした。このようなコードは非常に強力ですが、エラーが発生しやすくなります。コード ベースが大きくなると、すぐにメンテナンスの悪夢になる可能性があります。

有名な使用例:

  1. Windows 95 では、このようなコードを使用して、スタック上にグラフィック レンダリング コードを構築していました。
  2. ウイルスとトロイの木馬は、これを攻撃ベクトルとして使用します (スタックにコードを書き込むか、戻りアドレスを操作して をシミュレートしますJMP) 。
  3. C64 で switch ステートメントをシミュレートする
于 2012-04-05T15:32:59.757 に答える
4

[PC] には値がないので、ポインターとして使用できるもの (レジストリまたはメモリ) に PC を格納するという、回り道をする必要があると思います。

        セットA、PC
        [A+3] を設定、0x8dc3 ; SUB PC, 3 (A が SUB PC の外部から変更できない場合は 2 でも機能します。)
于 2012-04-05T17:24:29.313 に答える