|
Средства для упрощения создания полиморфных модификаций…, Есть ли в каких-нибудь ЯВУ такие средства? |
|
|
|
Jun 22 2008, 08:55
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Средства для упрощения создания полиморфных модификаций фрагментов кода
Вопрос шибко заумный, но очень актуальный.
Попытаюсь объяснить, в чём суть. Надеюсь, что у меня это получится.
Объяснение построю на примере решения конкретной задачи.
Имеется 4 флага состояния некоего вычислительного процесса. Соответственно имею 16 возможных состояний вычислительного процесса. А значит 16 ветвей алгоритма. Пишу на АСМе. Но это не существенно для обсуждаемой проблемы – так как с подобными проблемами мы сталкиваемся при написании программы на любом языке: СИ, СИ++ и т.п.
Каждая ветвь представляет собой фрагмент кода, который отличается от любого другого из 16-ти в 3-4-х местах. Например, вместо команды SUBI, команда SBCI, или вместо регистра ZH в команде используется XH. Сам же размер кодовых фрагментов порядка 50-ти ASM-команд.
Так вот. Хотелось бы не переписывать каждый раз 50 команд во всех 16-ти ветвях, а просто указать директивой какой кодовый фрагмент нужно взять за базовый и в каких местах и что нужно заменить.
Макросами не получиться. Потому что изменения каждый раз в разных местах – получается более 30-ти параметров. Указывать при вызове макроса все его 30 параметров вряд ли можно назвать упрощением решения задачи.
Есть ли в каких-нибудь языках средства, позволяющие генерировать новые кодовые фрагменты путём указания кодового фрагмента-прототипа, который нужно взять за базовый и указания что в нём нужно заменить для получения нового фрагмента кода.
Т.е. в каких-нибудь языках программирования средства, упрощающие и облегающие создание полиморфных модификации фрагментов кода? Если есть, то что это за средства.
Сообщение отредактировал Дон Амброзио - Jun 22 2008, 08:57
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
 |
Ответов
|
Jun 22 2008, 17:03
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Мне нужна возможность объявить любой фрагмент кода прототипом (указав с помощью специальных маркеров его начало и конец и задав ему имя) для какого-либо другого фрагмента кода (причём границу чтоб можно было установить где угодно - вплоть до "разрезания" команды) и возможность задать внутри этого фрагмента-прототипа участки(опять же с помощью неких маркеров), которые будут заменены в порождаемых от него фрагментах кода. И порождение от фрагмента-прототипа нового фрагмента кода будет выглядеть как вызов обычного макроса с заданными фактическими параметрами
Пример.
mov R2 , R3 <X ldi R16 , <0 $66 0> sub R16 , <1 R2 1> X>
Здесь скобками '<' и '>' выделяем граница фрагмента прототипа и его изменяемые части
X - название прототипа 0 - номер изменяемой части внутри прототипа
тогда вызов
X 0:$77
где 0: - номер части, которую мы хотим модифицировать ( часть 1 - не хотим - поэтому её не указываем !!!)
породит код :
ldi R16 , $77 sub R16 , R2
а вызов
X 0:$53 1:R7
породит код :
ldi R16 , $53 sub R16 , R7
На маленьких фрагментах кода выигрыш не заметен.
Но если у Вас больше десятка фрагментов кода, каждый из которых имеет размер в несколько десятков строчек и каждый из этих фрагментов может быть получен из некоего прототипа путём изменения нескольких строчек, то выигрыш от описанной мной фичи будет просто огромна
Сообщение отредактировал Дон Амброзио - Jun 22 2008, 17:07
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Jun 23 2008, 19:12
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Дон Амброзио @ Jun 22 2008, 22:03)  Мне нужна возможность объявить любой фрагмент кода прототипом (указав с помощью специальных маркеров его начало и конец и задав ему имя) для какого-либо другого фрагмента кода (причём границу чтоб можно было установить где угодно - вплоть до "разрезания" команды) man sed
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Jun 24 2008, 11:27
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(_Pasha @ Jun 24 2008, 01:53)  Дык тогда любой редактор с текстовыми макросами  Мне кажется, инструмент должен более-менее соответствовать масштабу задачи. Запускать perl или vim каждый раз, когда надо в каком-то файле сделать s/шило/мыло/ можно, конечно, но ИМХО очень уж избыточно. Не та весовая категория.  Цитата(XVR @ Jun 24 2008, 13:45) Тогда уж man m4. Sed здесь не очень подойдет - он обрабатывает исходные файлы построчно, сделать ему макрос на несколько строк очень геморойно. Согласен, для многострочных подстановок m4 - более адекватный инструмент.
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
Сообщений в этой теме
Дон Амброзио Средства для упрощения создания полиморфных модификаций… Jun 22 2008, 08:55  XVR Цитата(alx2 @ Jun 23 2008, 23:12) man sed... Jun 24 2008, 08:45 Rst7 Вменяемый макроассемблер поддерживает макроопредел... Jun 22 2008, 17:13 Дон Амброзио Цитата(Rst7 @ Jun 22 2008, 21:13) Вменяем... Jun 22 2008, 17:46  Дон Амброзио Тут тоже обсуждается эта тема Jun 23 2008, 04:35 _Pasha Цитата(Rst7 @ Jun 22 2008, 20:13) Вменяем... Jun 22 2008, 18:05  Дон Амброзио Цитата(_Pasha @ Jun 22 2008, 22:05) 1. У ... Jun 22 2008, 18:19 733259 Насколько я понял - требуется не переписывать 16 р... Jun 23 2008, 05:02 _Pasha Гуглим по словам метод раскрутки компилятор bootst... Jun 23 2008, 06:36 733259 Цитата(alx2 @ Jun 24 2008, 17:27) Мне каж... Jun 24 2008, 14:07 Дон Амброзио Докладываю.
Решил проблему с помощью препроцессор... Jun 26 2008, 18:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|