-
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. Если считаете, что мне "совесем не сюда", прошу аргументированно указать... куда ))) Спасибо!
-
Чегой-то не понял, а смысл сего действия в итоге какой должен быть?
-
Как реальный минимум видится сейчас то, что в проекте DELHI в пределах asm.....end; пользоваться если не всеми, то многими прелестями FASM, начиная с flat..... Ну про совместимость и 100% "втягиваемость" основных, боевых, серцевинных, отлаженных кусков (процедур!) любого FASM проекта, Я НЕ ГОВОРЮ ВООБЩЕ! Т.к. считаю, что это вообще на поверхности идеи лежит сразу ;) "Старые" ASM блоки поддерживаются автоматически, как де факто... Хош пиши как раньше, никто не запрещает, хош кинь в тело твоего проекта вылизанную обстрелянную процедуру(ы) FASM, передай ей нужные праметры ПРАВИЛЬНО и возьми на выходе то что нужно ТОЖЕ ПРАВИЛЬНО и все! Скомпилится и заюзается все как надо 1:1 в бинари, передача параметров и данных на совести (компетентности, грамотности) DELHI разработчика. Важное замечание! Про пошаговую fasm отладку кода в IDE я ничего не говорил и не анализировал и не рассматривал, т.к. замахиваться на все и сразу - не моё.
-
Эмм, ну это понятно, токлько не понятно зачем компилятор то патчить? Береш код на асме, при помощи FASM собираешь из него обьектник, обьектник линкуешь в Delphi. Профит.
-
Обьектники, как известно у НИХ разные! Пробовал, нудно, муторно, нужны 2 среды, нужно переколбасивать обьектники, а уж отладка... отдельная боль! Ну поменял я пусть даже чуть чуть в FASM и что? Как ЭТО отразится в DELPHI проекте? А если ошибка? И что крутиться между 2,3,4... жерновами, средами, отладчиками??? Нехоца! Пробовал. Универсальность, всеядность, совместимость, простота, прозрачность... - я это тоже люблю кушать! :) Думаю я не одинок вот.
-
Ну раз так, то флаг в руки - временные затраты будут очень уж велики.
-
Вот попутно у меня мысль вширь пошла ))) и родился ещё вопрос к широким массам ПаскалеЮзабельного общества. Надеюсь на авторитетный, профессиональный ответ знающего! Суть в том, что я вижу сейчас это дело, как патчинг DCC32, но если бы кто нить хоть подсказал, что есть исходники... пусть не DCC32.EXE (DCC70.DLL) я не верю, что они доступны..., а некого аналогичного компилятора и его можно подработать и "подсунуть" вместо существующего DCC70.DLL в IDE. Я НЕ знаком и НЕ юзал аналоги типа лазарусы, фрипаскали и т.д.... Только предполагаю, что сам компилятор должен быть максимально близок в принципе с делфёвым по идее, но не факт. Нужен знающий спец, кто бы мог мне ответить, прокомментировать. Тупо бросаться не моё, обмозговать бы вот. Конечно, в случае наличия возможности собирать компилятор (пусть даже подобный, а не чистый DCCxx , тут может даже интресней перспективы... как знать) отается FASM просто инклудить и привязать правильно внутри! Может я не совсем ясно изложил, но думаю вцелом еще одна альтернатива достижения, это плюс.
-
А конвертация ФАСМ кода в БАСМ код не пойдет?
-
Dufa, об этом и речь - не пойдёт
-
Ну хотелось чтоб ответил ТС..
Самое просто предложение, которое пришло в голову мне: 1. сделать настройку над компилятором фасма (чтоб компилил то что нам надо из ком. строки объектник) 2. если он не подходит (сам не пробовал не знаю) то нужно конвертировать его в нужный для нас формат 3. потом берем расширение DLangExtensions. К нему пишем простой плагин, который находит в сорсе блоки asm..end; а заменяет их на "{$L объектник такой то, вызов такой то функции". Можно даже поиск сделать по блокам fasm..end;
Вот собсно и все.. только ограничения есесно есть, нельзя юзать глобальные переменные и т.д
-
по п.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. - еще несколько костылей... в итоге как это удобно работается и каков "выход" с этого понятно, думаю без обсуждения. Про отладку вообще молчу...
-
Ну мой способ по крайней мере реален =)
> по п.1
если это сделать не реально... то патч делфи сделать легко!
> п.2.
а у фасма какой формат? > по п.3.
Один "костыль" - вполне рабочий..
> Про отладку вообще молчу...
А по-моему должна воркать
-
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. ///////////////////////////////////////////////////////////////////////
|