Конференция "KOL" » FASM in DELPHI... мне очень, а ВАМ? [Delphi, FASM, Windows]
 
  • vastani (20.09.10 11:14) [0]
    0. НЕуважающий, НЕнавидящий ASM использование в языках, дальше не читай здесь, ПОЖАЛУЙСТА! Просто кликни другую ссылку, очень прошу. Блюдущим некую "чистоту религии" в программировании - аналогично...  
    1. люблю альтернативы и возможности, свободу а не преграды творчества. ASM в DELPHI, как и в любых других языках и средах попадает в п.1.
    2. KOL сплошная альтернатива + ASMмовые куски и опимизинг, стало быть "в лузу" п.1. Имхо :)
    3. Мимо FASM ярому ассембрерщику пройти трудно, а ущербный ASM в DELPHI уверенно вызывает оскомину... Хочется "человеческого и гуманного" ассемблера в делфях. Неглубокое исследование последних поколений делфей позволяет сказать, что в плане именно ASM инструкций или возможностей, присутствует усиленная кастрация компиляторов... Вернее сказать а воз и ныне там! Я не увидел ничего радикально нового в компиляторе 2009 года в плане ASM инструкций по сравенению скажем с 5кой! И это в век нарастающей многоголовости CPU и их поколений. Я не собираюсь эффективно управлять головами, просто я за современность и вцелом см. п.1.
    4. Мне интересен симбиоз FASM + DELHI или еще лучше FASM in DELHI! Тут много плюсов, не буду тут долго перечислять их...
    5. "Новодкой" к этому желанию, решению, хотению... и пр. послужили некоторые мои работы, например это:
    http://board.kolibrios.org/viewtopic.php?f=4&t=1422
    таким образом, первый шаг был сделан и в настоящее время имею портированный, рабочий FASM компилятор в делфях на уровне ASM исхождника DELPHI.
    6. Поскольку FASM написан на FASM и объем рабочего бинарного куска копилятора вместе с мнемониками, таблицами и пр. гдг то 90-100 кБ, появилось желание узнать сколько в DCC32 (exe и dll) занимает ИМЕННО ASM компилятор. От 7ки взял обоих и загнал в IDA, полазил, о радость! Они, как и ожидалось близнецы и братья внутри, стало быть исходник один, и ASM компиляторный кусок занимает где то 120-150 кБ!
    7. Итожим. Поскольку "прикрутить" DLLку FASM (типа плугин) к компилятору DCC32 нам никто не дал и вряд ли даст видимо, глядя на текущее положение дел, то напрашивается патчинг DCC32 в плане прямого замещения комиляции конструкций ASM...END; внутренним компилятором FASM. Срвнительные данные по бинари объемам по идее, должны позволить сделать это с лихвой и на высоте качества ИТОГОВОЙ работоспособности DCC32 (возможно понадобится некоторый небольшой код сопряжения-приведения + работа с памятью... обоих...).
    8. Работа не из лёгких и пока висит идейно, посему вопрос самому себе и ВАМ конечно а оно надо только мне???
    Если бы знать, что это стоящее, перспективное занятие и удовлетворит потребность многих таких, как я(!), то не так жалко собственнорго времени, здоровья и фанатизма в конце концов... :)
    Извиняюсь за длинный монолог-размышлизм, но я не люблю недосказов и предпочитаю развёрнутость точки зрения с предпосылками и хронологически.
    Надеюсть на конструктивизм и взвешенность мнений!
    P.S. Если считаете, что мне "совесем не сюда", прошу аргументированно указать... куда ))) Спасибо!
  • Rouse_ © (20.09.10 12:12) [1]
    Чегой-то не понял, а смысл сего действия в итоге какой должен быть?
  • vastani (20.09.10 12:32) [2]
    Как реальный минимум видится сейчас то, что в проекте DELHI в пределах
    asm.....end;
    пользоваться если не всеми, то многими прелестями FASM, начиная с flat.....
    Ну про совместимость и 100% "втягиваемость" основных, боевых, серцевинных, отлаженных кусков (процедур!) любого FASM проекта, Я НЕ ГОВОРЮ ВООБЩЕ! Т.к. считаю, что это вообще на поверхности идеи лежит сразу ;)
    "Старые" ASM блоки поддерживаются автоматически, как де факто...
    Хош пиши как раньше, никто не запрещает, хош кинь в тело твоего проекта вылизанную обстрелянную процедуру(ы) FASM, передай ей нужные праметры ПРАВИЛЬНО и возьми на выходе то что нужно ТОЖЕ ПРАВИЛЬНО и все!
    Скомпилится и заюзается все как надо 1:1 в бинари, передача параметров и данных на совести (компетентности, грамотности) DELHI разработчика.
    Важное замечание!
    Про пошаговую fasm отладку кода в IDE я ничего не говорил и не анализировал и не рассматривал, т.к. замахиваться на все и сразу - не моё.
  • Rouse_ © (20.09.10 12:41) [3]
    Эмм, ну это понятно, токлько не понятно зачем компилятор то патчить?
    Береш код на асме, при помощи FASM собираешь из него обьектник, обьектник линкуешь в Delphi. Профит.
  • vastani (20.09.10 12:56) [4]
    Обьектники, как известно у НИХ разные!
    Пробовал, нудно, муторно, нужны 2 среды, нужно переколбасивать обьектники, а уж отладка... отдельная боль! Ну поменял я пусть даже чуть чуть в FASM и что? Как ЭТО отразится в DELPHI проекте? А если ошибка?
    И что крутиться между 2,3,4... жерновами, средами, отладчиками??? Нехоца! Пробовал.
    Универсальность, всеядность, совместимость, простота, прозрачность... - я это тоже люблю кушать! :)
    Думаю я не одинок вот.
  • Rouse_ © (20.09.10 13:02) [5]
    Ну раз так, то флаг в руки - временные затраты будут очень уж велики.
  • vastani (20.09.10 13:52) [6]
    Вот попутно у меня мысль вширь пошла ))) и родился ещё вопрос к широким массам ПаскалеЮзабельного общества. Надеюсь на авторитетный, профессиональный ответ знающего!
    Суть в том, что я вижу сейчас это дело, как патчинг DCC32, но если бы кто нить хоть подсказал, что есть исходники... пусть не  DCC32.EXE (DCC70.DLL) я не верю, что они доступны..., а некого аналогичного компилятора и его можно  подработать и "подсунуть" вместо существующего DCC70.DLL в IDE. Я НЕ знаком и НЕ юзал аналоги типа лазарусы, фрипаскали и т.д....
    Только предполагаю, что сам компилятор должен быть максимально близок в принципе с делфёвым по идее, но не факт. Нужен знающий спец, кто бы мог мне ответить, прокомментировать. Тупо бросаться не моё, обмозговать бы вот. Конечно, в случае наличия возможности собирать компилятор (пусть даже подобный, а не чистый DCCxx , тут может даже интресней перспективы... как знать) отается FASM просто инклудить и привязать правильно внутри! Может я не совсем ясно изложил, но думаю вцелом еще одна альтернатива достижения, это плюс.
  • Dufa © (22.09.10 17:44) [7]
    А конвертация ФАСМ кода в БАСМ код не пойдет?
  • Dy1 (22.09.10 20:20) [8]
    Dufa, об этом и речь - не пойдёт
  • Dufa © (23.09.10 19:54) [9]
    Ну хотелось чтоб ответил ТС..

    Самое просто предложение, которое пришло в голову мне:
    1. сделать настройку над компилятором фасма (чтоб компилил то что нам надо из ком. строки объектник)
    2. если он не подходит (сам не пробовал не знаю) то нужно конвертировать его в нужный для нас формат
    3. потом берем расширение DLangExtensions. К нему пишем простой плагин, который находит в сорсе блоки asm..end; а заменяет их на "{$L объектник такой то, вызов такой то функции". Можно даже поиск сделать по блокам fasm..end;

    Вот собсно и все.. только ограничения есесно есть, нельзя юзать глобальные переменные и т.д
  • vastani (28.09.10 11:31) [10]
    по п.1 - настройку сделать не получится, т.к. чтобы получить OBJ нужно указать в начале листинга директиву формата вывода. Передача пораметров, допустим через строку не предусмотрена. Плю с гемор передача экспорт-импорт процедур, переменных...
    ...\FASMW\EXAMPLES\MSCOFF\MSCOFF.ASM

    ; example of making Win32 COFF object file
    format MS COFF
    extrn '__imp__MessageBoxA@16' as MessageBox:dword
    .....
    ........

    по п.2. ДА нужно конвертить причем в OBJ DELPHIовский!!!
    по п.3. - еще несколько костылей...
    в итоге как это удобно работается и каков "выход" с этого понятно, думаю без обсуждения. Про отладку вообще молчу...
  • Dufa © (28.09.10 19:33) [11]
    Ну мой способ по крайней мере реален =)


    > по п.1

    если это сделать не реально... то патч делфи сделать легко!

    > п.2.

    а у фасма какой формат?
    > по п.3.

    Один "костыль" - вполне рабочий..


    > Про отладку вообще молчу...

    А по-моему должна воркать
  • vastani (28.09.10 22:14) [12]
    FASMовские OBJ (COFF по сути) лепил в DELPHI проекте так
    del project1.exe fasm.obj
    fasm.exe f6.asm fasm_.obj
    coff2omf.exe fasm_.obj
    OMF2D.exe fasm_.obj fasm.obj /Ofor_OMF\LNames.opt /Ofor_OMF\ENames.opt "/CE_ExtAbsVar=FunctionS" "/SE_ExtAbsVar=0x12345678"
    if exist fasm.obj goto delphi
    pause
    goto end
    :delphi
    DCC32.EXE PROJECT1.DPR -V -Uc:\DELPHI7\Source\KOL -Uc:\DELPHI7\Lib -$W+ -$D+ -$L+ -$O-
    start project1.exe
    :end

    unit FASM;
    interface
    type
      DD = LongWord;
    ///////////////////////////////////////////////////////////////////////
    var
    //   FasmErrStr : string;
    //   memory_setting  : DD;
      memory_start  : DD;
      memory_end  : DD;
      additional_memory : DD;
      additional_memory_end : DD;
      stack_limit       : DD;
      start_time        : DD;
      displayed_count   : DD;
      last_displayed    : WORD;
    ///////////////////////////////////////////////////////////////////////
    procedure preprocessor(); external;
    procedure parser(); external;
    procedure assemble(); external;
    procedure formatter(); external;
    procedure sfasm(); external;
    ///////////////////////////////////////////////////////////////////////
    implementation
    {$L Fasm.obj}
    end.
    ///////////////////////////////////////////////////////////////////////
 
Конференция "KOL" » FASM in DELPHI... мне очень, а ВАМ? [Delphi, FASM, Windows]
Есть новые Нет новых   [120349   +19][b:0][p:0.001]