Fasm или nasm что лучше

Fasm или nasm что лучше

Хотя они же не очень и отличаются. зная один не вопрос перейти на другой asm (под Win32 конечно, синтаксис Unix систем таки другой. )

TASM это прошлое, толком ничего не поддерживает и был заброшен разработчиком (Borland) лет 10 назад. Не рекомендую им пользоваться и уж тем более новичкам.

veter_s_morya, FASM это будущее.
Почему я выбрал этот компилятор?
1. Чистый синтаксис, без лишних и рудиментарных дирректив от которых никакого толку (например, .386, offset и ещё куча).
2. Полный контроль над расположением данных в файле. При программировании под windows мы имеем полный контроль над секциями в PE-файле (можно указать имя и любые атрибуты).
3. При компиляции не надо никаких LIB файлов, от которых в большинстве случаев тоже никакого толку. (при программировании под Windows по любому надо использовать функции из KERNEL32.DLL)
4. У него есть свой собственный редактор. Но более важно что при компиляции через командную строку не надо указывать кучу параметров чтобы прога скомпилилась как надо. Надо указать просто путь к файлу исходника, всё остальное задаётся в самом исходнике.
5. Мощнейший макросный движок!
6. Поддерживает почти все команды x86-64.

Главное отличие FASM и MASM состоит в использовании имен переменных.
Например:
var1 dd 0
в MASM
mov eax, var1 и mov eax, [var1] одно и тоже! в eax будет помещено значение переменной var1. т.е. если не указаны квадратные скобки, то всё равно считается что они указаны. Именно это и не нравится
в FASM
mov eax, var1 ; в eax будет указатель на var1
mov eax, [var1] ; в eax будет помещено значение переменной var1
в MASM чтобы получить указатель надо написать offset

Источник

За что я люблю Assembler?

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Оговорочки

Хочу сразу оговориться, что правильно говорить не «ассемблер» (assembler), а «язык ассемблера» (assembly language), потому как ассемблер – это транслятор кода на языке ассемблера (т.е. по сути, программа MASM, TASM, fasm, NASM, UASM, GAS и пр., которая компилирует исходный текст на языке ассемблера в объектный или исполняемый файл). Тем не менее, из соображения краткости многие, говоря «ассемблер» (асм, asm), подразумевают именно «язык ассемблера».

Синтаксис директив, стандартных макросов и пр. структурных элементов различных диалектов (к примеру, MASM, fasm, NASM, GAS), могут отличаться довольно существенно. Мнемоники (имена) инструкций (команд) и регистров, а также синтаксис их написания для одного и того же процессора примерно одинаковы почти во всех диалектах (заметным исключением среди популярных ассемблеров является разве что GAS (GNU Assembler) в режиме синтаксиса AT&T для x86, где к именам инструкций могут добавляться суффиксы, обозначающие размер обрабатываемых ими данных, что бывает довольно удобно, но там есть и другие нюансы, сбивающие с толку программиста, привыкшего к классическому ассемблеру, к примеру, иной порядок указания операндов, хотя всё это лечится специальной директивой переключения в режим классического синтаксиса Intel).

Поскольку ассемблер – самый низкоуровневый язык программирования, довольно проблематично написать код, который корректно компилировался бы для разных архитектур процессоров (например, x86 и ARM), для разных режимов одного и того же процессора (16-битный реальный режим, 32-битный защищённый режим, 64-битный long mode; а ещё код может быть написан как с использованием различных технологий вроде SSE, AVX, FMA, BMI и AES-NI, так и без них) и для разных операционных систем (Windows, Linux, MS-DOS). Хоть иногда и можно встретить «универсальный» код (например, отдельные библиотеки), скажем, для 32- и 64-битного кода ОС Windows (или даже для Windows и Linux), но это бывает нечасто. Ведь каждая строка кода на ассемблере (не считая управляющих директив, макросов и тому подобного) – это отдельная инструкция, которая пишется для конкретного процессора и ОС, и сделать кроссплатформенный вариант можно только с помощью макросов и условных директив препроцессора, получая в итоге порой весьма нетривиальные конструкции, сложные для понимания.

Откуда растут ноги?

Ассемблером я увлёкся лет в 12–13, и он меня изрядно «затянул». Почему?

Но с тех пор прошло уже более 2-х десятков лет, и сейчас экономия памяти (особенно дисковой) в подавляющем большинстве случаев уже не так актуальна, да и скорости современных процессоров для выполнения повседневных задач вполне хватает (популярность языков сверхвысокого уровня подтверждает это, хотя закон Вирта никто не отменял). А современные компиляторы зачастую могут оптимизировать код по скорости даже лучше человека. Что же может привлекать программиста в ассемблере, ведь исходники на нём гораздо более объёмные и сложные, а на разработку требуется больше времени и внимания (в т.ч. на отладку)?

Вон оно что!

Приведу свои доводы относительно того, чем так хорош ассемблер.

В ассемблере есть особая магия и притягательность! Но справедливости ради скажу, что писать всегда на ассемблере – занятие не очень разумное с точки зрения времени, усилий, вероятности допустить ошибку и кроссплатформенности (я сам реже пишу на ассемблере, нежели на других языках). Не так часто нам требуется полный контроль над кодом и столь уж жёсткая оптимизация, когда экономия пары тактов процессора имеет критически решающее значение.

На том же C/C++ можно написать практически всё, что можно написать и на ассемблере, причём сразу под десяток платформ и ОС, включая и выключая отдельными опциями компилятора использование различных наборов инструкций, векторизацию, оптимизацию и пр.

Но иногда использование ассемблера действительно оправдано (пример). Часто ассемблер хорошо использовать в виде вставок в код на ЯВУ (посмотрите RTL-модули Delphi, там этого добра в изобилии). Да и использование интринсиков, как правило, не имеет смысла (или даже опасно) без знания ассемблера.

Подытожим…

Итак, приведу неполный перечень того, в каких случаях используется ассемблер.

Быть или не быть?

Так, нужно ли изучать ассемблер современному программисту? Если вы уже не новичок в программировании, и у вас серьёзные амбиции, то изучение ассемблера, внутреннего устройства операционных систем и функционирования железа (особенно процессоров, памяти), а также использование различных инструментов для дизассемблирования, отладки и анализа кода полезно тем, кто хочет писать действительно эффективные программы. Иначе будет сложно в полной мере понять, что происходит «под капотом» любимого компилятора (хотя бы в общих чертах), как оптимизировать программы на любом языке программирования и какой приём стоит предпочесть. Необязательно погружаться слишком глубоко в эту тему, если вы пишете на Python или JavaScript. А вот если ваш язык – C или C++, хорошенько изучить ассемблер будет полезно.

Вместе с тем, необходимо помнить не только о «тактике», но и о «стратегии» написания кода, поэтому не менее важно изучать и алгоритмы (правильный выбор которых зачастую более важен для создания эффективных программ, нежели низкоуровневая оптимизация), шаблоны проектирования и многие другие технологии, без которых программист не может считать себя современным.

Это будет полезно

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Если вы решили изучить ассемблер и окунуться в низкоуровневое программирование, вам будет полезна следующая литература:

Компиляторы и инструменты:

Все эти ссылки (а также множество других, которые не вошли в эту статью) вы можете найти, кликнув сюда.

Также хочу пригласить вас в наш уютный «ламповый» раздел Assembler Форума на Исходниках.Ру 😉

Кто интересуется демосценой и сайзкодингом, welcome here.

Источник

MASM, TASM, FASM, NASM под Windows и Linux

В данной статье я хочу рассмотреть вопросы, которые могут возникнуть у человека, приступившего к изучению ассемблера, связанные с установкой различных трансляторов и трансляцией программ под Windows и Linux, а также указать ссылки на ресурсы и книги, посвященные изучению данной темы.

Используется для создания драйверов под Windows.

По ссылке переходим на сайт и скачиваем пакет (masm32v11r.zip). После инсталляции программы на диске создается папка с нашим пакетом C:\masm32. Создадим программу prog11.asm, которая ничего не делает.

Произведём ассемблирование (трансляцию) файла prog11.asm, используя ассемблер с сайта masm32.

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше
Ключ /coff используется здесь для трансляции 32-битных программ.
Линковка производится командой link /subsystem:windows prog11.obj (link /subsystem:console prog11.obj)

MASM — один из немногих инструментов разработки Microsoft, для которых не было отдельных 16- и 32-битных версий.

Также ассемблер версии 6. можно взять на сайте Кипа Ирвина kipirvine.com/asm, автора книги «Язык ассемблера для процессоров Intel».

Кстати, вот ссылка на личный сайт Владислава Пирогова, автора книги “Ассемблер для Windows”.

MASM с сайта Microsoft

Открываем этот файл архиватором (например 7zip). Внутри видим файл setup.exe, извлекаем его, открываем архиватором. Внутри видим два файла vc_masm.msi,vc_masm1.cab. Извлекаем файл vc_masm1.cab, открываем архиватором. Внутри видим файл FL_ml_exe_____X86.3643236F_FC70_11D3_A536_0090278A1BB8. Переименовываем его в файл fl_ml.exe, далее, произведём ассемблирование файла prog11.asm, используя ассемблер fl_ml.exe.

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

MASM в Visual Studio

Также MASM можно найти в папке с Visual Studio (у меня VS 10) вот здесь: C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\ml.exe.

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Для того, чтобы запустить на 32- или 64-разрядной системе и создавать программы, работающие как под 32-, так и под 64-разрядной Windows, подходит MASM32 (ml.exe, fl_ml.exe). Для того, чтобы работать на 32- и 64-разрядных системах и создавать программы, работающие под 64-разрядной Windows, но неработающие под 32-разрядной нужен ассемблер ml64.exe. Лежит в папке C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\amd64 и вот здесь — C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\x86_amd64.

Программный пакет компании Borland, предназначенный для разработки программ на языке ассемблера для архитектуры x86. В настоящее время Borland прекратила распространение своего ассемблера.

Скачать можно, например, здесь. Инсталлятора нет, просто извлекаем программу. Вот исходник из книги Питера Абеля (рис. 3.2) «Язык Ассемблера для IBM PC и программирования».

Выполним ассемблирование (трансляцию) файла abel32.asm.

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Корректность работы программы можно проверить, произведя линковку (tlink.exe) объектного файла и запустив полученный файл в отладчике.

Как было сказано выше, MASM можно использовать для работы с 16-битными программами. Выполним ассемблирование (трансляцию) программы abel32.asm с помощью ассемблера MASM:

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Ключ /coff здесь не используется.
Линковка производится файлом link16.exe

В статье Криса Касперски «Сравнение ассемблерных трансляторов» написано, что «FASM — неординарный и весьма самобытный, но увы, игрушечный ассемблер. Пригоден для мелких задач типа „hello, world“, вирусов, демок и прочих произведений хакерского творчества.»

Скачаем FASM с официального сайта. Инсталлятора нет, просто извлекаем программу. Откроем fasm editor — C:\fasm\fasmw.exe. В папке C:\fasm\EXAMPLES\HELLO есть файл HELLO.asm.

Откроем файл HELLO.asm из fasmw.exe. Изменим строку include ‘win32ax.inc’ на строку include ‘c:\fasm\INCLUDE\WIN32AX.INC’. Запускаем из меню Run → Run.

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Вот ссылки на ресурсы, посвященные FASM:

Для того, использовать FASM в Linux (у меня Ubuntu), скачаем соответствующий дистрибутив (fasm-1.71.60.tgz), распакуем его, в папке у нас будет бинарный файл fasm, копируем этот файл в /usr/local/bin для того, чтобы можно было запускать его из консоли, как любую другую команду.Выполним ассемблирование программы hello.asm из папки fasm/examples/elfexe/hello.asm.

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Корректность работы программы можно проверить в отладчике.

Nasm успешно конкурирует со стандартным в Linux- и многих других UNIX-системах ассемблером Gas.

Nasm в Linux можно установить его с помощью менеджера пакетов или из командной строки: в дистрибутиве Debian (Ubuntu) командой apt-get install nasm, в дистрибутивах Fedora, CentOS, RedHat командой yum install nasm.

Создадим программу, которая 5 раз выводит сообщение “Hello”. Пример взят из книги Андрея Викторовича Столярова “Программирование на языке ассемблера NASM для ОС UNIX”. Учебник, а также библиотека “stud_io.inc” есть на личном сайте автора.

Выполним ассемблирование и линковку и запустим файл hello.asm.

NASM для Windows можно установить, скачав соответствующий дистрибутив с соответствующего сайта.

Ссылки на ресурсы, посвященные Nasm:

Стандартный ассемблер практически во всех разновидностях UNIX, в том числе Linux и BSD. Свободная версия этого ассемблера называется GAS (GNU assembler). Позволяет транслировать программы с помощью компилятора GCC.

Из учебников удалось найти только книгу на английском «Programming from the ground up». На русском удалось найти только одну главу из книги С. Зубкова «Assembler для DOS, Windows и UNIX».

Возьмем пример программы, которая ничего не делает, с сайта. Создадим программу gas.s

Выполним ассемблирование (трансляцию), линковку и запуск программы:

Если в данной программе изменить _start на main, то можно выполнить ассемблирование (трансляцию) и линковку компилятором gcc.

Выполним ассемблирование (трансляцию), линковку и запуск программы:

Выводы: если вы изучаете программирование под Windows, то вы можете остановить свой выбор на Masm; Tasm больше не поддерживается, но для обучения по старым классическим учебникам подойдёт.
Под Linux Gas подойдет тем, кто использует GCC, а тем, кому не нравится синтаксис Gas, подойдёт Nasm.

Источник

Как писать на ассемблере в 2018 году

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

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

1. Язык. Преимущества и отличия от ЯВУ

Ассемблер (Assembly) — язык программирования, понятия которого отражают архитектуру электронно-вычислительной машины. Язык ассемблера — символьная форма записи машинного кода, использование которого упрощает написание машинных программ. Для одной и той же ЭВМ могут быть разработаны разные языки ассемблера. В отличие от языков высокого уровня абстракции, в котором многие проблемы реализации алгоритмов скрыты от разработчиков, язык ассемблера тесно связан с системой команд микропроцессора. Для идеального микропроцессора, у которого система команд точно соответствует языку программирования, ассемблер вырабатывает по одному машинному коду на каждый оператор языка. На практике для реальных микропроцессоров может потребоваться несколько машинных команд для реализации одного оператора языка.

Язык ассемблера обеспечивает доступ к регистрам, указание методов адресации и описание операций в терминах команд процессора. Язык ассемблера может содержать средства более высокого уровня абстракции: встроенные и определяемые макрокоманды, соответствующие нескольким машинным командам, автоматический выбор команды в зависимости от типов операндов, средства описания структур данных. Главное достоинство языка ассемблера — «приближенность» к процессору, который является основой используемого программистом компьютера, а главным неудобством — слишком мелкое деление типовых операций, которое большинством пользователей воспринимается с трудом. Однако язык ассемблера в значительно большей степени отражает само функционирование компьютера, чем все остальные языки.

И хотя драйвера и операционные системы сейчас пишут на Си, но Си при всех его достоинствах — язык высокого уровня абстракции, скрывающий от программиста различные тонкости и нюансы железа, а ассемблер — язык низкого уровня абстракции, прямо отражающий все эти тонкости и нюансы.

Для успешного использования ассемблера необходимы сразу три вещи:

Оптимальной можно считать программу, которая работает правильно, по возможности быстро и занимает, возможно, малый объем памяти. Кроме того, ее легко читать и понимать; ее легко изменить; ее создание требует мало времени и незначительных расходов. В идеале язык ассемблера должен обладать совокупностью характеристик, которые бы позволяли получать программы, удовлетворяющие как можно большему числу перечисленных качеств.

На языке ассемблера пишут программы или их фрагменты в тех случаях, когда критически важны:

Языки программирования высокого уровня абстракции разрабатывались с целью возможно большего приближения способа записи программ к привычным для пользователей компьютеров тех или иных форм записи, в частности математических выражений, а также чтобы не учитывать в программах специфические технические особенности отдельных компьютеров. Язык ассемблера разрабатывается с учетом специфики процессора, поэтому для грамотного написания программы на языке ассемблера требуется, в общем, знать архитектуру процессора используемого компьютера. Однако, имея в виду преимущественное распространение PC-совместимых персональных компьютеров и готовые пакеты программного обеспечения для них, об этом можно не задумываться, поскольку подобные заботы берут на себя фирмы-разработчики специализированного и универсального программного обеспечения.

2. О компиляторах

Какой ассемблер лучше?

Для процессора x86-x64, имеется более десятка различных ассемблер компиляторов. Они отличаются различными наборами функций и синтаксисом. Некоторые компиляторы больше подходят для начинающих, некоторые ― для опытных программистов. Некоторые компиляторы достаточно хорошо документированы, другие вообще не имеют документации. Для некоторых компиляторов разработано множеством примеров программирования. Для некоторых ассемблеров написаны учебные пособия и книги, в которых подробно рассматривается синтаксис, у других нет ничего. Какой ассемблер лучше?

Учитывая множество диалектов ассемблеров для x86-x64 и ограниченное количество времени для их изучения, ограничимся кратким обзором следующих компиляторов: MASM, TASM, NASM, FASM, GoASM, Gas, RosAsm, HLA.

Какую операционную систему вы бы хотели использовать?

Это вопрос, на который вы должны ответить в первую очередь. Самый многофункциональный ассемблер не принесет вам никакой пользы, если он не предназначен для работы под ту операционную систему, которую вы планируете использовать.

WindowsDOSLinuxBSDQNXMacOS, работающий на
процессоре Intel/AMD
FASMxxxx
GASxxxxxx
GoAsmx
HLAxx
MASMxx
NASMxxxxxx
RosAsmx
TASMxx

Поддержка 16 бит

Если ассемблер поддерживает DOS, то он поддерживает и 16-разрядные команды. Все ассемблеры предоставляют возможность писать код, который использует 16-разрядные операнды. 16-разрядная поддержка означает возможность создания кода, работающего в 16-разрядной сегментированной модели памяти (по сравнению с 32-разрядной моделью с плоской памятью, используемой большинством современных операционных систем).

Поддержка 64 бит

За исключением TASM, к которому фирма Borland охладела в середине нулевых, и, который не поддерживает в полном объеме даже 32-разрядные программы, все остальные диалекты поддерживают разработку 64-разрядных приложений.

Переносимость программ

Очевидно, что вы не собираетесь писать код на ассемблере x86-x64, который запускался бы на каком-то другом процессоре. Однако, даже на одном процессоре вы можете столкнуться с проблемами переносимости. Например, если вы предполагаете компилировать и использовать свои программы на ассемблере под разными операционными системами. NASM и FASM можно использовать в тех операционных системах, которые они поддерживают.

Предполагаете ли вы писать приложение на ассемблере и затем портировать, это приложение с одной ОС на другую с «перекомпиляцией» исходного кода? Эту функцию поддерживает диалект HLA. Предполагаете ли вы иметь возможность создавать приложения Windows и Linux на ассемблере с минимальными усилиями для этого? Хотя, если вы работаете с одной операционной системой и абсолютно не планируете работать в какой-либо другой ОС, тогда эта проблема вас не касается.

Поддержка высокоуровневых языковых конструкций

Некоторые ассемблеры предоставляют расширенный синтаксис, который обеспечивает языковые высокоуровневые структуры управления (типа IF, WHILE, FOR и так далее). Такие конструкции могут облегчить обучение ассемблеру и помогают написать более читаемый код. В некоторые ассемблеры встроены «высокоуровневые конструкции» с ограниченными возможностями. Другие предоставляют высокоуровневые конструкции на уровне макросов.

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

Качество документации

Удобство использования ассемблера напрямую связано с качеством его документации. Учитывая объем работы, который тратится для создания диалекта ассемблера, созданием документации для этого диалекта авторы компиляторов практически не заморачиваются. Авторы, расширяя свой язык, забывают документировать эти расширения.

В следующей таблице описывается качество справочного руководства ассемблера, которое прилагается к продукту:

Учебники и учебные материалы

Документация на самом ассемблере, конечно, очень важна. Еще больший интерес для новичков и других, изучающих язык ассемблера (или дополнительные возможности данного ассемблера), ― это наличие документации за пределами справочного руководства для языка. Большинство людей хотят, чтобы учебник, объясняющий, как программировать на ассемблере, не просто предоставляет синтаксис машинных инструкций и ожидает, что читателю объяснят, как объединять эти инструкции для решения реальных проблем.

MASM является лидером среди огромного объема книг, описывающих, как программировать на этом диалекте. Есть десятки книг, которые используют MASM в качестве своего ассемблера для обучения ассемблеру.

Большинство учебников по ассемблеру MASM/TASM продолжают обучать программированию под MS-DOS. Хотя постепенно появляются учебники, которые обучают программированию в Windows и Linux.

3. Литература и веб ресурсы

Beginners

Advanced

4. Практика

Итак, вы уже знаете, что такое ассемблер и с чем его едят. Вы запаслись парой/тройкой книг и веб мануалами, возможно определились и с компилятором… К сожалению уроки программирования выходят за рамки данной статьи, но для тех чей выбор пал на MASM/FASM можете воспользоваться следующими макетами:

Желаем вам, друзья, значительных достижений и новых знаний в 2018 году!

С уважением
Михаил Смоленцев MiklIrk (Иркутский государственный университет путей сообщения),
Алексей Гриценко expressrus (Донской государственный технический университет).

Ps1: Уважаемый, Хабрахабр! Добавьте в ваш редактор подсветку ассемблера (Intel-синтаксис), это пригодится для будущих статей!

Источник

Fasm или nasm что лучше

flat assembler
Message board for the users of flat assembler.

Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучшеIndex > Main > FASM vs. NASM vs. MASM

Goto page 1, 2 Next

Author
ThreadFasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше Fasm или nasm что лучше. Смотреть фото Fasm или nasm что лучше. Смотреть картинку Fasm или nasm что лучше. Картинка про Fasm или nasm что лучше. Фото Fasm или nasm что лучше

Joined: 14 Jan 2014
Posts: 51

I had some experience with MASM32. But the last line of code I wrote, was around 6 years ago.
Could you tell me your personal reason for using FASM instead of MASM or NASM?
I’m interested in «low level asm». 32/64-Bit, Windows (but Linux as well)

Anyway, I will try all three by my self. But would like to hear about your opinion.
MASM is less portable (or even forbidden to be ported), so I think FASM or
NASM will be my choice. What makes FASM «better» than NASM for your needs?

Thank you very much in advance.

Joined: 28 Jan 2004
Posts: 1431
Location: Toronto, Canada

I dropped TASM for the following reasons:

Joined: 14 Jan 2014
Posts: 51

Thank you, AsmGuru62!

Does NASM need a linker?

Joined: 14 Jan 2014
Posts: 51

Joined: 05 May 2007
Posts: 1299
Location: Paradise Falls

Hi upsurt, welcome to forum.

Here some related topics to read.

Joined: 14 Jan 2014
Posts: 51

Joined: 02 Mar 2006
Posts: 829
Location: Jakarta, Indonesia

If I’m not mistaken, Tomasz stated that FASM has a built-in linker. Unfortunately this feature is Windows only.

LocoDelAssembly
Your code has a bug

Joined: 06 May 2005
Posts: 4624
Location: Argentina

Joined: 02 Mar 2006
Posts: 829
Location: Jakarta, Indonesia

Not quite accurate. It is true that Windows programs written in fasm can be linked against DLLs, but that is because of the flexibility of the PE formatter which allows you to write your own import section

Thanks for your correction.

and not specially purposed directives (like extrn in object formats) that allows you to reference external code/data/symbols.

which is why a linker (polink, golink, etc) is needed, right?

LocoDelAssembly
Your code has a bug

Joined: 06 May 2005
Posts: 4624
Location: Argentina

revolution
When all else fails, read the source

Joined: 24 Aug 2004
Posts: 18222
Location: In your JS exploiting you and your system

Don’t know if someone attempted this, I’ve been out way too long.

Joined: 08 Dec 2013
Posts: 296

Just some reasons why I use FASM:

* Supports ANY/ALL CPUs+OSs (that you define)
* Written in 100% FASM assembler
* Efficient source code. NASM’s C/C++ source is wasteful, poorly written, using massive structures to represent instructions. At the time FASM was released in 99′-00′, I was writing a long list of reasons «Why I hate NASM» (its source code) and was using MASM reluctantly (mostly VESA+DirectX)
* Powerful macro system
* Fastest processing speed. Compare to SLOW MASM+NASM. See for yourself
* Updated to support latest CPU instructions
* Editable, redistributable. See LICENSE.TXT
* Lightweight, one executable. MASM is a big bloated package
* Used to create OSs, programs, games, more impressive projects than any other assembler. Just look at what users have created with FASM.

The MASM32 project cannot be used to create open source software. 3. None of its components or source code are redistributable. 4. You cannot use the MASM32 Project to write software for Non-Microsoft Operating Systems

Joined: 30 Jul 2013
Posts: 339
Location: Asia, Singapore

NOTE: Using MASM for operating system development is not prohibited in the license agreement although you may sometimes hear that. This is because people often confuse the MASM and MASM32 licenses; they are 2 unrelated projects.

Joined: 18 Jul 2013
Posts: 114

Just some reasons why I use FASM:

* Supports ANY/ALL CPUs+OSs (that you define)

What does «(that you define)» mean?

Joined: 08 Dec 2013
Posts: 296

dogman: Any instructions that are defined by macros. See Magic-ARM assembler and Java assembler, both written in FASM X86.

sid123: I’m referring to MASM32. M$ confuses people by having hidden separate licenses. Search google for «MASM license». Which one appears at the top of the list? Which one do most users read?

Joined: 25 Aug 2004
Posts: 618

/me waiting for next generation assembler,
i could see so huge space for more intelligent, simpler, beautiful, assembler,

Joined: 29 Sep 2013
Posts: 4

If you used MASM32 you could think about using JWASM. It’s almost 100% compatibile assembler with MASM for 32/64 bits and many OSes(Linux too). It’s not restrictive as MASM. It is free and opensource project.

Joined: 30 Jul 2013
Posts: 339
Location: Asia, Singapore

A «developer» is not one who takes source code written by different people then claims it as their own.

Joined: 18 Jul 2013
Posts: 114

dogman: Any instructions that are defined by macros.

That hardly means any and all CPU or OS. You do realize there is more to life than Windows/Linux and Intel/ARM. even if those things win on pure numbers.

Real programmers can write their own code. A «developer» is not one who takes source code written by different people then claims it as their own.

I agree with you but things changed dramatically because of C and especially C++ and Java which all promote reliance on so many libraries that now sadly most «developers» are just cut-and-paste jockeys. Many big pieces of software are a little code invoking 10,000 classes or 10,000 library calls.

Even assembly developers get stuck with this in *NIX (maybe Windows also, I have no idea) since the syscalls are not very helpful and people really need to use libc or spend their lives writing services the OS should have provided in the first place.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *