На каких ассемблерах вы пишете чаще всего?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Jin X, 17 янв 2018.

?

На каких ассемблерах вы пишете ЧАЩЕ ВСЕГО? (читайте примечание в теме)

  1. Macro Assembler (MASM)

  2. Turbo Assembler (TASM)

  3. Flat Assembler (fasm)

  4. Netwide Assembler (NASM), YASM (включая NASM в SASM IDE с его макросами)

  5. GNU Assembler (GAS)

  6. WASM и его потомки: UASM/HJWASM, JWASM

  7. GoAsm (отдельно GoLink не считается)

  8. Pelle Orinius Assembler (PoAsm)

  9. Ассемблер, встроенный в языки высокого уровнях (C++, Delphi, etc... напишите!)

  10. Ассемблер в emu8086 (TASM-подобный, не fasm !!!)

  11. Flat Assembler G (fasmg) [укажите в теме – для каких архитектур используете !!!]

  12. Atmel AVR Assembler (или другой AVR-ассемблер, но не fasmg... напишите!)

  13. FASMARM и другие ARM-ассемблеры (напишите в теме – какой именно!)

  14. Другие ассемблеры для архитектур, совместимых с IA-32/Intel 64 (напишите!)

  15. Другие ассемблеры для архитектур, НЕ совместимых с IA-32/Intel 64 (для микроконтр, 8-бит, напишите!)

  16. Я не пишу на ассемблере :(

  17. High-level Assembler/Assembly (HLA, HLASM)

Можно выбрать сразу несколько вариантов.
Результаты будут видны только после голосования.
  1. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Код (ASM):
    1. OPTION PROLOGUE:rbpFramePrologue
    2. OPTION EPILOGUE:rbpFrameEpilogue
    ???
    Не пашет это, если у процедуры нет параметров и локальных переменных. Приходится делать вот так:
    Код (ASM):
    1. WinMain        PROC    Dummy:QWORD
    2.                invoke    GetModuleHandle, NULL
    3.                invoke    DialogBoxParam, rax, IDD_MAIN, HWND_DESKTOP, &DialogProc, NULL
    4.                invoke    ExitProcess, NULL
    5. WinMain        ENDP
    Dummy:QWORD
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    7
    Регистрация:
    25 июн 2008
    Сообщения:
    2.631
    Jin X,
    еще есть PoAsm PoLink который понимает х64 invoke SimpleWindow
     
  3. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Хорошо, спасибо, посмотрю что там... ;)

    Ещё нюанс в том, что нет единой версии ML64. Нужно ставить Visual Studio и оттуда выдёргивать. Соответственно, на 2010 и 2017 будут разные версии, которые могут иметь свои нюансы...
    Можно 2017 назвать "последней версией" (условно), но не у каждого 2017-я стоит + где отдельно скачать ML64 с линком и пр. приблудами – х/з.
     
  4. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Можно тогда уж UASM использовать... :)
    Кстати, этот самый PoAsm – это откуда штука? Pelles Assembler типа? Им вообще кто-нибудь пользуется? Вернее сказать, он обновляется или это какая-то старая заброшенная штука?
     
  5. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.392
    Адрес:
    г. Санкт-Петербург
    Тем, что GCC компилит сначала в ASM, а затем уже асм компилит в бинарь.
    Попробуйте запустить что-нибудь в духе:
    Код (Text):
    1.  
    2. gcc -S hello_world.c -o hello_world.s
    3.  
    Ну и опять же, синтаксис инлайн асма у GCC по дефолту именно GASовый.
     
  6. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    А, ну если писать код на Си + асм, тогда ок. А если на чистом асме (пусть даже с libc), тогда без раницы что юзать...
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    7
    Регистрация:
    25 июн 2008
    Сообщения:
    2.631
    Поставил Visual Studio 2017. Компилятор ml64 (ver 14.00.24225.1) и линкер link (14.00.24225.1) в VS17 из Visual Studio 2015
    Вроде бы там и форум есть, жизнь конечно не бурлит, но, IMHO, Pelle Orinius свой компилятор и IDE не забросил
    На masm32.com существует ветка форума Poasm
     
  8. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    :good:
    А нельзя вставить в опрос пункт "Pelle Orinius Assembler (PoAsm)" ?
    Или заменить им High-Level Assembler, а тот перенести в конец... (пока голосов за него всё равно нет).
    p.s. Чтобы голоса не сбросились только...
     
  9. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Интересно, что на разных форумах результаты разные.
    Здесь MASM и fasm в явных лидерах и наравне, а на forum.sources.ru TASM имеет больше всего голосов, а fasm как-то не очень :)

    p.s. На кибере вообще тухляк... вроде самый крупный форум, а активность только у студаков... Там тема дольше всего висит (уже больше недели), общения почти нет, голосов мало.
     
  10. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Нет, не добавил.
    Если кто может подсобить по этому поводу, вот тема: https://board.flatassembler.net/topic.php?t=19873
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    7
    Регистрация:
    25 июн 2008
    Сообщения:
    2.631
    Jin X, попробуй такой же опрос провести на board.flatassembler.net и почему-то я догадываюсь
    ну конечно fasm, разве может быть иначе
    :yes3:
     
  12. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Ну там понятно, а эти же форумы (wasm, sources) вроде как особо не привязаны к какому-то конкретному диалекту/компилятору :)
     
  13. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    88
    Сейчас использую линкер PoLink, по сравнению с MS код более компактный, нету мусора между дос- стуб и PE заголовком, минимальный размер программы 1 кб с выравниванием 0.5 кб. И это без всяких манипуляций.
    Всё таки в МАСМе возможности встроенных макрокоманд .if, .while, .until ограничены, а сам макропроцессор имеет ряд ограничений и багов. Которые не кто исправлять не собирается. В общем, есть идея, создать свой внешний препроцессор для МАСМа. Операторы if, while, for, выражения с приоритетом и без ограничений. выражение xmm2 = xmm8*eax/param вычисляются без проблем. Виртуальные методы, наследования структур-классов. Вот такие языки как С++, поддерживают ассемблер, а вот сам ассемблер плохо поддерживают конструкции высокого уровня(С++). И неплохо бы создать утилиту типа cfront, которая такие конструкции транслирует в асм код, который затем МАСМом компилируется. Можно не сразу компилировать, и сначала промежуточный код подкорректировать. Как то так.
     
  14. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Intro, это всё прикольно, но сразу вопрос номер уно. Вот мы пишем: eax = ebx/ecx. Нужно ли восстанавливать edx после этой операции? Откуда транслятор это должен знать? Нагромождать операцию деления лишними опциями или прописывать их заранее? А как определить "знаковость" деления? И таких вопросов будет много. С SSE, конечно, попроще.
    Конструкции .IF и иже с ним оттого и ограничены, что не используют промежуточных регистров. И при этом мы имеем тупо выглядящие конструкции типа .IF sdword ptr eax > ebx просто для знакового сравнения. ИМХО, все эти высокоуровневые приблуды для асма – это очередные костыли, либо уже не ассемблер.
    Ну и вопрос номер дуэ: нахуа зачем всё это? Надо удобство, пиши на C++ (и юзай интринсики, когда надо). Нужно ощущение свободы, юзай асм. Делай obj'и и lib'ы и соединяй, если нужно.
    Не более, чем ИМХО, может, вы конечно, очередной Стив Воняк гений и что-то невообразимое придумаете – с меня аплодисменты в этом случае :)
     
  15. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    88
    Мне надо для проекта XRayExtensions(расширения игрового движка XRay, культовой игры С.Т.А.Л.К.Е.Р.). Писать чисто на асме сложно, и нужна портируемость для проектов на основе исходников(С++), причем обратная.
    В общем, языки высокого уровня слишком своевольны, оптимизация, да, работает, но не во всех случаях, лепят код как хотят, есть ограничения. И можно ли использовать, например С, в этом проекте, не знаю, у меня С не слишком хорошо. Есть ещё С-- сфинкс, там тоже всё, не очень хорошо, зачем то отдельные условные операторы(длинно, далеко) if, IF, нет приоритетов в выражениях, оптимизация хромает. И так же не понятно как подключить к проекту.
    Сейчас идея такая. Операторы
    Код (C):
    1. if(условия){}, while(условия){}, for(инит;условия;итератор){}
    почти как в С, так надо чтобы надёжно отличать наши конструкции, от чисто МАСМских, плюс выражения. В выражениях используются неявно регистр eax, xmm0 и сверх локальные переменные, так же есть идея использовать кроме уже существующих локальных переменных, локальные переменные регистры. Типа так local_reg param1:edx, param2:float ptr xmm2. В МАСМЕ это так делаться, param1 equ edx. Так мы сможем в выражениях определять свободные регистры, которые ненужно сохранять. Так же надо добавить макрооператор TYPENAME, возвращает строкой имя типа переменной. Всё это делает транслятор, который из наших исходников создаёт asm файлы, которые затем компилируются МАСМом. Я думаю назначить расширения такого языка: asmpp, на манер С++, так надо чтобы синтаксис в IDE определить как смесь ассемблера и С. Ещё надо отказаться от символа комментария ";", и назначить вместо его // и /* */, но это только в расширенных блоках.
    Вот такие идеи. Возможно что-то потом дополню, или переделаю.
    Хотя, не знаю, возможно надо просто переделать проект на FASM, там вроде возможности повыше чем в MASM'е.
     
    Последнее редактирование: 28 мар 2018
  16. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    Хотел как раз предложить: не проще ли добавить нужные конструкции в синтаксис языка, назвав его как-нибудь типа "IntroMASM" :) и написать препроцессор, чем ковыряться в кривых макроопределениях MASM'а? Помимо fasm'а можете ещё fasmg посмотреть в плане макросов (на том же сайте).
    Кстати, есть ещё всякие HLA, HLASM. Может, там есть то, что вам нужно? (Сам не вникал)
     
  17. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    88
    Макросы можно тут взять.
    http://dsmhelp.narod.ru/environment.htm
    Файл masm64\include\temphls.inc
    Для МАСМ64, переделать для МАСМ32 не проблема. Хотя там с ограничениями, но можно условия задавать в строках "", это чтобы проблем не было с символами < и >.
     
  18. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    88
    Вероятно HLA самое то, посмотрим, хотя синтаксис С мне больше нравится, но для выражения использовать ":=" лучшее решение, чтобы чисто с МАСМским "=" не пересекался. Ещё преимущество такого решения, это оптимизация. Понятно eax=0, заменим на xor eax,eax, eax=1 на xor eax,eax/inc eax и так далее.
     
  19. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    267
    Адрес:
    Кольца Сатурна
    А вот и ещё один вопрос. Почему xor+inc? Может, мне критический важна скорость и я предпочту mov? ИМХО, xor и or (для -1), остальное опционально.
    В temphls есть пара не очень приятных моментов: например, если функция не имеет параметров и локальных переменных, пролог не генерируется. И ещё там что-то. Я даже на эту тему создавал топик, только не здесь.
     
    Последнее редактирование: 30 мар 2018
  20. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    88
    После более тщательного анализа конструкции ассемблера, пришёл в выводу, что надо просто перехватывать операторы .if, .endif и др. Так же добавить новые операторы, .expr - вычислить выражения, и ещё некоторое операторы. Так же добавить полноценный макроязык программирования, думаю лучше всего взять Lua за основу, есть полноценные С-строки, ассоциативные массивы (таблицы), тип number это double, и так далее. С таким макроязыком не будет каких либо ограничений. Макропроцессор МАСМа делал какой идиот, в натуре идиот, наворотил на нашу голову и ещё себя умным считает.