Re: Which Assembler?



On Oct 7, 8:55 am, WillofIrony <spamt...@xxxxxxxxxx> wrote:

So, which is the best: GoASM, NASM, MASM32, RoASM? or did I miss the
best one? BTW, I did scan the FAQ but the latest version is almost
four years old and i suspect that the field of Win32 ASM is a rapidly
changing field at the moment.

Thanks in anticipation,

Michael

Most of the comments about NASM being slow/limited are very outdated.
NASM strikes a good compromise between speed and portability. NASM, as
of recent, fully supports the 64-bit architecture expansion of the x86
(x86-64). NASM also employs less ambiguous RIP relative support which
differs from what its spin-offs, such as FASM and YASM, provide.

NASM has quite a few projects/packages that provide macro facilities
to clean up OS-specific details while keeping absolute control of the
program in your hands. One of these projects is called NASMX, which I
and another colleague work on from time to time. LINK:
http://www.asmcommunity.net/projects/nasmx/

Here is my gripe list about the other assemblers that have been
mentioned. These comments are not here to generate a flame war, and
are based on observable events and/or fact. In the end, I would
encourage you to try all of them for yourself and gather your own
opinion.

1.) MASM is (legally) a windows-only thing. The legality of its
biggest supporting package, MASM32, is questionable at best. MASM32
has, tentatively, been found to be an illegal redistribution of
Microsoft licensed software in Germany (DE). Beyond that, the supposed
agreement between the package author and Microsoft was negotiated with
Microsoft Australia (AU) and would only apply to that country/region.
The reality of the situation, however, is that MASM32 promotes
Microsoft material... and manages to stay under the radar despite its
author coupling MASM discussion/support with his extremist political
agendas. MASM32 does have lots of support, examples and tutorials that
would ease you in to Win32ASM development.

2.) FASM will only run on few x86-based operating systems, and a
handful of hobbyist OS projects that have "ported" it. Also, I have
heard that FASM 2 will have macro facilities that will be fairly/
completely incompatible with the current syntax. If I have
misunderstood this, or if this has changed since I was last informed,
please correct this. Other than that, FASM seems to draw upon a
fanatical crowd, for whatever the positive/negative aspects of such
are worth. The FASM user base is great, but the documentation is poor.

3.) YASM has not been through the years of hardening that NASM has.
We've even brought out a few design flaws/bugs in YASM just from
recently developing NASM further. YASM does accept AT&T/GAS syntax
along with NASM syntax; however, this divides development focus and
you have two things that are supported in good manner, whereas NASM
and GAS can focus on doing one thing great. There might be a few
things different about YASM that you may enjoy over NASM and others,
so go ahead and try it.

4.) HLA seems to enable you as much as it will limit you from really
learning assembly language. I have witnessed people, some of which
participate in newsgroups like this one, trying to move from HLA to
full assembly language and they seem to only have a basic
understanding of computers and programming. This might be more of a
reflection upon the user than language, since it allows those with
poor disposition for assembly language to thrive in HLA, but muddle
their way through full assembly language and more advanced programming
concepts in general.

5.) RosASM is constantly being pushed by its author, Rene "Betov"
Tournis, at the level of the previously mentioned assemblers where-as
it is realistically much more of a lower quality/class assembler.
RosASM is Win32/PE specific, does not support standard library
linking, enforces a mono-file (one huge file instead of functionality
divided modules) programming mentality, and it is notorious for
ignoring legitimate bug reports. Despite all of that, RosASM is still
an assembler and its user base does enjoy what it provides, so you may
as well.

6.) I have no opinion of GoASM, but I know a few experienced and
trustworthy programmers that use/like it, so I will proxy their
approval to you. I know the accompanying linker, GoLink, has some bugs
in it that need to be addressed... so keep that in mind if you intend
to use it.

Obviously, my vote is for NASM as it will run just about everywhere
you want it to. More importantly, it has good documentation, plenty of
examples floating around the internet, and it provides a fairly
consistent/intuitive syntax that will keep you focused on the task at
hand.

.



Relevant Pages

  • Re: Good assembly language programming tutorial
    ... >>someone with knowledge of programming and basic computer architecture, ... >>tutorial aimed at NASM providing I can pick general Assembly Language ... good understanding, but the C/C++ references kinda threw me off track, I ...
    (comp.lang.asm.x86)
  • Re: What language are assemblers written in?
    ... I don't see where NASM is so slow. ... that's particularly true with assembly language -- it gives you the most ... while MASM is faster than most -- including quite ... necessarily more prevalent when writing assemblers (as shown by the ...
    (comp.lang.asm.x86)
  • Re: What Assembly Language Should I Use?
    ... assembly language is *not* the way to program for Linux. ... int $0x80 ... mov eax,4 ... For the Nasm example above, the command line to Nasm would be: ...
    (alt.lang.asm)
  • Re: Teaching Assembly Language Programming
    ... performance string operations, would use those instructions. ... might say about multithreaded programming in assembly language. ... FASM, and, possibly, NASM. ... NASM and MASM helpful. ...
    (alt.lang.asm)
  • Re: Which Assembler?
    ... Having used none of the 'assemblers' listed below, ... programming in assembler for 35 years a couple of points can be made. ... have to know more than one assembly language. ... Most of the comments about NASM being slow/limited are very outdated. ...
    (comp.lang.asm.x86)