変更が重要でない場合でも、継続的に変更されるコードを記述したいと思います。
たとえば、次のようなものかもしれません
for i in 1 to 100, do
begin
x := 200
for j in 200 downto 1, do
begin
do something
end
end
コードで、最初の反復後に行x := 200
を別の行にx := 199
変更し、次の反復後に次のx := 198
ように変更する必要があるとします。
そのようなコードを書くことは可能ですか?そのためにインラインアセンブリを使用する必要がありますか?
編集:これが私がCでそれをやりたい理由です:
このプログラムは実験的なオペレーティングシステムで実行され、他の言語からコンパイルされたプログラムの使用方法がわかりません。このようなコードが必要な本当の理由は、このコードが仮想マシンのゲストオペレーティングシステムで実行されているためです。ハイパーバイザーは、コードのチャンクを変換するバイナリトランスレーターです。翻訳者はいくつかの最適化を行います。コードのチャンクを1回だけ変換します。次回ゲストで同じチャンクが使用されるとき、トランスレータは以前に変換された結果を使用します。これで、コードがその場で変更された場合、翻訳者はそれに気づき、以前の翻訳を失効としてマークします。したがって、同じコードの再翻訳を強制します。これは私が達成したいことであり、翻訳者に多くの翻訳を強制することです。通常、これらのチャンクは、分岐命令(ジャンプ命令など)間の命令です。自己修正コードはこれを達成するための素晴らしい方法だと思います。