News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

GoASM vs. MASM32

Started by Shooter, December 03, 2010, 10:08:25 PM

Previous topic - Next topic

Shooter

What are the advantages / disadvantages, pros / cons, and functional differences between GoASM and MASM32? Which one has the best support?
Never use direct references to anything ever. Bury everything in
macros. Bury the macros in include files. Reference those include
files indirectly from other include files. Use macros to reference
those include files.

dedndave

GoAsm has great support - the author is a frequent member of the forum   :bg
masm has very little actual support, but has been around since forever and is well documented
GoAsm is kinda like masm, with several features added

frktons

Quote from: Shooter on December 03, 2010, 10:08:25 PM
What are the advantages / disadvantages, pros / cons, and functional differences between GoASM and MASM32? Which one has the best support?

Masm32 is the present and the near future.

GoAsm is the present, somehow homeless at the moment, and the near-far future.  :P
Mind is like a parachute. You know what to do in order to use it :-)

vanjast

wrt Masm, Dave, maybe you mean uSofts Masm.

Shooter was asking, I think, about Masm32 (Hutch does differentiate between the two  :naughty: )

Then I'd say, Masm32 is supported well, here and on other sites.

:bg

(Corrected my error  :wink )

dedndave

ah yes - missed that

masm is an assembler by MS

masm32 is a package, based on masm, for writing windows programs in asm
it has libraries, macros, tutorials, examples, help files, and is supprted daily
i think GoAsm uses different header files, but is otherwise compatible with the masm32 package

donkey

Goasm is supported by Jeremy Gordon, he is a member here but with his move to Australia somewhere around half complete he will be scarce for a little while longer. That said, GoAsm fully supports 32 and 64 bit programming models, Unicode for multi-language support, inline strings, and static libraries. It does not require import libraries for DLL based functions and its Invoke directive is more powerful than MASM. However, macro support is limited and certainly not in the same league as MASM's macro support. I write and maintain the headers for GoAsm, they are probably the most complete set of headers for assembly and are designed to closely match the documentation at MSDN, for example if the MSDN entry says to include acctrl.h then that's what you do in GoAsm. All the headers are 32/64 switchable via the WIN64 switch, Unicode switchable and can determine via the WINVER switch features, structure definitions and even whether a given API call is available to the Windows version you have set as your minimum OS version. Currently GoAsm lacks runtime conditionals however that feature is currently in development and should hopefully not take much longer.

MASM is the 800lb gorilla of assemblers. It has very powerful macro support and through that many of the functions intrinsic to GoAsm can be added to MASM. There is a huge library of tutorials and examples for the MASM assembler and quite a lot of support and help out there. It is the defacto standard for assembly language programming on any MS OS. MASM supports 16/32/64 bit programming models. Microsoft has virtually washed their hands of MASM however through the work of a few MS employees it is still being made available even though it has not been necessary for 32 bit inline assembly for some time. Hutch maintains the MASM32 SDK which contains include files and import libraries as well as some useful tools and example code. There are legal issues involved with MASM that limit what you can develop and restrict you to Microsoft OSes, also some EULA's do not allow you to create any commercial software products while others do not allow anything but driver development, you really need to check the EULA for the version you are running to determine what its limitations are.

GoAsm is very close to MASM in syntax however since it is a single pass assembler without type checking there are some fundamental differences. Also different is the way static libraries are dealt with, even though its somewhat "under the hood", it can create a few problems that are difficult to track down. GoAsm, unlike MASM, store symbols in COFF format as opposed to PDB format and does not store line number information, this makes source level debugging impossible, something I have always found to be lacking.

I use GoAsm however for the absolute beginner I would probably suggest MASM as the number of tutorials and examples can help you get up to speed faster. Also the high level directives can make it easier on you, they are not currently available to GoAsm and so it requires much more knowledge of how loops and conditional blocks are structured.

Edgar
"Ahhh, what an awful dream. Ones and zeroes everywhere...[shudder] and I thought I saw a two." -- Bender
"It was just a dream, Bender. There's no such thing as two". -- Fry
-- Futurama

Donkey's Stable