Nasm or Fasm
Какой из этих ассемблеров выбрать? Какие есть средства разработки под них? Подкинте, если можно, ссылки на материалы по данной теме.
Какой из этих ассемблеров выбрать? Какие есть средства разработки под них? Подкинте, если можно, ссылки на материалы по данной теме.
О FASM_e судить не могу, так как мало с ним имел дело. Могу расказать о достойнствах/недостатках NASM_a. Недостатков мало и они не значительны, поетому начну с достойнств. Синтакс NASM_a очень прост/элементарен и в отличие от таких ходовых ассемблеров как TASM/MASM не содержит бюрократических элементов. Именно поетому можно очень быстро аддаптироваться к нему. Несмотря на ето NASM имеет очень мощный со-проц., которий предоставляет ряд инструментов для изящной и оптимальной реализации любых макросов.
NASM поддерживает практически все ходовые форматы выходных файлов.
NASM opensource, что даёт возможность добавить свой формат. Стоит упамянуть мощную поддержку со стороны разработчиков. По сегоднешний день все мои вопросы оставленные в форуме были удв. ответчены в течение 24h.
О недостатках. Хмм .. даже не знаю :) NASM 2x-проходной, но етих проходов обычно предостаточьно. NASM не поддерживает привычьных средств реализации структур, но их можно написать самому, под себя.
У меня есть руссифецированний мануал по NASM_у.
Если кого заинтерессовало - могу выслать, пишите.
Вот главный ресурс по NASMу - http://nasm.sourceforge.net/
Успехов!
О FASM_e судить не могу, так как мало с ним имел дело. Могу расказать о достойнствах/недостатках NASM_a. Недостатков мало и они не значительны, поетому начну с достойнств. Синтакс NASM_a очень прост/элементарен и в отличие от таких ходовых ассемблеров как TASM/MASM не содержит бюрократических элементов. Именно поетому можно очень быстро аддаптироваться к нему. Несмотря на ето NASM имеет очень мощный со-проц., которий предоставляет ряд инструментов для изящной и оптимальной реализации любых макросов.
NASM поддерживает практически все ходовые форматы выходных файлов.
NASM opensource, что даёт возможность добавить свой формат. Стоит упамянуть мощную поддержку со стороны разработчиков. По сегоднешний день все мои вопросы оставленные в форуме были удв. ответчены в течение 24h.
О недостатках. Хмм .. даже не знаю :) NASM 2x-проходной, но етих проходов обычно предостаточьно. NASM не поддерживает привычьных средств реализации структур, но их можно написать самому, под себя.
У меня есть руссифецированний мануал по NASM_у.
Если кого заинтерессовало - могу выслать, пишите.
Вот главный ресурс по NASMу - http://nasm.sourceforge.net/
Успехов!
Да. Было бы круто если бы nasm поддерживал режим Ideal. Хотелось бы еще добавить несколько недостатков: не помнит типы переменных (а это очень важно, потому что иногда ошибку будет найти ну просто невозможно); лично для меня отсутствие нормальной поддержки структур очень большой минус, часто бывает что без них не удобно работать (скажем с дескрипторами файлов), а с помощью макросов настроить нормально не получиться (мне кажется), но это только мое сугубо личное мнение; необходимо явно указывать ближние и дальние переходы (также помойму насчет ближних коротких и длинных переходов (надеюсь вы поняли что я имел ввиду (т.е. короткий ближний - +-128 байт, длинный ближний +-4 гб))); не генерирует автоматически короткую инструкцию push imm8 ну и другие недочеты по поводу генерации машинного кода.
А так nasm - очень хороший ассемблер, тем более бесплатный и opensource
Fasm. Хм... Ну что могу сказать, мне особо не понравился, нет ничего особенного, хотя с ним дело я особо не имел. Не понравилось как генерирует выходной код - поболее чем у других ассемблеров (я не имею ввиду, то что он NOP-ов ставит кучу для выравнивания в 32 байта). Для меня лично существует два хороших ассемблера nasm и tasm, все.
P.S. Если уж я тут нес бред, не сердчайте сильно :)
Да. Было бы круто если бы nasm поддерживал режим Ideal. Хотелось бы еще добавить несколько недостатков: не помнит типы переменных (а это очень важно, потому что иногда ошибку будет найти ну просто невозможно); лично для меня отсутствие нормальной поддержки структур очень большой минус, часто бывает что без них не удобно работать (скажем с дескрипторами файлов), а с помощью макросов настроить нормально не получиться (мне кажется), но это только мое сугубо личное мнение; необходимо явно указывать ближние и дальние переходы (также помойму насчет ближних коротких и длинных переходов (надеюсь вы поняли что я имел ввиду (т.е. короткий ближний - +-128 байт, длинный ближний +-4 гб))); не генерирует автоматически короткую инструкцию push imm8 ну и другие недочеты по поводу генерации машинного кода.
А так nasm - очень хороший ассемблер, тем более бесплатный и opensource
Fasm. Хм... Ну что могу сказать, мне особо не понравился, нет ничего особенного, хотя с ним дело я особо не имел. Не понравилось как генерирует выходной код - поболее чем у других ассемблеров (я не имею ввиду, то что он NOP-ов ставит кучу для выравнивания в 32 байта). Для меня лично существует два хороших ассемблера nasm и tasm, все.
P.S. Если уж я тут нес бред, не сердчайте сильно :)
Большенство того, что ты описал выше релативно и зависит от вкуса кодера, поетому нельзя сказать что это недостатки. E.g. мене нравиться полностью, пологаясь на себя контроллировать результат моих идей. В принцепе именно поэтому я люблю ассемблер :) . Абсолютний контроль также подразумевает ответственность за интерпретирование данных, за растояние переходов etc. Но это моя точка зрения. Надеюсь не толко я её разделяю ? :) (:
Когда я пробовал Nasm он не поддерживал 6 байтные переменные (это когда 2 байта сегмент и 4 - смещение). И сэмулировать их у меня неполучилось.
P.S. Может уже добавили.
А как FASM по быстродействию по сравнению с NASM'ом или с тем же TASM'ом? Кстати, какой дизассемблер\дебагер\IDE порекомендуете?
Для каких целей ?
И что ты подразумеваешь под быстродействием ?
Процедуру перевода/генерирования opcodes ?
Ну...для разработки программ на ассемблере под Win32 и Linux.
>И что ты подразумеваешь под быстродействием ?
Исполнение сгенерированного машинного кода.
>Исполнение сгенерированного машинного кода.
:D :D
Ты что думаешь, что выходные машинные коды у разных ассемблеров разные? Ну есть конечно очень маленькие отличия. Но эти отличия касаются только совсем маленького различия размеров выходного кода, но никак не быстродействия его исполнения!!!
По большому счету выходные машинные коды идентичны.
Ну...для разработки программ на ассемблере под Win32 и Linux.
>И что ты подразумеваешь под быстродействием ?
Исполнение сгенерированного машинного кода.
Если хочешь разрабатывать под линукс и винду, то используй насм. Он поддерживает много выходных форматов, так что удобно совмещать с языками высокого уровня.
Flat(плоский)asm больше подходит для создания операционных систем и драйверов.
На скорость исполнения машинного кода не влияет компилятор, с помощью которого он получен. Тут важнее твое умение оптимизировать код.
Как не странно, бывает и такое. Попробуй к примеру инструкцию xor eax, eax скомпилировать fasm'ом и masm'ом и ты это увидешь сам.
P.S. Я за fasm, но nasm наверное тоже не плох. Хотя, насколько я знаю, он сейчас почти не развивается.