To start things off I would just like to say that I am not trying to start a thread of "this assembler kicks the s... out of that assembler" but rather what I am looking for is some good solid information on which of the two assemblers would be best spent in learning how to use; with this opinion coming from someone who has perhaps used both of these assemblers in some detail.

The reason that I ask is because I am currently playing around with both bootloaders and kernels (then embedding a little application that I wrote many moons ago; this application was/is not only a gdisk clone (gdisk is from Norton Ghost) but also an enhancement as it not only fixed several bugs in the version of gdisk (just after symantec bought it) but then went beyond what gdisk could do) to run straight from the kernel)  -- Why do this?? well thanks to skywalker I was digging through my old code (heck I have old code, not only from myself but from all the major systems level players and then some dating well back into 1990 and before {got to love it when you are reading articles that talk about detecting between a 286, 386 and up} and while doing so started to remember how fun all this systems level stuff was before windows came about; then, to top it all off I received in the mail from Intel those novels that us systems programmers just cant seem to put down (Software / Architecture development manuals) which while reading got my juices flowing just that much more!

Any how, to make a long story short I just do not have that much brain space left to spend on playing with both of these assemblers long and hard enough to know which one is the better investment all the way around (both systems level, win32 level and for lack of a better term "market share").  Besides, between all of the assemblers / compilers / debuggers and tools that I already have stuck in my head I just don't need to add two more only for one to be a major waste of time.

Thanks in advance for any insight that you might provide me with on this.

-- MadPrgmr --
Posted on 2007-07-17 21:01:43 by madprgmr
Flip a coin mate.

This is something that people argue over all the time and feel very strongly about so chances are this thread will turn into an argument no matter what your intent. But as far as assemblers go, they're both really good assemblers for system level programing and application level programming alike. FASM used to have a leg-up in that it supported 64-bit versions but a 64-bit edition of NASM was recently released so now it's back to the arguments over which macro-preprocessor you prefer. So honestly it's a toss-up. NASM has been around a lot longer and is extremely stable, but FASM is constantly growing and this means that you'll usually get the latest and greatest features faster.

But being primarily a NASM user, my votes on Netwide Assembler.

Regards,
Bryant Keller
Posted on 2007-07-17 21:28:45 by Synfire
Perhaps you want to see this recent thread at fasm forum

And here there was another big discussion comparing various assemblers (NASM and fasm included).

Cheers
Posted on 2007-07-17 22:58:09 by LocoDelAssembly
FASM and MASM are very different in nature. You can't really "compare" them, like you compare FASM and NASM, you can just name good and bad features of each.

MASM is very highlevel assembler, with every feature you may need built-in. And if not, you are pretty screwed, like with FASTCALL macros.

FASM is lowlevel assembler with strong syntax elements, that allows you to build your own highlevel system, maybe even to extent like MASM has. But in my opinion this kinda defeats purpose of using lowlevel assembler then, and is quite resource-wasting.

Everyone should pick what suits him better. If you need to code for Windows only, you are using only "standard" code constructs, don't care that MASM is proprietary, etc, then MASM is okay choice. Otherwise, you may want to use FASM, and if project is larger, you can build customized set of higher-level constructs to ease your job.
Posted on 2007-07-18 04:12:21 by vid
All:

Thank you for all of the assistance in this matter as it has been of great help!

Just like it was in the old days when it was a matter of mastering TASM (which all the companies that I worked for used) and growing a solid background in MASM it looks like I will focus my attention mainly on being able to use NASM to its upmost ability while building a good foundation in FASM.

While this has truly been a trivial matter in the bigger picture of things, your opinions have been of great value as I hate being just good at all my tools and a master of none {not being able to use your tools to their upmost ability only hurts the project in the long run}.

Anyhow, thanks again and I hope that I may return the favor in the near future.

-- MadPrgmr --
Posted on 2007-07-18 11:08:24 by madprgmr
If you wish to get a Win32 jump-start at NASM, I would suggest checking out the NASM32 Project, something Synfire and I put together to help people out with their Win32, XBOX, and eventually Linux/X11, endeavors.

You will find lots of macro files so you can get a good look at how to use things and make those important associations in your head in the comfort of the Win32 environment :)

I think Vid offers something called "FASMLIB" for FASM (and other assemblers???) but he will be better at explaining the specifics of it.
Posted on 2007-07-18 13:19:45 by SpooK

If you wish to get a Win32 jump-start at NASM, I would suggest checking out the NASM32 Project, something Synfire and I put together to help people out with their Win32, XBOX, and eventually Linux/X11, endeavors.


Thanks for the tip!  While I have downloaded and installed NASM32 project I have yet
spent any time examining how NASM32 development for windows systems applications differs from what I have been using (All of my systems level software for windows, to include a few device drivers {along with a WDM tutorial that I was working on} has been with either MASM32 or MASM from the IFS/DDK)


You will find lots of macro files so you can get a good look at how to use things and make those important associations in your head in the comfort of the Win32 environment :)


Great!  I guess I better take a look at these macros before I do my next project as I would hate to waste any time reinventing things.


I think Vid offers something called "FASMLIB" for FASM (and other assemblers???) but he will be better at explaining the specifics of it.


Hmmm... I have not heard of the FASMLIB and since I plan on working somewhat with this assembler I guess I better go track it down and see what it is about.

BTW:  When installing NASM32 on a few systems I noticed that the installer will hang during the building of some files (since this is not the correct place for this post I will gather more information and post it in the NASM32 project area)

-- MadPrgmr --
Posted on 2007-07-18 14:12:15 by madprgmr
FASM is usually very fast at supporting new instructions, while NASM development is a bit slower... that could be an important factor for you. NASM is also more portable than FASM, though this in practice probably won't matter much to you (unless you have a build-farm running on itaniums or whatever :) ).

FASM has cute tricks like outputting directly to PE executables, and it seems to me that it's macro system is stronger than NASM's (although the syntax is weird) - neither FASM nor NASM have MASM's EXITM statement, though, which is a shame.
Posted on 2007-07-19 06:21:01 by f0dder
about FASMLIB:

It is general-purpose library for assembly language, like Standard C Library is for C language.

Currently it contains some routines for number <-> text conversion, memory handling, writing and reading files/console, etc... basic stuff. Some important parts are still missing (command line support, unicode).

Note that FASMLIB is currently without documentation. I am doing a complete rewrite of documentation. But if you have any kind of problems or question, I will help you.

FASM, NASM, YASM, MASM are supported for now.

I am experiencing troubles with fasmlib site currently, and my admin is out of reach. For now, you can download latest fasmlib here

PS: Support for NASM is problematic, because it's not possible to create library header in NASM, without enforcing usage of macros on caller. And FASMLIB is designed to be used from pure assembly, not with macros. As a result, entire FASMLIB is always linked, not only parts of it which you use. That means there is always ~20KB of extra code.
Posted on 2007-07-19 12:57:39 by vid
Vid:

Thanks for the detailed information on FASMLIB, I have downloaded the file (thanks to your link) and hope to try it out this weekend.

-- MadPrgmr --
Posted on 2007-07-19 14:47:41 by madprgmr