FreeManCPM Да.Это очень правильно! . А вот смотрите ,вот это можно было бы оформить в виде <.....С3 > Код (Text): xor SI,SI xor DI,DI PREPARE: lodsb mov byte ptr CS:[DI+0014H],AL inc DI cmp AL,0C3H jne PREPARE и тогда бы программа сама бы затирала свой код,порождая саму себя 8-[]. Разве это не самомодификация ? Пусть даже и эквивалентная.... Спасибо.Буду обдумывать.
FreeManCPM различие сущностей 0С3H как маркера и как данных можно обойти "лентой" L...C3L.........C3LC3L..........C3L.... где L-заголовок "подпрограммы" являющийся ее длинной. Тогда правда не нужен будет скан по маркеру
В общем построил "ленту" L....C3L....C3L..C3........... Блок начинается с заголовка L-описывающего длину блока считая вместе с L Если назвать часть кода загружающую [L...C3] блок инициализатором,то в принципе ничто не может помешать иметь их разные типы. Например,первый же блок мы можем сделать NOT-инициализатором.Он заместит "нормальный" инициализатор и будет подгружать оставшую часть ленты инвертированно. Потом,может "взбрести в голову" получать часть "ленты" xor'я и т.д и т.п (естественно по крайней мере следующий за xor-инициализатором блок должен быть подготовлен _до_) Т.о можно на ходу менять методы интерпритации. А это похоже на примитив антиотладки... Или я ошибаюсь ? P.S.Если кого заинтересует исходник(бинарник ?) "Hello world" c замещающим NOT-инициализатором,буду рад.
Никак, в защищённом режиме другие обработчики прерываний, иначе нельзя. Хочешь одновремено играть в игрушку и чтобы жил резидент?