Вот какую штуку вспомнил. Когда-то давно в своем асме и METAL'е делал макросы, которые формировали отнесенные на расстояние таблицы (обычно сразу по концу кода), и в эти таблицы заносили список адресов для модификации. Для создания перемещаемого кода. Т.е. пишется макрос типа
REF MACRO
@save_cur = .
.=next_free
DEFW @save_cur-2-start
.next_free=.
.=@save_cur
ENDM
(не точная копия, а идея - по памяти)
Далее, программа начинается с метки start,
а в конце кода пишется
next_free = .
И после каждого 2х-байтного адреса записывается обращение к REF, вроде:
JP @labelA : REF
В начале кода располагатся самомодификатор, котторый читает таблицу и настраивает код по месту выполнения.
Я к чему это все пишу. Добавил спец. форму присавивания . = #expr | $ = #expr (как было в моих прежних асмах), и сделал контроль определенности имен в ORG, .= expr, и в других местах _опциональным_ (в сегодняшнем обновлении будет). Чревато, но вообще-то программист должен быть как Господь Бог. Ограничения - это для юзеров (шутка, по умолчанию строгий контроль будет включен, отключается опцией).




Ответить с цитированием