ポスト
最近のプログラマさんには、きっと意味が分からないと思う昔の話。 アセンブラで書いたコードの自己書き換えという省メモリ高速化手法があったんじゃよ。 ただ、バグった時、どこが原因か分かりにくい。 そんな理由でアセンブラから高級言語に移行して行く際に禁じ手として封印されたのじゃ。
メニューを開くみんなのコメント
メニューを開く
自己書き換えは80486と68030あたりで動作不可になりましたね。理由はキャッシュが実装されたためです。 この頃のCPUになるとRAMからキャッシュにフェッチ済みの命令を自己書き換えしてもCPUの動作に反映されないので意味がなくなりました。 486動作不可みたいなゲームたくさん出ましたね。
メニューを開く
昔のCOBOLコードでASIGN(?)って命令で、リラン(ABENDしたら自動的に再起動)した時に自己コードを書き換えるようなことを当たり前にやってたと思うんだけど… ググってもそんな命令見つからないねぇ。 H社のメインフレームの方言だったのかしらね。 そもそもリランって概念が一般的なのかも疑問だけど。
メニューを開く
自己書き換えプロテクト、とかいうのを思い出しました。 ROMカセットだと書き換わらないので大丈夫だけど、 ディスクやメモリ上に置いとくと書き換わってゲームができなくなる、とかなんとか。 実例があるのかどうかはわかりませんが。
メニューを開く
自己書き換えとは違うけど、textセクションの書き換えとかはデバッグレジスタの個数超えたブレークポイントとかでint3に置き換えたりやるんじゃないのかな?だからリードオンリーなページとかには設定されてなさそうな気がする。