DCPU 仕様によると、SET
命令が失敗するのは、a
値がリテラルの場合のみです。
それで、次のように動作しますか?
SET [PC],0x1000
より便利なバージョンは のオフセットを設定するPC
ため、かなり奇妙な無限ループは次のようになります。
SET [PC+0x2],0x89C3 ; = SUB PC,0x2
おそらく (= うまくいくはずですが、試していません)。
これは「自己修正」コードと呼ばれ、a) RAM の制限と b) コード サイズの制限のため、8 ビット時代には非常に一般的でした。このようなコードは非常に強力ですが、エラーが発生しやすくなります。コード ベースが大きくなると、すぐにメンテナンスの悪夢になる可能性があります。
有名な使用例:
JMP
) 。[PC] には値がないので、ポインターとして使用できるもの (レジストリまたはメモリ) に PC を格納するという、回り道をする必要があると思います。
セットA、PC [A+3] を設定、0x8dc3 ; SUB PC, 3 (A が SUB PC の外部から変更できない場合は 2 でも機能します。)