News:

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

Disadvantages of GoAsm

Started by drhowarddrfine, December 29, 2004, 02:30:16 PM

Previous topic - Next topic

drhowarddrfine

donkey,

I believe you said you use GoAsm exclusively now and like it very much but I was wondering if you could tell me any disadvantages of using GoAsm.  I think I read it doesn't allow segmented programming so it would be for Windows/flat programming only (?) but other than that.

donkey

Hi Doc,

Yes, it is a flat mode 32 bit assembler.

The lack of GoAsm specific source code, something I am undertaking to fix myself, is a major drawback. There are some things that people see as a disadvantage that can be very advantageous. For example no parameter checking can go either way, it is nice to be able to move a word into a dword variable without an error or a WORD PTR etc... The macro command language is extremely limited in it's abilities but since I don't use it much that does not concern me. It is a very explicit assembler, for example you cannot just use mov MemVar, 2, first you must specify that it is a memory variable (as with MASM) by enclosing it in square brackets and also, because the size of the constant 2 is not known you must specify the size of the move mov W[MemVar], 2. This is good programming practice even in MASM but in GoAsm it is much more strict. Library support is still relatively new and though for the vast majority of cases it works flawlessly, there are a few quirks that result from supporting MASM and C libraries. No UNIONs in structures is something I have complained about on occasion, and Jeremy assures me that it is on the "todo" list. The lack of high level pseudo-macros like .IF and .WHILE can make coding a bit more complicated and a little less readable but generally hand coding the loops and conditions helps to make more optimal code.

The advantages far outweigh the disadvantages however, inline strings, full true Unicode support even for compilation of Unicode source, no import libraries, ordinal calls like invoke shell32.dll:623, param, autoreversing mov strings (mov eax,"test" is reversed to mov eax,"tset"). In all it is extremely similar to MASM but follows Jeremy's philosophy that there should be no ambiguousness in coding with his assembler, that is the major attraction for me. But the number one, beat 'em all advatage over MASM is that I can email Jeremy to make a request and (like libs) it is generally added or at least I get an answer as to why not.
"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

Relvinian

For me, as Donkey has pointed out, there are a lot of things about GoASM I like. I like the syntax a lot more then MASM but I still use MASM mainly because of ONE reason. GoASM doesn't put "debug" information into the .OBJ files you compile so if you use a debugging tool which support that type of thing you won't see any source code (the .ASM file with any comments, etc).

Since I'm not a 100% programmer of ASM full time and don't know ASM as well as I would like, at least seeing the .ASM file with all its comments, etc help me understand the code easier then just looking at raw ASM in some debugger.

But other then that one feature, I like GoASM. Once that has been added (if it ever does), I'll fully switch. Basically, the best advice I can give on trying out ANY assembler is use it, find out what it can and can't do. See for yourself if it has everything you want/need in a tool to your liking. If it doesn't, way that disadvantage and see if it keeps you from using it full-time.

Relvinian

James Ladd

Personally I like the purity and simplicity of goAsm.
I dont want all the fluff in MASM but that being said, MASM has a great deal of support and this makes it hard to choose between the two.
I have also had a problem with the win32 includes and found that some code I did in goAsm didnt work, but it did when I used MASM.
This was strictly related to the SOCKET structures and goAsm's lack of support for unions and most likely my lack of skill.
Rgs striker

donkey

Hi Relvinian,

I have asked Jeremy about embedding line number information in the past and though I can't recall the exact response I believe he said he would look into it. It is actually a part of the OBJ file specs and though I think it would be complicated, the reward is huge for exactly the reasons you give. Being able to browse the source code in lock step with the decompiled code is a great advantage when debugging.
"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

bushpilot

#5
I use goasm exclusively as well.  I am not nearly a prolific as Donkey, but I am happy with it.

I would say the main disadvantages of using goasm could be:

1)  Weak macro system,
2)  No huge code base like masm,
3)  No jump optimization.

I get by fine without the above.

I regret you asked for the disadvantages, because the advantages so significantly outweigh the disadvantages, that I have never looked back after starting with goasm.

Advantages, in no particular order, include:

1)  Clear and logical syntax,
2)  Used with golink, the clean way it works with dlls and with the API,
3)  Possibly the fastest assembler (if not, that's ok too, it is close enough),  :lol
4)  Good support, via this forum and via Jeremy direct.  Some of our better coders like donkey and vortex use goasm, and answer questions quickly.

Add to this list the others listed above.

Greg


drhowarddrfine

The reason I asked for the disadvantages is because no one ever does.  Frequently people will talk about how good something is but you find out later, in the middle of something, why you wish you stayed with what you had.

donkey

I agree Doc, it's sometimes more important to know the limitations than the capabilities. Most of GoAsm's limitations are minor but can be annoying. For myself the largest unresolved issue is UNIONS in structures, Jeremy does not use structures in his personal coding so I am content to wait as it's not a pressing concern for him. The addition of lib support was the biggest single thing that pushed me to use GoAsm exclusively, until then it was not useful as a "production" tool.

I found GoAsm mostly by accident when pellailo asked me to look into working out a RadASM command line for GoLink. BushPilot had mentioned GoAsm in the thread and since I was playing with GoLink anyway, I took a look at it. For a long time it was my "second" assembler as it does alot of things in a more convenient way but when lib suuport was added I just dropped MASM all together as the advantages of GoAsm and syntax similarity made MASM redundant for me.

One thing I forgot to mention is scoping of labels is much more powerful and logical in GoAsm. For example you can have a LOCAL and global variable with the same label. Code labels like 1:, 2: etc.. or A1:, L2: are anonymous but allow you to jump past other anonymous labels, there is : which is equivalent to @@: in MASM. I find the label handling in GoAsm is easily the most powerful and flexible of any assembler I have used.
"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

BrWarburto

I have been using GoAsm for over a year and find it very good. At present I am developing a large console-type package. I am having some difficulties with multifile I/O and cannot get Createfile to work. However at the moment I am using Dos-type pipes for file I/O. This works fine but at the moment it is not possible to use GoBug with ithis arrangement to check for malfunctions.


:bg

Vortex

Hi BrWarburto,

Nice to see you here, welcome  :U

What is exactly the problem with CreateFile?

AeroASM