Why not become a lifetime supporting member of the site with a one-time donation of any amount? Your donation entitles you to a ton of additional benefits, including access to exclusive discounts and downloads, the ability to enter monthly free software drawings, and a single non-expiring license key for all of our programs.

You must sign up here before you can post and access some areas of the site. Registration is totally free and confidential.

Masm32 is also fun to play with. What makes it fun is that it includes Windows headers and macros to make it simpler to get started doing Windows apps. iirc there's a 32 bit example that pops up an OK dialog that assembles to 5 kb(since all it does is call the windows dll to do it.)

It has an "Invoke" syntax that you can use if you hate typing all the pushes and pops.

I think the last time I messed with it was using Win98 but it seems to still be out there.

FASM has an advantage over MASM in that it's free & has source code available - and adopts support for new instruction sets a lot faster than MASM does. And it offers pretty much what MASM does anyway, with the notable exception of return values from macros.

HLA provides an option to translate HLA source code to that used by several other assemblers (as this is being written, HLA provides the ability to translate HLA source code into MASM, TASM, Gas, or FASM format (NASM is planned and being worked on while this is being written).

If this works well, perhaps it is worth starting with HLA and then consider other options (leaning toward NASM atm) later. The idea here being, perhaps the learning curve can be on the gentler side.

I guess HLA has an associated book also in online form (in addition to print):

On the newsgroups in particular there are some very very big flame wars taking place revolving around HLA not being real asm etc etc. Before you ask for help with HLA on a dedicated forum, be sure to poke around and see what kind of reaction other have gotten to questions about it.

Another thing you can do if you program in other languages, some allow embedded asm statements or procedures/functions. That can give you a testbed of a running program and you just code a function in asm. Gives an idea of how the pushes and pops work with parameters, stack setup etc..