На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Компиляторы
   
Какой компилятор вы используете чаще всего и почему?
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Мне больше нравится Nasm, т.к. он прост и понятен. Правда я и его возможностями не полностью пользуюсь.
      MASM

      исопользую исключительно из идеологических соображений. Он входит в VS, следственно абсолютно с ним совместим, а в данной среде пишется большинство приложений под винду. Долгое время юзал TASM, компилятор более поддатливый, но старый все-таки. В отличии от TASMа, MASM порой приходится "тыкать носом", что бы он вкурил идею.)))))
        Не голосовал, т.к. нет множественного выбора :)
        TASM/MASM/WASM.
        TASM - просто нравится.
        WASM - потому что это TASM+MMX+SSEx+3DNow!
        MASM - в студию входит, в DDK и много куда ещё. Тоже удобно :)
        LZASM ещё хороший - тот же TASM + новые инструкции.
        По сути на WASM похоже, только у WASM есть ещё с MASM совместимость.
        Цитата
        INTEL ASSEMBLER

        Что это и где можно взять?
        В состав Intel C++ Compiler 10 ассемблер не входит, отдельно тоже не нашёл.
        Сообщение отредактировано: cppasm -
          про это я видел упоминание в мануале по процессорам, но
          я мог ошибиться, компа под рукой нет, пишу по мобильнику.

          Добавлено
          однако я много вариантов пропустил, ну если нужного не найдется, ставьте .другое. и пишите свой.
            пока насм впереди
              Built-In (FPC, Delphi)
                FASM потомучто полностью удовлетворяет потребностям + нравится "синтаксис", никаких лишних букв не нужно. Компилятор + линкер в одном флаконе.
                ИМХО (не компилятор) в FASM удалось реализовать довольно удобный синтаксис, а что касается win32 приложений, то их создание также без лишних телодвижений.
                  TASM, почти везде и для всего, ибо старость не порок, выручают макросы. Люблю его четкий синтаксис и универсальность, позволяющую писать любые проги, благо есть масса сторонних линкеров. Да и его оптимизация кода оставляет приятные впечатления.
                  Цитата
                  INTEL ASSEMBLER
                  Помнится встречалось нечто подобное. Только было это сто лет назад, к тому же примитив. Да и не уверен, что сие поделие имело отношение к Intel :)
                    fasm .. помоему наикрутейший компилятор
                      проголосовав за MASM поставил в один ряд с TASM и FASM :D
                        MASM, но смотрю в сторону FASM, т.к. масм больше не поддерживается и нет и не будет 64 битной версии.
                          Мой выбор остановился на FASM и синтаксис простой, и проблем с компиляцией и сборкой в нем нет. Правда его IDE мне не по нраву поэтому пользуюсь по старинке в стороннем редакторе кода (Code Browser не сочтите за рекламу).
                            Очень часто приходится использовать gas
                            И AT&T ассемблер.
                              я хочу скачать компилятор для того чтобы запускать через программу Scite, не знаю каккой мне нужен. может посоветуете кто работал в Scite?
                                Цитата Mokar @
                                я хочу скачать компилятор для того чтобы запускать через программу Scite, не знаю каккой мне нужен. может посоветуете кто работал в Scite?

                                по идее к SciTE можно прикрутить все, что угодно, если руки прямые
                                  Цитата Mokar @
                                  я хочу скачать компилятор для того чтобы запускать через программу Scite, не знаю каккой мне нужен. может посоветуете кто работал в Scite?


                                  Дожили, компилятор к редактору прикручиваем... :D

                                  Наиболее удобный для меня - FASM, но и MASM тоже для меня на первом месте - больше распространен все-таки. Но фасм - круче!
                                    почему мне нравится FASM?
                                    1. Ему не нужны LIB файлы для статического импорта функций.
                                    2. Чистый и удобный синтаксис, максимальный набор поддерживаемый команд. Отсутствие дирректив-рудиментов аля .386, .486, .386p и т.д. (они есть но уже идут как макросы) и так далее и тому подобное
                                    3. Полный контроль над размещением данных в файле
                                    4. Мощный макроссный движок, ничем не уступающий движку MASM, а в некоторых случаях его превосходящий.
                                    5. При компиляции не создаются *.obj и другие файлы, которые постоянно замусоривают папку с исходником
                                    6. Почти все параметры программы задаются в самом исходнике и не надо колдовать с параметрами командной строки.
                                    Сообщение отредактировано: Ahilles -
                                      Цитата Ahilles @
                                      почему мне нравится FASM?
                                      1. Ему не нужны LIB файлы для статического импорта функций.
                                      2. Чистый и удобный синтаксис, максимальный набор поддерживаемый команд. Отсутствие дирректив-рудиментов аля .386, .486, .386p и т.д. (они есть но уже идут как макросы) и так далее и тому подобное
                                      3. Полный контроль над размещением данных в файле
                                      4. Мощный макроссный движок, ничем не уступающий движку MASM, а в некоторых случаях его превосходящий.
                                      5. При компиляции не создаются *.obj и другие файлы, которые постоянно замусоривают папку с исходником
                                      6. Почти все параметры программы задаются в самом исходнике и не надо колдовать с параметрами командной строки.

                                      Согласен! я тоже использую FASM уже месяц для написания ОСьки:
                                      жалоб - 0,
                                      лишних вопросов - 0,
                                      неудобства компиляция-линкирование - 0.
                                      Вывод:
                                      :good:
                                        Цитата Alex_I @
                                        лишних вопросов - 0,
                                        Ну тогда я задам ;)
                                        1. Для примера возьмем ДОС (хотя можно и под винду, но не важно). Нужно сделать небольшую игрушку, допустим 3D. Я возьму файл DDWARE.LIB, из пакета 3D-WARE и без напрягов использую не только 3D-движок, но и мышку, звук и прочие фичи этой игродельческой либы (написанной на чистом Cи). А как поступишь ты? Будешь все с нуля писать?
                                        2. Чем макросы лучше директив?
                                        3. А какой ассемблер не дает полного контроля? :o
                                        4. А можно подробнее узнать, как ты пользуешься мощью макродвижка фасма? Теория не интересует, мне интересна именно практическая сторона ;)
                                        5. Есть сорс на ассемблере. Нужно его подключить к проекту на Watcom C++. Ваши действия?
                                        6. А в других компиляторах не так? :blink:

                                        Дополнение к первому вопросу, более актуальное. Есть такой пакет LIBJPG. Мультиплатформенный. На нем построено множество вьюнеров граф. файлов, в частности ACDSee. Я вот в досе его подключил к тасму (под 32-х битный защищенный режим) с пол-пинка. Твои действия на фасме?
                                        Сообщение отредактировано: AndNot -
                                          Стоп!Стоп!Стоп! :o
                                          Я не думал, что столько вопросов появится :blink:

                                          Для мультимедийных целей, возможно, ФАСМ и никудышний компилятор, но для системного программирования достаточно прост и удобен. Вот представьте себе такую картину: на экране четыре окна - самодельная программа для записи boot сектора, блокнот с кодом асм-ской программы, командная строка ДОС для запуска компилятора и виртуалка. Мои действия: 1- редактирую код, 2- компилирую, 3- записываю на дискету, 4- проверяю. Процесс не слишком долгий, но когда допустил одну какую ерундовую ошибку и при проверке виртуал комп зависает начинаешь уже методом тыка проверять чуть ли не каждую строку. И в отличии от ТАСМА то, что я в ФАСМЕ одной командной строкой могу скомпилировать код немного, да ускоряет и упрощает работу.

                                          А насчёт мультимедиа приложений, игр и пр. (именно средствами и на платформе Винды) я недалёк... И мало знаю о том какая ДЛЛ-ка для чего служит, я стараюсь своими силами достигать каких-либо результатов - во 1ых набираюсь опыта, и во 2ых своё-есть своё (просто и понятно), а когда используешь чужие библиотеки, движки обязательно в чем нибудь будешь расхлёбывать за чужие ошибки...

                                          Выше сказанное-имхо...
                                            Цитата Alex_I @
                                            Я не думал, что столько вопросов появится
                                            Я не тороплю, подумай прежде чем ответить :yes:
                                            Цитата Alex_I @
                                            И в отличии от ТАСМА то, что я в ФАСМЕ одной командной строкой могу скомпилировать код немного, да ускоряет и упрощает работу.
                                            Мсье никогда не слышал о средствах повышающих удобство работы? Ну тогда для начала держи парочку.
                                            1) bat-файлы. Хороши для простеньких проектов с небольшим количеством файлов. Позволяют по ходу их выполнения менять логику компиляции (редко, но использую). Универсальны. Просты в создании.
                                            2) makefile. Самая мощная фича, созданная именно для экономии времени компиляции. Одним вызовом make.exe перекомпилирует весь проект. Но, главное достоинство в том, что перекомпилируется только то, во что вносились изменения с момента последней компиляции. Т.е. существенно экономит время (в этом и преимущества obj-файлов - что было скомпилировано один раз, то больше не нужно заново перекомпилировать).
                                            3) В любой оболочке (VC, NC, DN, FM) есть пользовательское меню, где можно задать последовательность команд и вызывать ее с помощью горячих клавиш. Это вообще самый быстрый вариант, поскольку в командной строке вообще ничего не нужно писать - навел курсор на файл, нажал кнопочку и получил результат. Огромный плюс еще и в том, что в том же FM встроенный редактор, с настраиваемой подсветкой синтаксиса (для всех языков). Поэтому все действия выполняются не выходя из редактора.
                                            Цитата Alex_I @
                                            А насчёт мультимедиа приложений, игр и пр. (именно средствами и на платформе Винды) я недалёк... И мало знаю о том какая ДЛЛ-ка для чего служит, я стараюсь своими силами достигать каких-либо результатов
                                            Во первых, мультимедиа здесь не причем. Возьмем другой пример. Математические операции по обработке сигналов датчиков. Допустим нужно провести очень много вычислений. На асме такого нет. Зато есть на фортране. Твои действия? А во вторых, не нужно путать DLL и LIB-файлы, это совершенно разные вещи :whistle:

                                            Ну так как, ответ на все эти шесть вопросов получим? Можешь даже за помощью профи сбегать, на форум фанов фасма :D

                                            Добавлено
                                            Цитата Alex_I @
                                            а когда используешь чужие библиотеки, движки обязательно в чем нибудь будешь расхлёбывать за чужие ошибки...
                                            Это ты просто еще не брался за действительно сложные задачи :) Попробуй-ка самостоятельно закодить вьюнер jpg-файлов, не пользуясь сторонними либами ;) Уверяю тебя, быстро надоест и начнеш искать чью-нибудь либу, пускай и рискуя нарваться на чужие ошибки.
                                              Цитата AndNot @
                                              Это ты просто еще не брался за действительно сложные задачи. Попробуй-ка самостоятельно закодить вьюнер jpg-файлов, не пользуясь сторонними либами

                                              какой дурак будет писать такой сложный проект на ассемблере? (всякие психи-одиночки-энтузиасты не в счёт)
                                              на ассемблере пишут участки кода критически важные ко времени выполнения или размеру, да и то не всегда, т.е. по сути ассемблерные вставки. единственный более-менее пригодный к жизни вариант использования ассемблера, в котором модуль будет полностью на асме, это написание драйвера режима ядра или DLL, от которых требуется высокая скорость и минимальный размер. И вот тут я выберу именно FASM.

                                              Добавлено
                                              Цитата AndNot @
                                              3. А какой ассемблер не дает полного контроля?

                                              в FASM можно создать любое количество секций в PE-файле, можно указать их имена и любые атрибуты

                                              Добавлено
                                              Цитата AndNot @
                                              2. Чем макросы лучше директив?

                                              в FASM они сделаны в виде макросов и получается что некоторые программы написанные для MASM можно скомпилить на FASM. а так мне макросы типа .386 в FASM вообще не нужны

                                              Добавлено
                                              Цитата AndNot @
                                              4. А можно подробнее узнать, как ты пользуешься мощью макродвижка фасма? Теория не интересует, мне интересна именно практическая сторона

                                              я бы не сказал что пишу много макросов на FASM, просто набор макросов поставляемых вместе с FASM намного шире и удобнее чем в MASM. Например, для макроса invoke в MASM нужны эти дебильные прототипы. Вопрос: почему нельзя преобразовать одну строку вызова функции в несколько команд push и одну call без прототипов? зачем нужны лишние проверки типов, если в 99,99% API функций принимают в качестве параметров DWORD или указатель, что в ассемблере одно и тоже

                                              Добавлено
                                              Цитата AndNot @
                                              1. Для примера возьмем ДОС (хотя можно и под винду, но не важно). Нужно сделать небольшую игрушку, допустим 3D. Я возьму файл DDWARE.LIB, из пакета 3D-WARE и без напрягов использую не только 3D-движок, но и мышку, звук и прочие фичи этой игродельческой либы (написанной на чистом Cи). А как поступишь ты? Будешь все с нуля писать?

                                              я извиняюсь конечно, если кого-то обижу. я не псих чтобы писать такую прогу на ассемблере .Если при написании какого-либо проекта на языке высокого уровня мне действительно пригодится ассемблер то воспользуюсь ассемблерными вставками, а если они меня не устроят, то напишу DLL с критическими функциями на асме и в проге заюзаю эту DLL.
                                              Сообщение отредактировано: Ahilles -
                                                Ahilles, ты понимаешь, что своим постом обижаешь уйму народу?
                                                Цитата Ahilles @
                                                какой дурак будет писать такой сложный проект на ассемблере? (всякие психи-одиночки-энтузиасты не в счёт)

                                                Цитата Ahilles @
                                                я не псих чтобы писать такую прогу на ассемблере .
                                                Я знал человека, который на асме писал с моей скоростью на C. Как раз за счёт наработанных макросов, не только своих, естественно. Его сырцы больше asm++ напоминали. Ты писал виртуальные драйверы для Win3xx и Win9x? Во времена VC5 и выше их уже можно было писать на С и даже местами С++. Так же на них неплохо пишутся WDM. Но до тех пор основным инструментом был ассемблер. Если посмотреть в DDK тех времён, VxD-драйверы тогда выглядели скорее как Сшные сырцы, ибо наборы макросов в DDK позволяли поднять "умность" компилятора на уровень ЯВУ. И зачастую макросы при компиляции отлавливали такие ошибки, как неверное использование стека, несогласованность вызова функции, "порчу" регистров итп. (Кстати, объявление сущности до её использования - это не только требование многих ЯВУ, это и просто признак хорошего тона и программиста-мастера, который думает о себе и коллегах. Так что наличие прототипов мною только приветствуется.) Но гораздо важнее были их способности к универсальности. Параметризация поведения по скорости или по количеству используемых им регистров, например. Всё это было очень важным, ибо ядерная отладка в те времена была вещью очень муторной.
                                                В то время мне лично писать на асме было куда прикольней. Зацени, к примеру, этот фрагмент, который по IRQ от устройства вызывает каллбак в юзермоде (который Win16; если клиент Win32, там проще):
                                                ExpandedWrap disabled
                                                          EXTERN C signal16:near32        ;функция сигнализации в Win16-приложение
                                                          EXTERN C mtxWin16:dword         ;мьютекс критической секции
                                                   
                                                  ; callback функция для сигнализации в Win16-приложение
                                                  ; C-функция, публичная, кадр стека адресуется через ESP, блокирована в памяти
                                                  BeginProc LCODE_signal2win16, CCALL, PUBLIC, ESP, LOCKED
                                                          LocalVar npxData, 108           ; контекс FPU
                                                          EnterProc                       ; пролог
                                                          SaveReg <edx, ebp>              ; сохранение регистров
                                                          VMMCall _EnterMutex, <mtxWin16, BLOCK_THREAD_IDLE> ; захват мьютекса
                                                          RestoreReg <ebp, edx>           ; восстановление регистров
                                                          Push_Client_State               ; сохранить клиентские регистры
                                                          fnsave [npxData]                ; сохранить контекст FPU
                                                          cCall signal16, <EDX, EBP>      ; вызвать C-функцию (сырец ниже)
                                                          frstor [npxData]                ; восстановить контекст FPU
                                                          Pop_Client_State                ; восстановить клиентские регистры
                                                          VMMCall _LeaveMutex, <mtxWin16> ; освободить мьютекс
                                                          LeaveProc                       ; эпилог
                                                          Return                          ; возврат
                                                  EndProc LCODE_signal2win16
                                                и сравни с Сшной signal16():
                                                ExpandedWrap disabled
                                                  // Сигнализация Win16-приложению
                                                  void signal16(PIR_LIST curNode, PCRS clientReg)
                                                  {
                                                   // Указатель на структуру связи, подготовленную библиотеками
                                                   PVOID synk= (PVOID )curNode->pOverlap.linAddr;
                                                   // handle IRQ
                                                   DWORD hIrq=*(PDWORD)((PBYTE)synk + 1 + sizeof(OVERLAPPED) + sizeof(DWORD)*6);
                                                   // Адрес FAR-функции в Win16-приложении
                                                   DWORD func=*(PDWORD)((PBYTE)synk + 1 + sizeof(OVERLAPPED) + sizeof(DWORD)*2);
                                                   // Параметр для FAR-функции в Win16-приложении
                                                   DWORD stat=*(PDWORD)curNode->outBuffer.linAddr;
                                                   
                                                   Begin_Nest_Exec();                     // Начать вложенное исполнение в VM
                                                   Simulate_Push(stat>>16);               // Поместить в стек клиента 32-битный
                                                   Simulate_Push((WORD)stat);             //  параметр для Win16-функции
                                                   Simulate_Push(hIrq>>16);               // Поместить в стек клиента 32-битный
                                                   Simulate_Push((WORD)hIrq);             //  handle IRQ
                                                   VMMCall(Disable_VM_Ints);              // Запрет прерываний в VM
                                                   // Установить для Win16-клиента его регистр DS
                                                   clientReg->Client_DS=*(PWORD)((PBYTE)synk+1+sizeof(OVERLAPPED)+sizeof(DWORD)*3);
                                                   // "Вызвать" на стеке Win16-функцию как FAR PASCAL
                                                   Simulate_Far_Call((WORD)(func>>16), (WORD)func);
                                                   // Возобновить исполнение в VM (с изменённым конекстом)
                                                   Resume_Exec();
                                                   // Функция клиента отработала
                                                   End_Nest_Exec();                       // Закончить вложенное исполнение в VM
                                                  }


                                                Подредактируй, пост, плз. Если ты не используешь макросы и поэтому не пишешь больших проектов на ассемблере, это не значит, что те, кто этим занимаются, заслуживают унижения.

                                                P.S. Посмотри ещё в сторону эзотерического программирования. Получается, эти люди ещё опаснее психов, по-твоему?
                                                  Я не отрицаю многие драйвера для Win3xx и Win9x писались на ассемблере. Но Win3xx и Win9x это прошлый век и с этим не поспоришь. Я сказал что есть более-менее пригодные к жизни варианты использования ассемблера в современных условиях, это написание драйвера режима ядра или DLL. И вопрос был какой ассемблер лучше при таких вариантах использования.

                                                  Цитата Qraizer @
                                                  Подредактируй, пост, плз. Если ты не используешь макросы и поэтому не пишешь больших проектов на ассемблере, это не значит, что те, кто этим занимаются, заслуживают унижения.

                                                  я говорю что в современных условиях писать большие проекты полностью на асме это мазохизм! согласись это так!

                                                  Разговор вроде был про ассемблеры FASM и MASM, поэтому не будем отступать от темы. В начале я юзал MASM, но потом я перешёл на FASM, по однйо простой причине : надо было написать несколько взаимосвязанных DLL файлов, в MASM надо скомпилить DLL'ку, притом чтобы задать имена экспортируемых функций надо создать def-файл. После компиляции сделать LIB-файл и только после этого становится возможным скомпилить следующую DLL. в FASM всё элементарно: есть макросы library и import для создания таблицы импорта, т.е. я могу скомпилить файл без наличия DLL из которой импортируются функции, нет гемора с LIB файлами. Есть маркос export для создания таблицы экспорта, не нужен DEF-файл. В результате у нас только файл исходника, в котором есть всё для компиляции.
                                                    Куски VxD тут приведены не более чем для примера грамотного использования макросов. Используя подобную соответствующую задаче библиотеку, можно писать очень быстро и безошибочно. DDKшная вот ориентирована на Win9x raw kernel API. Несложно представить себе библиотеку для Win32 API, или ввода/вывода, или ещё чего. Да хоть STLных контейнеров. Так что "современные большие проекты" не только мазохисты могут писать. Достаточно любить ассемблер.
                                                    :offtop: Мне рассказывали об игромане, который в стратегии реального времени играл джойстиком зачастую не хуже, чем его оппоненты мышкой+клавой. Мазохист? :wacko:
                                                      ладно. не буду дальше холиварить
                                                        Народ,всем привет ,а как установить этот MASM подскажите ?
                                                          Наверху раздела есть прибитая тема. Вон та ссылка подойдёт?
                                                            а я пишу свой собственный ассемблер.
                                                            теперь он стал уже многопроходным.

                                                            Прикреплённый файлПрикреплённый файлАссемблер.RAR (22,23 Кбайт, скачиваний: 299)
                                                            Сообщение отредактировано: Aleksandr__ -
                                                              Если бы у Nasm было IDE, наверное он был бы как Fasm.
                                                              Думаю, что это очень важно когда проект современен, развивется и имеет поддержку.
                                                              Это само собой побуждает людей вносить свои вклады в развитие кампилятора.
                                                              Наверное, кроме nasm/fasm/yasm всё на сегоднешний день заброшенно.
                                                              Нарпример, я видел на форуме fasm кто-то придумал движёк прикрутить регулярные выражения к fasm.
                                                              Да и ошибки исправляются, и поддержка x64 налаживается.
                                                              Одно плохо, программирование это трудно всётаки :D
                                                                Боюсь, что чаще всего Open Source кончает плохо, именно из-за слишком большого количества желающих приобщиться, но имеющих свои взгляды на вещи :D
                                                                А развитие фасма - не показатель. Просто масму и тасму уже практически нечего развивать, у них и так все есть, проверенное и отточенное многими годами и ни один конкурент пока еще и близко к ним не подошел ;)

                                                                PS: ИМХО. Был когда то замечательный проект: C--. Но, к сожалению, автор со временем отказался от него, так и не сумев найти надежную концепцию смеси асма и Си. Идеей загорелся наш соотечественник, возродив проект под именем Sphinx C--. Но и он его забросил, видимо так и не справившись с некоторыми трудностями слияния си и асма. На мой взгляд, именно в этом направлении и нужно развивать асм - мощность Си и гибкость асма. А просто развитие асма - дорога в тупик, не соответствует асм современным требованиям к написанию программ. В Борланде это поняли первыми. Затем осознали в Микрософте. Кто следующий?
                                                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                0 пользователей:


                                                                Рейтинг@Mail.ru
                                                                [ Script execution time: 0,0704 ]   [ 20 queries used ]   [ Generated: 19.04.24, 20:09 GMT ]