реклама на сайте
подробности

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


Местный
***

Группа: Участник*
Сообщений: 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


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Дон Амброзио
сообщение Jun 22 2008, 17:03
Сообщение #2


Местный
***

Группа: Участник*
Сообщений: 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


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
alx2
сообщение Jun 23 2008, 19:12
Сообщение #3


Местный
***

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



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


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jun 23 2008, 20:53
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(alx2 @ Jun 23 2008, 22:12) *
man sed


Дык тогда любой редактор с текстовыми макросами smile.gif
Go to the top of the page
 
+Quote Post
alx2
сообщение Jun 24 2008, 11:27
Сообщение #5


Местный
***

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



Цитата(_Pasha @ Jun 24 2008, 01:53) *
Дык тогда любой редактор с текстовыми макросами smile.gif
Мне кажется, инструмент должен более-менее соответствовать масштабу задачи. Запускать perl или vim каждый раз, когда надо в каком-то файле сделать s/шило/мыло/ можно, конечно, но ИМХО очень уж избыточно. Не та весовая категория. smile.gif
Цитата(XVR @ Jun 24 2008, 13:45)
Тогда уж man m4. Sed здесь не очень подойдет - он обрабатывает исходные файлы построчно, сделать ему макрос на несколько строк очень геморойно.
Согласен, для многострочных подстановок m4 - более адекватный инструмент.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Дон Амброзио   Средства для упрощения создания полиморфных модификаций…   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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 02:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016