Сейчас на форуме: Kybyx (+3 невидимых)

 eXeL@B —› Оффтоп —› Макроподстановки на асме
Посл.ответ Сообщение

Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 18 января 2015 04:39
· Личное сообщение · #1

Во многих ЯП есть возможность формировать части текста программы динамически.
Т.е. можно динамически сформировать, применительно к асму, строку типа "mov eax,ebx", динамически же скомпилять (для чего, понятно, надо таскать с собой минимальный компилятор) и вполнить соответствующий кодес.
Не знаю, есть ли реализация сабжа для асма. Да и, главное, нужно ли это?
По сути, как я понимаю, в данном случае речь идет о некой разновидности ВМ (на входе текст - на выходе нативный код)

Добавлено спустя 4 часа 21 минуту
На вид анализ и в статике и в динамике будет непрост



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 07 февраля 2015 07:33 · Поправил: dosprog
· Личное сообщение · #2

--> Тутъ <--

В современном masm'е всё построено на макросах.
Начиная с самого часто используемого <invoke>






Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 07 февраля 2015 13:01 · Поправил: DenCoder
· Личное сообщение · #3

Вопрос непонятно поставлен. По сабжу одно, а в вопросе - другое.

Динамически - компиляция по требованию во время выполнения программы. Программы на C#, на двиге v8, например, такое делают. Компилируются только те части кода, в которых возникла надобность исполнить. Но это прозрачно для разработчика.

Макроподстановки - написание шаблонов кода. Фактический код подставляется вместо макросов на первом проходе компиляции всей программы, а затем уже компилируется весь полученный код.

-----
IZ.RU




Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 08 февраля 2015 18:17 · Поправил: dosprog
· Личное сообщение · #4

Позволю себе добавить, что макроподстановки хороши вмеру.
Увлёкшись, намертво привязываешься к реализации транслятора.

Вообще-то, ещё в TASM'e была директива <IF0> - условие срабатывало только при первом проходе.
Можно организовать разворот макросов при желаемом проходе, если завести счётчик.

Работает это всё таким образом, что транслятор сравнивает результат трансляции при каждом проходе и если на очередном проходе выявлено раскрытие макроса или двоичный результат не совпадает с результатом предыдущего прохода, тогда принимается решение о необходимости ещё одного прохода.
В идеале программы надо составлять так, чтобы обходиться минимальным числом проходов (1 или 2).
В TASM'е при использовании директивы <IF0> и др. чаще всего выдаётся надоедливое предупреждение,
так как такие вещи считаются "костылями".

Моё впечатление, что макропроцессирование это довольно глючная сфера и сильно зависящая от используемого транслятора. На любителя.

DenCoder пишет:
Вопрос непонятно поставлен. По сабжу одно, а в вопросе - другое.


Да, тут какой-то подвох..




 eXeL@B —› Оффтоп —› Макроподстановки на асме

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати