Я хочу написать фрагмент кода, который постоянно изменяется, даже если это изменение незначительно.
Например, может быть что-то вроде
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:
Эта программа будет запущена в экспериментальной операционной системе, и я не могу/не знаю, как использовать программы, скомпилированные с других языков. Настоящая причина, по которой мне нужен такой код, заключается в том, что этот код запускается в гостевой операционной системе на виртуальной машине. Гипервизор - это двоичный переводчик, переводящий куски кода. Переводчик выполняет некоторые оптимизации. Он только переводит куски кода один раз. В следующий раз, когда тот же кусок используется в гостевой, переводчик будет использовать ранее переведенный результат. Теперь, если код изменен "на лету", тогда переводчик замечает это и отмечает, что его предыдущий перевод был устаревшим. Таким образом, заставляя повторный перевод одного и того же кода. Этого я хочу достичь, чтобы заставить переводчика сделать много переводов. Обычно эти куски являются инструкциями между инструкциями на ветки (например, инструкциями перехода). Я просто думаю, что самомодифицирующий код будет фантастическим способом достижения этого.