News:

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

NASM, FASM, or SolASM?

Started by SunSpyda, April 12, 2009, 02:05:02 PM

Previous topic - Next topic

farrier

Thanks, Vortex!!

I wasn't very clear with that comment.  The fasm can output .obj files as Masm can, which can be linked with other .obj files or .lib files.  But if all your code is in fasm files, you can just specify a .com, .exe or .dll output file.  No linker required, but linkable file output is supported.

Again,

Thanks.

farrier
It is a GOOD day to code!
Some assembly required!
ASM me!
With every mistake, we must surely be learning. (George...Bush)

BogdanOntanu

Quote from: farrier on July 17, 2009, 09:20:53 PM
... The fasm can output .obj files as Masm can, which can be linked with other .obj files or .lib files.  But if all your code is in fasm files, you can just specify a .com, .exe or .dll output file.  No linker required, but linkable file output is supported.

Sol_Asm CAN do that also.

And AFAIK Nasm and Yasm can also do that...

@ramguru:
In  Sol_Asm version 0.29.03 I have fixed that PE32+ (64bits) output problem/bug.
Now the Win64 message box sample works OK (at least on my computer  :green)

You can get it here: http://www.oby.ro/sol_asm/files/sol_asm_2009_07_18_v29_03.zip
Ambition is a lame excuse for the ones not brave enough to be lazy.
http://www.oby.ro

ramguru

Quote from: BogdanOntanu on July 18, 2009, 10:37:34 AM
..
Now the Win64 message box sample works OK (at least on my computer  :green)

You can get it here: http://www.oby.ro/sol_asm/files/sol_asm_2009_07_18_v29_03.zip

Yeah it does .. thank you for fixing that  :U
It seems 'invoke' isn't very win64 friendly if I uncomment (in example)
   ;----------------
   ; alternatively
   ;----------------
   invoke Mess..
app crashes, 'cuz stack gets messed up ..

ecube

GoASM is imo absolutely incredible, while it's built for windows, there's really no other assembler out that makes programming in 64bit as easy yet so power, and it simplifies by removing/not needing the few things in masm I felt were tedious like writing protos over and over. I've converted probably 400
sources i've written in masm to a hybrid GoASM 32bit/64bit versions, only a few macros are holding me back :D

Nasm window support is almost non-existant, I don't mean it's not capable of producing pe files, because it is, I mean the windows user/support base isn't there. Masm ofcourse has the best support base of all the assemblers thanks to the masm32 project.

FASM is great, I don't care much for its syntax myself, but it's the second best assembler to dive into 64bit programming on windows, and its support base is really active. The entire MenuetOS was written in FASM, which unlike most hobby os's it has 32bit/64bit versions, a browser, game ports(doom etc..) and many other neat things

SolASM seems like a interesting start, and is quite capable of a lot of things, but playing around with it myself, I got the impression that it's not very matured and in its current state I personally wouldn't rely on it for any serious coding.

JWASM you might not of heard of this one, but it's almost a full masm clone based off the WASM source. So basically you can write programs for windows and linux in masm's syntax which I think is pretty neat. The author was once a moderator on this forum but he just randomly abandoned us 1 day so I haven't kept up with the project

POASM Vortex and others are huge fans of poasm, it's an assembler that comes with Pelle C, and it has a masm like syntax. I personally never used it much and from reading the authors comments on it, I got the feeling his focus isn't much on PoASM which made me lose interest as again with no support theres no point :)

ramguru

damn I can't just leave w/o reviewing assemblers myself (but be warned I will rather mention bad things instead of good)
only about what concerns me 64bit that is ..
GOASM - has indeed powerful 64bit support, & assembles EVERYTHING, you may not worry about argument sizes when passing them to invoke .. because it will get assembled anyway. But it's not an assembler where you get exactly the same result as expressed with your code instructions. You will get SOMETHING .. usually bigger & maybe optimized. Also it uses some wrapper for procedure calls so you'll get hard time disassembling it. Pe sniffer even reports its generated apps are compressed with Armadillo because of the mess inside :}

NASM ..

FASM is the closest to WYSIWYG assemblers .. its core is very basic & primitive, but macroinstructions is what makes it a great tool. Basically when you finally understand all its macro capabilities, then you've gained enough knowledge to write at least your own asm parser. It has fair 64bit support which expands each day, with macros updates. The main disadvantage as I see it - no addr support. Meaning address of local structure must be manually loaded with lea.. & passed. Despite that this assembler has a bright future for 64bit development..

SolASM is in the middle of its development so I can't judge it much yet .. current situation - humble 64bit dev. support :>

JWASM doesn't support 64bit .. too bad

POASM is very close of having the best 64bit support with its PARMAREA directive .. but
there is something terribly annoying with its linker flag "/LARGEADDRESSAWARE"
Basically you want it to be set to 'YES', & it's set by default 'yes' in all other assemblers.
But once it's set to 'YES' in poasm you'll have to go through a nightmare to correct your code
For example you think this code will assemble correctly ?
hInstance dq ?
..
mov hInstance, rax

You are wrong, you'll have to use register somehow to place a value there
hInstance dq ?
..
mov rcx, OFFSET hInstance
mov [rcx], rax

dancho

Quote from: ramguru on July 18, 2009, 12:30:25 PM
JWASM doesn't support 64bit .. too bad

actually jwasm does support 64bit ( experimental  :wink )
http://www.japheth.de/Download/jwasm197b.ZIP

farrier

Quote from: ramguru on July 18, 2009, 12:30:25 PM
FASM is the closest to WYSIWYG assemblers .. its core is very basic & primitive, but macroinstructions is what makes it a great tool. Basically when you finally understand all its macro capabilities, then you've gained enough knowledge to write at least your own asm parser. It has fair 64bit support which expands each day, with macros updates. The main disadvantage as I see it - no addr support. Meaning address of local structure must be manually loaded with lea.. & passed. Despite that this assembler has a bright future for 64bit development..

Actually, if you include the:
win32ax.inc
file, you get addr support and it does not corrupt eax--unlike Masm.  Tomasz stated today that a 64 bit addr will be implimented.

farrier
It is a GOOD day to code!
Some assembly required!
ASM me!
With every mistake, we must surely be learning. (George...Bush)

BlackVortex

Interesting thread. I'm still sticking with GoAsm, waiting for runtime conditionals.